【发布时间】:2011-07-01 04:21:54
【问题描述】:
当前的官方 Go 编译器 (http://code.google.com/p/go/) 目前使用手工制作的、可以说是晦涩难懂的代码生成器,其中包括将自定义部分注入 ELF 二进制文件。
这种方法产生了很多与直接读取和/或写入 ELF 信息的实用程序相关的错误,例如 ldd、objdump 或 strip。
我相信这可以通过使用经过良好测试的跨平台代码生成器(例如 LLVM)来避免,然后只需使用操作系统附带的链接工具,例如 Unix/Linux 上的 ld(或 Windows 上的 ld.exe w/ MinGW),或 link.exe 在 Windows 上使用 Visual Studio。
那么,为什么 Go 使用自己的代码生成器呢?真的只是重新发明轮子吗?还是背后有更重要的原因?
【问题讨论】:
-
你必须问那个项目的人他们为什么做出这个选择。
-
完全控制他们的工作。
-
@dmckee:或者你可以阅读他们对这个问题的回答。
-
编译速度是主要设计点之一。所以他们不能依赖庞大且非常慢的 LLVM 或 GCC 后端。但后来他们制作了使用它们的 GO 编译器版本。
标签: code-generation go elf