【问题标题】:Is Google's Golang an interpreter or compiler?Google 的 Golang 是解释器还是编译器?
【发布时间】:2012-08-28 06:42:44
【问题描述】:

我一直在研究 Golang,发现它有一个编译器。 但它是将 Go 编译成汇编级代码还是只是将其转换为 BYTECODES 然后调用该编译?我的意思是,即使在 PHP 中,我们也能够将其转换为 BYTECODES 并具有更快的性能。 Golang 是系统级编程和编译的替代品吗?

【问题讨论】:

    标签: system gcc go


    【解决方案1】:

    这确实是一个编译器(实际上它嵌入了 2 个编译器),它可以生成完全自给自足的可执行文件。您不需要任何补充库或任何类型的运行时来在您的服务器上执行它。您只需为您的目标计算机架构编译它。

    来自the documentation

    有两个官方的 Go 编译器工具链。本文件重点 在 gc Go 编译器和工具(6g、8g 等)上。有关如何 在 gccgo 上工作,这是一个使用 GCC 后端的更传统的编译器, 请参阅设置和使用 gccgo。

    Go 编译器支持三种指令集。有重要的 不同的编译器的质量差异 架构。

    amd64(又名 x86-64); 6g,6l,6c,6a 成熟的实现。这 编译器有一个有效的优化器(注册器)并生成良好的 代码(虽然 gccgo 有时可以做得更好)。

    386(又名 x86 或 x86-32); 8g,8l,8c,8a 堪比amd64端口。

    arm(又名 ARM); 5g,5l,5c,5a 仅支持 Linux 二进制文件。使用范围不如 其他端口,因此没有经过彻底测试。

    除了 诸如低级操作系统接口代码、运行时之类的东西 所有端口的支持都是相同的,并且包括标记和清除垃圾 收集器,高效的数组和字符串切片,并支持 高效的 goroutine,例如按需增长和收缩的堆栈。

    编译器可以针对 FreeBSD、Linux、NetBSD、OpenBSD、OS X (达尔文)和 Windows 操作系统。全套支持 组合在环境变量的讨论中列出 下面。

    在服务器上,您通常会以amd64 平台为目标。

    请注意,Go 以编译速度着称。在部署我的服务器程序时,我不会在开发计算机上为不同的平台构建:我部署源代码并直接在生产服务器上编译。自 Go1 以来,我从来没有在一个平台上编译过代码,而在其他平台上也没有编译过。

    在 Windows 上,我可以毫无问题地在我的开发计算机上创建 exe,然后简单地将 exe 发送给从未安装过任何与 Go 相关的任何东西的人。

    【讨论】:

    • 所以它没有将其转换为字节码并实际编译。
    • 是的。它的编译与编译任何 C 程序的意义完全相同。一切都是静态链接的。
    • @Skaperen @nos 您可以将 -S 传递给编译器以查看汇编代码。 go build -gcflags -S 将运行编译器,将 -S 传递给输出程序集。您也可以直接调用编译器,例如go tool 8g -S <source.go>
    • 为什么golang有runtime来做垃圾回收等等,runtime是如何管理编译好的exe的?
    • @ProgramCpp 'runtime' 嵌入在 exe 中。
    【解决方案2】:

    Go 可以快速编译为机器码,同时具有垃圾收集的便利性和运行时反射的强大功能。它是一种快速、静态类型的编译语言,感觉就像是一种动态类型的解释语言。

    来源 - golang.org

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 2020-10-27
      • 1970-01-01
      • 2011-08-05
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多