編譯語言 VS 直譯語言

Po-Ching Liu
3 min readDec 27, 2017

程式語言發展至今種類玲琅滿目,除了語言本身語法的不同之外,程式語言本身的特性也會有所不同,因此本章將簡單的整理編譯語言以及直譯語言之間的差異。

編譯語言 (Compiled language)

一種程式語言的類型,編譯語言在程式執行前會先透過編譯器(compiler)將程式碼編譯(Compile)成計算機所看的懂的機器碼(machine language),最後再執行。編譯式語言多半會是靜態語言(static language),它們會事先定義的型別、型別檢查 (type check) 與擁有高效能的執行速度等特性。

編譯語言— C、C++、bjective-C、Visual Basic等等。

直譯語言 (Interpreted language)

一種程式語言的類型,不同於編譯語言,直譯語言在執行時會一行一行的動態將程式碼直譯(interpret)為機器碼,並執行。直譯語言多半以動態語言(dynamic language)為主,具有靈活的型別處理,動態生成與程式彈性,但速度會比編譯式語言要慢一些。

直譯語言 — JavaScript、Python、Ruby等等。

差異

一般而言,在相同的邏輯下,執行期的執行速度,使用編譯語言的速度會比使用直譯語言來得快,其原因在於編譯語言已經先預先編譯過了,因此在執行時期相較於直譯語言少了一道step-by-step的直譯程式碼的時間。然而這也造成了編譯語言的缺點,編譯語言的程式開發、除錯速度會較編譯語言來的慢,因為編譯語言無法像直譯語言一樣,在開發完一段程式碼就可以馬上執行並且除錯,且直譯語言也給予軟體開發者更有彈性以及快速的開發流程。

使用編譯語言產生的程式幾乎都是可獨立執行的,因為它們都是由編譯器進行型別/語意等檢查,程式碼幾乎可以直接存取系統服務 (system service) 與 APIs,所以執行效率會特別好;直譯式語言則是必須依賴一個執行環境 (execution context),語言可用的功能由這個執行環境提供,例如 JavaScript 只能使用瀏覽器提供的功能,它無法獨立執行 (看起來像獨立執行,實際上卻是系統自動在背後建立執行環境,如 HTML Application)。

為了改善編譯語言以及直譯語言的缺點,因而發展出即時編譯的技術,這種技術混合了編譯語言與直譯語言的優點,如同編譯語言,會先把程式原始碼編譯成中介碼 (Bytecode)。到執行期時,再將中介碼(bytecode,C#為例)直譯,之後執行。使用即時編譯技術的語言會比純編譯語言來的慢一些,但是卻又擁有直譯語言的特性。代表語言有 — Java、C#。

--

--