GO 语言编译过程

2022-02-15  本文已影响0人  wuqke

记录go是如何编译的

如何编译及运行修改后的源代码

1.下载GO源码
2.进入到go源码的go/src文件夹
3.运行./make.bash
4.设置GOROOT环境变量,指向上面源码的文件夹路径。(为了不影响其他生产项目,建议使用IDE,设置目录自己的GOROOT路径)


GoLand设置GOROOT
运行效果

如何查看编译器编译器把代码源代码变异成汇编语言的过程?

1.命令go build -gcflags -S panictest.go 可以将源代码编译称汇编代码。

  1. 命令GOSSAFUNC=main go build panictest.go 会在目录下生成ssa.html文件。打开可以看看汇编代码优化的每一个步骤。
    汇编代码优化

编译过程

编译核心过程

1.词法分析(编译器前端)
2.语法分析(编译器前端)
3.类型检查(编译器前端)
4.中间代码生成,即SSA(编译器前端)
5.代码优化(编译器前端)
6.机器码生成及优化(编译器后端,在src/cmd/compile/internal 目录中有不同CPU指令集的编译代码)

Go语言的分析器使用LALR(1)的文法来解析词法分析过程输出的Token序列,最有推导加向前查看构成了Go语言分析器的基本原理。
在类型检查期间,编译器会同时将一些节点类型替换成真正的执行函数,如make关键字对应的OMAKE节点,会根据具体的类型换成特定的函数,如OMAKESLICE、OMAKEMAP、OMAKECHAN等。
SSA:staic single assignment,中间代码的生成即是从AST(abstract syntax tree,即抽象语法树)到SSA的转化过程
Go中将汇编语言翻译成机器语言的汇编器是基于Plan 9汇编器的输入类型射击的。

总结

参考资料

上一篇 下一篇

猜你喜欢

热点阅读