Google抛弃C语言,采用Go语言重写Go编译器

polaris · · 4598 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

### 目前的Go编译器 ### 目前Go编译器gc基于C语言,是从Plan 9的C编译器衍生出来的,其中保持了原有的汇编程序、C编译器和链接器,而部分针对Go的编译器(gc/6g/8g/5g)使用C语言进行了重写。 ### 为何要采用Go语言实现 ### Russ Cox指出,采用Go语言来实现编译器相比C语言的优势在于: - 编写正确的Go代码要比编写正确的C代码容易 - 调试不正确的Go代码要比调试不正确的C代码容易 - Go编译器必然需要对Go有个很好的了解,而使用C语言实现则增加了一个不必要的二次需求 - 与C相比,Go语言对并行程序执行得更好 - 对于模块化、自动重写、单元测试以及分析,Go比C有更好的标准支持 - 使用Go比使用C更加有趣 ### 计划 ### Russ Cox表示,将编译器从C实现转变为Go实现的过程,主要是通过自动翻译程序来进行。这一过程将分阶段进行: - 第1阶段:开发和调试翻译程序。 - 第2阶段:使用翻译程序将编译器从C转换成Go,并删除部分C语言副本。该阶段可能会在Go 1.3版本中实现,可能仍会需要一些C代码。 - 第3阶段:使用一些工具将编译器分割成包,并清理部分代码、添加文档、添加集成测试等。这个阶段将在Go 1.4中实现,会将编译器彻底转换成为一个Go程序。 - 第4阶段:通过标准的分析和测量技术对编译器的内存和CPU占用率进行优化,可能会引入并行处理。该阶段将在Go 1.4中实现,部分特性可能会在Go 1.5中实现。 - 第5阶段:使用最新版本的Go解析器和类型替换编译器前端。 ### 舍弃的方案 ### 对于为何不从头编写一个新的编译器,Russ Cox表示,从头编写是一个愚蠢的行为,这意味着要抛弃之前很多人很多年以来的工作成果。 Go语言开发团队还尝试了手动将C代码翻译为Go代码,但是在翻译了几个小型的C/C++程序之后,他们发现这种方式比较繁琐,且容易出错,而且错误都非常隐蔽,不易发现。因此,他们决定首先开发出一个自动编译器,通过这种方式,出现的错误将会是一致的,容易查找。 原文:[Go 1.3+ Compiler Overhaul](https://docs.google.com/document/d/1P3BLR31VA8cvLJLfMibSuTdwTuF7WWLux71CYD0eeD8)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4598 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传