diff --git a/eBook/02.1.md b/eBook/02.1.md index ced5967..0d8e32e 100644 --- a/eBook/02.1.md +++ b/eBook/02.1.md @@ -13,3 +13,63 @@ - [Golang中国](http://golang.tc) #2.1 平台与架构 +( ***译者注:由于 Go 语言版本更替,本节中的相关内容经原作者同意将被直接替换而不作另外说明*** ) + +Go 语言开发团队开发了适用于以下操作系统的编译器: + +- Linux +- FreeBSD +- Mac OS X(或者 Darwin) + +这里有2个版本的编译:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中。这两个编译器都是以单通道的形式工作。 + +你可以获取以下平台上的 Go 1.1 源码和二进制文件: + +- FreeBSD 7+:amd64 和 386 架构 +- Linux 2.6+:amd64、386 和 arm 架构 +- Mac OS X(Snow Leopard + Lion):amd64 和 386 架构 +- Windows 2000+:amd64 和 386 架构 + +对于非常底层的纯 Go 语言代码或者包而言,在各个操作系统平台上的可移植性是非常强的,只需要将源码拷贝到相应平台上进行编译即可,或者可以使用交叉编译来构建目标平台的应用程序(第2.2节)。但如果你打算只用 cgo 或者类似文件监控系统的软件,就需要根据实际情况进行相应地修改了。 + +1. Go 原生编译器 gc: + + 主要基于 Ken Thompson 先前在 Plan 9 操作系统上使用 C 工具链。 + + Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。 + + 这款编译器使用不同代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo 更快,产生更好的本地代码,但编译后的程序不能够使用 gcc 进行链接。 + + 编译器目前支持以下基于 Intel 或 AMD 处理器架构的程序构建。 + + ![](images/2.1.gc.jpg?raw=true) + + 图2.1 gc 编译器支持的处理器架构 + + 当你第一次看到这套命名系统的时候你会觉得很奇葩,不过这些命名都是来自于 Plan 9 项目。 + + g = 编译器:将源代码编译为项目代码(程序文本) + l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) + + (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) + + **标记(Flags)**是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结果。 + + 可用的编译器标记如下: + + flags: + -I DIR search for packages in DIR + -d print declarations + -e no limit on number of errors printed + -f print stack frame structure + -h panic on an error + -o file specify output file // see § 3.4 + -S print the generated assembly code + -V print the compiler version // see § 2.3 (7) + -u disable package unsafe + -w print the parse tree after typing + -x print lex tokens + + 在 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 `go build` 和 `go install` 等命令,而这些指令会自动调用相关的编译器或链接器。 + +2. 的 \ No newline at end of file diff --git a/eBook/images/2.1.gc.jpg b/eBook/images/2.1.gc.jpg new file mode 100644 index 0000000..11a64ea Binary files /dev/null and b/eBook/images/2.1.gc.jpg differ