什麼是編譯式語言,直譯式語言?

Kevin Tung
3 min readMay 26, 2020

--

Photo by Christopher Robin Ebbinghaus on Unsplash

最近有個工程師朋友再問我:什麼是編譯式語言,什麼是直譯式語言?Python屬於哪一種呢?

我聽到差點沒昏倒😓

今天就帶大家來看看,這兩種語言的差別吧!順便幫我這朋友上一堂課😁

編譯式語言(Compiled language)

其實電腦只看得懂1跟0,也就是機器語言。不過要我們人去寫機器語言,也太強人所難了;不只不好思考,我們處理滿篇的0與1也不可能比電腦快,這樣效率太低了。

於是乎,人類發明了:編譯器(compiler)

我們可以透過用接近人類語言的程式語言,將code寫好之後,再交給編譯器去幫我們「翻譯」成電腦看得懂的機器語言(也就是翻譯成滿篇的0與1),再請電腦執行翻譯過後的程式。

編譯器的主要工作,就是個翻譯官

這類型的語言多半都是強型別的語言(strongly-typed),有非常嚴格的檢查機制。不過它們的執行速度非常快,畢竟已經翻譯成電腦看得懂的語言了。著名的編譯語言有:C、C++、Java、C#、Rust、Objective-C、Swift等等。

直譯式語言(Interpreted language)

既然電腦只看得懂0與1的機器語言,直譯式語言一樣會把程式語言翻譯成機器語言,差別在於它是一行一行翻譯,而不是一口氣將整篇翻好。直譯式語言會從上到下,由左至右,翻譯完一行之後,執行一行。有點像專業的口譯翻譯員,聽完一段翻譯一段,而編譯式則比較像筆譯翻譯員,將整篇文章讀完,再將整篇翻譯。

直譯式的語言多半為弱類型的語言(weakly-typed),語法非常簡單易懂,甚至快跟平常說的英文一樣了,非常易學。著名的語言有:JavaScript、Python、Ruby、PHP、

直譯式語言語法簡單好懂

不過直譯式語言這麼做的代價當然就是,速度很慢。畢竟你想想,整篇翻完執行,跟一行一行翻譯然後一邊執行,哪邊比較快呢?當然是整篇翻完得比較快。需要追求速度的程式,基本上都是用C++去寫的。但直譯式語言雖然執行速度慢,但開發速度就很快了,除錯也比編譯式快,畢竟你一寫完可以馬上執行馬上看結果,不用等編譯過程。

一般公司的大型系統,會比較偏向使用編譯式語言撰寫。原因簡單,因為幾十萬,甚至幾百萬行的code,如果要邊翻譯邊執行,那速度非常慢,公司要虧損多少啊?而且因為強型別的檢查機制,要debug也相對容易。

不過直譯式語言也有其優點,像是寫自動化測試等等。這種可以寫一點然後馬上測試看結果的,非常適合直譯式語言。

總結

  • 編譯式語言執行速度上比直譯式語言快,因為是直接執行翻譯過的機器語言,不過要執行總是得經過一段編譯過程,而且編譯出來的機器語言也有平台依賴性
  • 直譯式由於一邊翻譯一邊執行,所以較慢,不過靈活性非常大,適合用於編寫較小型的專案,或一些工具程式等等

--

--

Kevin Tung

A developer who is passionate about programming , learning to code, and sharing that knowledge