mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 02:35:53 +08:00
@@ -20,7 +20,7 @@ Go 语言开发团队开发了适用于以下操作系统的编译器:
|
||||
|
||||
主要基于 Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。
|
||||
|
||||
Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。
|
||||
Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。( **译者注:Go从1.5版本开始已经实现自举。Go语言的编译器和链接器都是Go语言编写的**)
|
||||
|
||||
这款编译器使用非分代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo 更快,产生更好的本地代码,但编译后的程序不能够使用 gcc 进行链接。
|
||||
|
||||
@@ -40,7 +40,7 @@ Go 语言开发团队开发了适用于以下操作系统的编译器:
|
||||
**标记(Flags)** 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结果。
|
||||
|
||||
可用的编译器标记如下:
|
||||
|
||||
|
||||
flags:
|
||||
-I 针对包的目录搜索
|
||||
-d 打印声明信息
|
||||
@@ -55,13 +55,13 @@ Go 语言开发团队开发了适用于以下操作系统的编译器:
|
||||
-x 打印 lex tokens
|
||||
|
||||
从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 `go build` 和 `go install` 等命令,而这些指令会自动调用相关的编译器或链接器。
|
||||
|
||||
|
||||
如果你想获得更深层次的信息,你可以在目录 [`$GOROOT/src/cmd`](https://github.com/golang/go/tree/master/src/cmd) 下找到编译器和链接器的源代码。Go 语言本身是由 C 语言开发的,而不是 Go 语言(Go 1.5 开始自举)。词法分析程序是 GNU bison,语法分析程序是名为 [`$GOROOT/src/cmd/gc/go.y`](https://github.com/golang/go/blob/master/src%2Fcmd%2Finternal%2Fgc%2Fgo.y) 的 yacc 文件,它会在同一目录输出 `y.tab.{c,h}` 文件。如果你想知道更多有关构建过程的信息,你可以在 [`$GOROOT/src/make.bash`](https://github.com/golang/go/blob/master/src/make.bash) 中找到。
|
||||
|
||||
大部分的目录都包含了名为 `doc.go` 的文件,这个文件提供了更多详细的信息。
|
||||
|
||||
2. gccgo 编译器:
|
||||
|
||||
|
||||
一款相对于 gc 而言更加传统的编译器,使用 GCC 作为后端。GCC 是一款非常流行的 GNU 编译器,它能够构建基于众多处理器架构的应用程序。编译速度相对 gc 较慢,但产生的本地代码运行要稍微快一点。它同时也提供一些与 C 语言之间的互操作性。
|
||||
|
||||
从 Go 1 版本开始,gc 和 gccgo 在编译方面都有等价的功能。
|
||||
@@ -80,4 +80,4 @@ Go 语言开发团队开发了适用于以下操作系统的编译器:
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一章:[语言的主要特性与发展的环境和影响因素](01.2.md)
|
||||
- 下一节:[Go 环境变量](02.2.md)
|
||||
- 下一节:[Go 环境变量](02.2.md)
|
||||
|
Reference in New Issue
Block a user