GO 语言编译过程

记录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汇编器的输入类型射击的。

总结

参考资料

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容