什麼是程式語言?
電腦可以幫助我們人類完成許多事情,我們的工作就是告訴電腦他要幫我們完成什麼,否則電腦不會知道他要做什麼。人類可以靠一般的語言溝通,也就是英文、中文、西班牙文等等。而我們要如何跟電腦溝通呢?沒錯,就是程式語言!程式語言就是一行一行由人類告訴電腦的指令。而程式語言又分為三種:
- 機器語言 (Machine Language)
- 組合語言 (Assembly Language)
- 高階語言 (High-level Language)
機器語言
機器語言,英文叫做 Machine Language。在剛發明電腦的時候,因為還沒有其他程式語言,所以工程師都是用機器語言在跟電腦溝通的。
而機器語言的組成非常簡單,就只有0和1,但是卻非常不直觀也難以理解。這邊是小小的一段機器語言:
00011010 00101011
是不是完全看不懂呢?沒關係我也看不懂。
而為什麼機器語言只有0跟1呢?那是因為在電腦的世界,電腦只能分辨兩種訊號,一種是沒電(0),另一種就是有電(1)。而在機器語言中,每一個0和1都代表一個bit。
組合語言
組合語言,英文叫做 Assembly Language。
由於機器語言實在太不直觀,因此工程師們另外發明了另一種語言:組合語言。
基本上組合語言是透過縮寫與數字組成的。這邊是小小的一段組合語言:
MOV AL, 61h
這裡的MOV其實就是move的縮寫,所以相比於機器語言,若單看指令組合語言是比較平易近人的。
但是,因為電腦讀得懂的是機器語言,因此我們需要透過某種方式將組合語言轉化爲機器語言。
就好比說一個講中文的 (組合語言) 需要一個翻譯機才能跟講英文的 (機器語言) 溝通。而這裡的翻譯機,就叫做組譯程式 (assembler)。
高階語言
高階語言,英文叫做 High-level Language。
雖然相比於機器語言,組合語言確實平易近人許多,但是當有上百上千行組合語言的時候,要閱讀起來依舊是非常的不容易。
為了使工程師最有效率的工作以及閱讀效率達到最大化,高階語言因此而誕生。我們耳熟能詳的程式語言比如說C、C++、Java,這些都屬於高階語言。
然而,就和組合語言一樣,高階語言也需要透過翻譯機才能讓電腦理解。而這邊有兩種翻譯機可以選擇:
- 編譯器 (compiler)
- 直譯器 (interpreter)
編譯器
編譯器的工作就是負責將你寫的高階語言程式碼轉化為一個執行檔 (executable),電腦會接收這個執行檔並且執行在這個檔案裡面的指令。
直譯器
直譯器則不會產生執行檔,相反的,直譯器會逐行翻譯你的高階語言為機器語言,並且交由電腦去執行。
因此,兩者最大的差別就在於,在程式執行時,編譯器在產生一個執行檔後就可以放假了。而直譯器則是需要從頭工作到尾直到程式結束。大多數語言都可以選擇要用編譯器或是直譯器來翻譯高階語言,但是在C++的世界,我們只能夠選擇編譯器。
如果看得懂英文,可以參考 StackOverflow 上這篇 Difference between compiled and interpreted languages 有更詳細的說明。
總結
一般人可能認為,程式語言就是我們耳聽能詳的 Python、C++ 等等。這些當然是程式語言,但只能算是其中一部分。
在這章中,我們完整的介紹了不同的程式語言,包括機器語言、組合語言、以及高階語言。
希望讀完這章可以讓你們更了解什麼是程式語言!