【JS課程筆記】-直譯式語言 vs 編譯式語言

Ivy Ho
Apr 23, 2020

--

Photo by Christin Hume on Unsplash

在【JavaScript 核心篇】課程第一個章節「執行環境、作用域」中,首先拉開序幕的主題為直譯式語言編譯式語言。

而一開始課程就帶領我們思考一個問題,

「JavaScript的程式碼在電腦上是如何運行的呢?」

由於我們所撰寫的程式語言無法直接被瀏覽器、電腦給閱讀,所以在運行前會經過解譯。

而程式語言依解譯方式不同,會分為直譯式語言編譯式語言

直譯式語言 Interpreted Language

原始碼(source code)透過直譯器(Interpreter)即可轉換成可執行碼,並直接運行。程式碼的錯誤會直接反映在環境中。

photo by 六角學院
photo by 六角學院

直譯器轉換過程 (以變數為例)

  1. 將語法基本單元化 :
    變數還未被定義、賦予值,只是先將結構中的關鍵字一一取出來。
  2. 轉為抽象結構樹 :
    轉為像是JSON的資料格式,將整個結構樹定義出來,需特別注意,程式碼在此階段還未真正運行。
  3. 代碼生成 :
    會因執行環境不同 (例如使用瀏覽器,或使用Node.js),生成的代碼也會有點不同,在代碼生成之後才會真正運行。

由於直譯式語言的原始碼不會經由編譯器 (compiler)事先編譯 ,而是在執行時才會將原始碼直譯成執行碼,所以速度上會比編譯與連結器產生的執行碼要慢,效能會有一部份取決於直譯器的速度。

而直譯式語言多半以動態語言 (dynamic language) 為主,具有靈活的型別處理 (鬆散型別),不需預先定義型別,彈性也較高,在開發過程中工程師也可以更彈性、快速的測試自己的想法,大大縮短整體開發時間。

常見的直譯式語言有 :

JavaScript、 Python、 Ruby、 PHP

編譯式語言 Compiled Language

原始碼 (source code) 經過編譯器 (compiler) 事先編譯,轉換成目的碼 (object code) 後,再經由連結器 (linker) 轉換成可執行的二進位碼,最後運行。

photo by 六角學院課程

編譯式語言多半會是靜態語言 (static language),它們擁有事先定義的型別,型別檢查 (type check) 與高效能的執行速度等特性。

雖然效能較好,但編譯式語言不像直譯語言一樣,可以寫完一行或一小段程式之後,馬上執行,馬上除錯,所以在程式開發速度、除錯時間上都較長。

常見的編譯式語言有 :

Ada、C語言( C++、Objective-C、D語言 )、C#、Visual Basic

看了這麼多專有名詞,一時還記不起來怎麼辦呢 ? 😅

不如我們先記得一個大重點吧 !

--

--

Ivy Ho
Ivy Ho

Written by Ivy Ho

"You don't have to be great to start, but you have to start to be great."

No responses yet