什麼是程式語言?

電腦可以幫助我們人類完成許多事情,我們的工作就是告訴電腦他要幫我們完成什麼,否則電腦不會知道他要做什麼。人類可以靠一般的語言溝通,也就是英文、中文、西班牙文等等。而我們要如何跟電腦溝通呢?沒錯,就是程式語言!程式語言就是一行一行由人類告訴電腦的指令。而程式語言又分為三種:

  1. 機器語言 (Machine Language)
  2. 組合語言 (Assembly Language)
  3. 高階語言 (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,這些都屬於高階語言。

然而,就和組合語言一樣,高階語言也需要透過翻譯機才能讓電腦理解。而這邊有兩種翻譯機可以選擇:

  1. 編譯器 (compiler)
  2. 直譯器 (interpreter)

編譯器

編譯器的工作就是負責將你寫的高階語言程式碼轉化為一個執行檔 (executable),電腦會接收這個執行檔並且執行在這個檔案裡面的指令。

直譯器

直譯器則不會產生執行檔,相反的,直譯器會逐行翻譯你的高階語言為機器語言,並且交由電腦去執行。

因此,兩者最大的差別就在於,在程式執行時,編譯器在產生一個執行檔後就可以放假了。而直譯器則是需要從頭工作到尾直到程式結束。大多數語言都可以選擇要用編譯器或是直譯器來翻譯高階語言,但是在C++的世界,我們只能夠選擇編譯器。

如果看得懂英文,可以參考 StackOverflow 上這篇 Difference between compiled and interpreted languages 有更詳細的說明。

總結

一般人可能認為,程式語言就是我們耳聽能詳的 Python、C++ 等等。這些當然是程式語言,但只能算是其中一部分。

在這章中,我們完整的介紹了不同的程式語言,包括機器語言、組合語言、以及高階語言。

希望讀完這章可以讓你們更了解什麼是程式語言!