6.2 高階語言有內建翻譯機!

需要被翻譯的高階語言

  之前我們提到機器語言只有0和1,因此組合語言需要透過「組譯器」來翻譯成機器語言,才能讓電腦了解我們在說什麼。而更接近人類的高階語言當然也需要被翻譯,不過它有三種選擇「編譯」、「直譯」和「即時編譯」。

編譯

  • 編譯是透過「編譯器」在程式執行前將高階語言編譯成機器語言。

  • 程式經過編譯後產生的目的碼,可以透過「連結器」連結與程式相關的檔案,以產生可執行檔(像.exe)。當要執行程式時,只要透過系統的「載入器」將可執行檔載入記憶體就可以直接執行,不需重新翻譯。

  • 編譯式語言多半以「靜態語言」為主,它們會事先定義型別,能夠在程式執行前(編譯時期)檢查中型別錯誤。優點是有高效能的執行速度,不過缺點是程式語法繁瑣、彈性不足,也只能檢查出執行前的簡單錯誤。

  • 編譯語言有C、C++、Objective-C等。

直譯

  • 直譯是經過「直譯器」將程式一行一行的翻譯成機器語言,並立即執行的翻譯方式。

  • 直譯式語言多半以「動態語言」為主,具有靈活的型別處理,動態生成與程式彈性。在執行時確認與檢查型別,優點為語法簡潔且有較高的彈性,而缺點則是型別錯誤要到執行時期才會呈現出來,效能較不理想。

  • 直譯式語言JavaScriptPythonRuby等。

編譯與直譯的差別

  • 編譯式語言只需翻譯一次,而直譯式語言則是每次執行時都需再翻譯。

  • 執行期的執行速度,編譯是語言較快,因為已經預先編譯,只需叫出執行檔去執行,而直譯式語言需要一行一行翻譯並執行。

  • 直譯式語言的程式開發與除錯速度比較快,因為馬上執行便能立即除錯,相對來說也較適合新手。

即時編譯

  • 即時編譯是為了改善編譯語言及直譯語言的缺點,混合了兩者優點。

  • 即時翻譯會一句一句編譯原始碼,但翻譯過的程式碼會快取起來成為「中介碼」。到執行時,再將中介碼直譯,之後執行。

  • 即時翻譯式語言有JavaC#

小結

  看到這裡,你應該認識高階語言內不同的翻譯器了,而從這個章節,也能發現總是推薦程式新手學習PythonJavaScript,是因為它們都是直譯式語言,在初期嘗試的階段可以立即執行並除錯!