GO 語言編譯過程

記錄go是如何編譯的

如何編譯及運行修改后的源代碼

1.下載GO源碼
2.進入到go源碼的go/src文件夾
3.運行./make.bash
4.設置GOROOT環(huán)境變量,指向上面源碼的文件夾路徑。(為了不影響其他生產(chǎn)項目,建議使用IDE,設置目錄自己的GOROOT路徑)


GoLand設置GOROOT

運行效果

如何查看編譯器編譯器把代碼源代碼變異成匯編語言的過程?

1.命令go build -gcflags -S panictest.go 可以將源代碼編譯稱匯編代碼。

  1. 命令GOSSAFUNC=main go build panictest.go 會在目錄下生成ssa.html文件。打開可以看看匯編代碼優(yōu)化的每一個步驟。
    匯編代碼優(yōu)化

編譯過程

編譯核心過程

1.詞法分析(編譯器前端)
2.語法分析(編譯器前端)
3.類型檢查(編譯器前端)
4.中間代碼生成,即SSA(編譯器前端)
5.代碼優(yōu)化(編譯器前端)
6.機器碼生成及優(yōu)化(編譯器后端,在src/cmd/compile/internal 目錄中有不同CPU指令集的編譯代碼)

Go語言的分析器使用LALR(1)的文法來解析詞法分析過程輸出的Token序列,最有推導加向前查看構成了Go語言分析器的基本原理。
在類型檢查期間,編譯器會同時將一些節(jié)點類型替換成真正的執(zhí)行函數(shù),如make關鍵字對應的OMAKE節(jié)點,會根據(jù)具體的類型換成特定的函數(shù),如OMAKESLICE、OMAKEMAP、OMAKECHAN等。
SSA:staic single assignment,中間代碼的生成即是從AST(abstract syntax tree,即抽象語法樹)到SSA的轉化過程
Go中將匯編語言翻譯成機器語言的匯編器是基于Plan 9匯編器的輸入類型射擊的。

總結

參考資料

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容