在【JavaScript 核心篇】課程第一個章節「執行環境、作用域」中,首先拉開序幕的主題為直譯式語言與編譯式語言。
而一開始課程就帶領我們思考一個問題,
「JavaScript的程式碼在電腦上是如何運行的呢?」
由於我們所撰寫的程式語言無法直接被瀏覽器、電腦給閱讀,所以在運行前會經過解譯。
而程式語言依解譯方式不同,會分為直譯式語言及編譯式語言。
直譯式語言 Interpreted Language
原始碼(source code)透過直譯器(Interpreter)即可轉換成可執行碼,並直接運行。程式碼的錯誤會直接反映在環境中。
直譯器轉換過程 (以變數為例)
- 將語法基本單元化 :
變數還未被定義、賦予值,只是先將結構中的關鍵字一一取出來。 - 轉為抽象結構樹 :
轉為像是JSON的資料格式,將整個結構樹定義出來,需特別注意,程式碼在此階段還未真正運行。 - 代碼生成 :
會因執行環境不同 (例如使用瀏覽器,或使用Node.js),生成的代碼也會有點不同,在代碼生成之後才會真正運行。
由於直譯式語言的原始碼不會經由編譯器 (compiler)事先編譯 ,而是在執行時才會將原始碼直譯成執行碼,所以速度上會比編譯與連結器產生的執行碼要慢,效能會有一部份取決於直譯器的速度。
而直譯式語言多半以動態語言 (dynamic language) 為主,具有靈活的型別處理 (鬆散型別),不需預先定義型別,彈性也較高,在開發過程中工程師也可以更彈性、快速的測試自己的想法,大大縮短整體開發時間。
常見的直譯式語言有 :
JavaScript、 Python、 Ruby、 PHP
編譯式語言 Compiled Language
原始碼 (source code) 經過編譯器 (compiler) 事先編譯,轉換成目的碼 (object code) 後,再經由連結器 (linker) 轉換成可執行的二進位碼,最後運行。
編譯式語言多半會是靜態語言 (static language),它們擁有事先定義的型別,型別檢查 (type check) 與高效能的執行速度等特性。
雖然效能較好,但編譯式語言不像直譯語言一樣,可以寫完一行或一小段程式之後,馬上執行,馬上除錯,所以在程式開發速度、除錯時間上都較長。
常見的編譯式語言有 :
Ada、C語言( C++、Objective-C、D語言 )、C#、Visual Basic
看了這麼多專有名詞,一時還記不起來怎麼辦呢 ? 😅
不如我們先記得一個大重點吧 !
參考資料來源: