通过 cloc 工具先统计一下go的源码
/root/.gvm/gos/go1.13.5/src/
150万行go代码
中间代码 #
生成汇编代码
go build -gcflags -S main.go
获得ssa,可以看到汇编语言的优化过程
GOSSAFUNC=main go build main.go
词法语法分析#
这一节介绍了 Go 语言的词法分析和语法分析过程,我们不仅从理论的层面介绍了词法和语法分析的原理,
还从源代码出发详细分析 Go 语言的编译器是如何在底层实现词法和语法解析功能的。
了解 Go 语言的词法分析器 cmd/compile/internal/syntax.scanner
和语法分析器 cmd/compile/internal/syntax.parser
让我们对解析器处理源代码的过程有着比较清楚的认识,同时我们也在 Go 语言的文法和语法分析器中找到了熟悉的关键字和语法结构,加深了对 Go 语言的理解。
类型检查#
类型检查是 Go 语言编译的第二个阶段,在词法和语法分析之后我们得到了每个文件对应的抽象语法树,随后的类型检查会遍历抽象语法树中的节点,
对每个节点的类型进行检验,找出其中存在的语法错误,在这个过程中也可能会对抽象语法树进行改写,这不仅能够去除一些不会被执行的代码、
对代码进行优化以提高执行效率,而且也会修改 make
、new
等关键字对应节点的操作类型。
make
和 new
这些内置函数其实并不会直接对应某些函数的实现,它们会在编译期间被转换成真正存在的其他函数。
TODO#