Go語言是怎麼完成編譯的

2020-07-16 10:05:18
Go語言是一門需要編譯才能執行的程式語言,也就說程式碼在執行之前需要通過編譯器生成二進位制機器碼,隨後二進位制檔案才能在目標機器上執行,如果我們想要了解Go語言的實現原理,理解它的編譯過程就是一個沒有辦法繞過的事情。

預備知識

想要深入了解Go語言的編譯過程,需要提前了解一下編譯過程中涉及的一些術語和專業知識。這些知識其實在我們的日常工作和學習中比較難用到,但是對於理解編譯的過程和原理還是非常重要的。

1) 抽象語法樹

在電腦科學中,抽象語法樹(Abstract Syntax Tree,AST),或簡稱語法樹(Syntax tree),是原始碼語法結構的一種抽象表示。它以樹狀的形式表現程式語言的語法結構,樹上的每個節點都表示原始碼中的一種結構。

之所以說語法是“抽象”的,是因為這裡的語法並不會表示出真實語法中出現的每個細節。比如,巢狀括號被隱含在樹的結構中,並沒有以節點的形式呈現。而類似於 if else 這樣的條件判斷語句,可以使用帶有兩個分支的節點來表示。

以算術表示式 1+3*(4-1)+2 為例,可以解析出的抽象語法樹如下圖所示:

抽象語法樹
圖:抽象語法樹