[計概] 編譯器(Compiler)與直譯器(Interpreter)

前言

目前接觸過C++ 、 Python、JavaScript,雖然知道他們屬於哪種特性的程式語言,但一直沒有好好了解編譯器直譯器 兩者差異,藉此機會查資料筆記一下。

編譯

編譯意思指程式原始碼會經編譯器(compiler) 轉換成目的碼(object code) 後,再編譯成計算機所看的懂的機器碼(machine language),最後再執行。使用編譯器的語言稱為編譯式語言,多半是靜態型語言(static language)

靜態語言的特點: 會事先定義的型別,做型別檢查。

著名例子

  • C
  • C++

直譯

直譯意思指原始的程式碼只要經過直譯器(Interpreter) 即可轉換成可執行碼,因為它們不需經由編譯器,在執行時才會將原始碼直譯成執行碼。直譯式語言好處在開發上具有較彈性靈活的型別處理(不需事先定義資料型別),因為可以立刻看到指令的執行結果,有錯誤可迅速修正。

使用直譯器時,所使用的程式語言就像變成一個會和你互動的環境,每當輸入一行程式,直譯器會即時執行該行程式命令,通常又被稱作腳本語言。

著名例子

  • JavaScript
  • Python
  • Ruby
  • PHP

兩者差異

執行速度

大部分在相同的邏輯下比較兩者執行速度,使用編譯語言的速度會比使用直譯語言來得快,原因在編譯語言已經先預先編譯過了,因此在執行期間相較於直譯語言少了一行一行執行程式碼的時間。

開發速度

編譯語言的程式開發、除錯速度會較編譯語言來的慢,因為編譯語言無法像直譯語言一樣,在開發完一段程式碼就可以馬上執行並且除錯,且直譯語言也給予軟體開發者更有彈性以及快速的開發流程。

獨立執行與否

編譯式語言產生的程式幾乎都可獨立執行,因為它們都是由Compiler進行型別/語意等檢查,以及經過連結器的處理,程式碼幾乎可以直接存取系統服務(system service)。

直譯式語言則是必須依賴一個執行環境(execution context),如PHP、Python等腳本語言不需要各平台的編譯器,但是需要先安裝在各個平台上的運行環境以及相應的package才能保證程式跨平台特性

也就是說

想把寫好的程式放到另外一台機器上跑, 只要將編譯器編譯出來的可執行檔(.exx),拿到新機器上便可以執行, 而直譯器則必須要求新機器上,必須要有跟另一台機器上相同的直譯器, 才能組譯執行你的程式!

來源文章

[Programming] 編譯 vs 直譯

Comments