阅读更多

10顶
3踩

编程语言
Go语言是Google开发的新型编程语言,将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。目前该语言已经发布了1.2正式版本。

Go语言开发者Russ Cox近日透露,在Go 1.3版本之后,该语言的编译器将会使用Go语言重写。



目前的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
  • 大小: 11.4 KB
10
3
评论 共 20 条 请登录后发表评论
20 楼 Glavo 2016-08-02 08:47
Glavo 写道
lonelybug 写道
ad6543210 写道
lonelybug 写道
好TMD拧巴的google Go语言。

我很想知道,假设你用Go 1.0作为编译器语言编译之后的Go代码,那么我想问问你升级Go语言到V2.0的时候,你编译器语言要不要升级到V2.0?那请问,你如何用V1.0来编译出2.0的功能?

我很好奇,因为,这个是先有鸡和先有蛋的问题。

用 go 1.0 生出 go 2.0 的編譯器很奇怪嗎
語言的擴充不就是這樣來的..


你应该不知道什么叫做编译器吧。

你不知道什么是编译器吧?那你觉得c都是怎么写的?汇编?

我觉得这人真的不懂什么叫自举
19 楼 Glavo 2016-08-02 08:47
lonelybug 写道
ad6543210 写道
lonelybug 写道
好TMD拧巴的google Go语言。

我很想知道,假设你用Go 1.0作为编译器语言编译之后的Go代码,那么我想问问你升级Go语言到V2.0的时候,你编译器语言要不要升级到V2.0?那请问,你如何用V1.0来编译出2.0的功能?

我很好奇,因为,这个是先有鸡和先有蛋的问题。

用 go 1.0 生出 go 2.0 的編譯器很奇怪嗎
語言的擴充不就是這樣來的..


你应该不知道什么叫做编译器吧。

你不知道什么是编译器吧?那你觉得c都是怎么写的?汇编?
18 楼 zhangpurple 2014-07-07 22:10
自娱自乐,没意思,自己扇自己耳朵。
17 楼 lonelybug 2014-01-04 10:15
ad6543210 写道
lonelybug 写道
好TMD拧巴的google Go语言。

我很想知道,假设你用Go 1.0作为编译器语言编译之后的Go代码,那么我想问问你升级Go语言到V2.0的时候,你编译器语言要不要升级到V2.0?那请问,你如何用V1.0来编译出2.0的功能?

我很好奇,因为,这个是先有鸡和先有蛋的问题。

用 go 1.0 生出 go 2.0 的編譯器很奇怪嗎
語言的擴充不就是這樣來的..


你应该不知道什么叫做编译器吧。
16 楼 ad6543210 2013-12-30 08:41
lonelybug 写道
好TMD拧巴的google Go语言。

我很想知道,假设你用Go 1.0作为编译器语言编译之后的Go代码,那么我想问问你升级Go语言到V2.0的时候,你编译器语言要不要升级到V2.0?那请问,你如何用V1.0来编译出2.0的功能?

我很好奇,因为,这个是先有鸡和先有蛋的问题。

用 go 1.0 生出 go 2.0 的編譯器很奇怪嗎
語言的擴充不就是這樣來的..
15 楼 lonelybug 2013-12-26 22:50
好TMD拧巴的google Go语言。

我很想知道,假设你用Go 1.0作为编译器语言编译之后的Go代码,那么我想问问你升级Go语言到V2.0的时候,你编译器语言要不要升级到V2.0?那请问,你如何用V1.0来编译出2.0的功能?

我很好奇,因为,这个是先有鸡和先有蛋的问题。
14 楼 dsjt 2013-12-26 15:22
go go go
欧蕾欧蕾欧蕾
13 楼 zhongmin2012 2013-12-26 12:31
go语言开发过什么应用?
12 楼 yao_guai 2013-12-25 16:57
11 楼 wzjin 2013-12-24 14:06
长期看好。
10 楼 屁屁虫 2013-12-24 14:01
diggywang 写道
名词解释:递归
答:go compiler moves to go.

Bootstrap
9 楼 屁屁虫 2013-12-24 13:59
wow 完成自举了
8 楼 hlcfan 2013-12-24 11:38
都行啦,看情况
7 楼 david_je 2013-12-24 10:06
Go语言确实很实用
6 楼 weng 2013-12-24 09:00
zjjxxl 写道
这个编译器代码开发好后还得编译吧,编译编译器的编译器还是C写的?

只需要一次
5 楼 zjjxxl 2013-12-24 08:53
这个编译器代码开发好后还得编译吧,编译编译器的编译器还是C写的?
4 楼 fair_jm 2013-12-23 22:51
diggywang 写道
名词解释:递归
答:go compiler moves to go.

所谓的元循环吧...
3 楼 cosmo1987 2013-12-23 22:11
引用
对于为何不从头编写一个新的编译器,Russ Cox表示,从头编写是一个愚蠢的行为,这意味着要抛弃之前很多人很多年以来的工作成果。

Go语言开发团队还尝试了手动将C代码翻译为Go代码,但是在翻译了几个小型的C/C++程序之后,他们发现这种方式比较繁琐,且容易出错,而且错误都非常隐蔽,不易发现。因此,他们决定首先开发出一个自动编译器,通过这种方式,出现的错误将会是一致的,容易查找。

这是一个很好的想法。 自动的永远比人为编写的易控制。因为出错将会是一致的。
2 楼 diggywang 2013-12-23 21:33
名词解释:递归
答:go compiler moves to go.
1 楼 网哟游啊 2013-12-23 20:56
用go的场景还不多啊

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

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

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

  • 2023 最新爆肝 5 万字超详细讲解 Go 语言基础语法知识点详细教程(基础篇)

    Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。Go...

  • 为什么除了Go语言, 其他类C语言都是垃圾[翻译][转]

    这是关于 Robert Griesemer,Rob Pike 和 Ken Thompson 在 Google 从 2007 年开发的 Go 语言的综述。现在,Ian Taylor,Russ Cox 和 Andrew Gerrand 已经加入了核心团队。这是一个类 C 语言,有一些动态脚本语言的...

  • Go语言的遗产

    本文是gohugo作者Steve Francia在意大利佛罗伦萨举办的GoLab上分享的闭幕演讲讲稿的文字版,该演讲的主题为"Go的遗产"。该演讲讨论了Go语言继承的遗产...

  • go语言

    go语言,是用在服务端的。 知乎大部分项目是 Python 写的,有几个小项目是用 Go 写的。我从一个 Python 为主的开发者的角度说说对 Go 的优点的体会吧: 部署简单。Go 编译生成的是一个静态可执行文件,除了 ...

  • 漫画 | 给乔布斯提供肩膀的巨人

    Dennis 开始对B语言进行改造 很快, Ken 和Dennis 用C语言重写了Unix 。 重写过的Unix表现出了惊人的可移植性,一个新的时代来临了! 软件和硬件解绑, Unix和C语言伴随着小型机,工作站,PC等设备迅速向全世界传播...

  • GO是更好的编程语言吗?

    团队有项目考虑用GO重写,所以花了些时间调研GO。 第一次接触GO是2年前,17年3月份,全职钻研一周,彼时C++中毒太深,内心排斥其他编程语言,看其他语法总觉得有点怪,而且有“C/C++能做任何事,故无用其他语言之...

  • Golang基础

    go基础

  • C++没落了?学习C++没有前途了?从业者给你揭晓答案

    因为源代码经过编译器的处理生成的汇编代码在实现上可能不是最优的,这要依赖于通用的编译器,而我们人为添加的汇编代码,编译器不会做任何修改,所以我们可以直接在汇编代码中直接去控制操作,保证汇编代码是最优的...

  • Golang 教程

    Go语言是一门强类型的通用编程语言。它的基础语法与C语言很类似,但对于变量的声明有所不同,也对其他的一些优秀编程语言有所借鉴。另外,Go语言支持垃圾回收。 与C++相比,Go语言并不包括如异常处理、继承、泛型...

  • golang大厂面试2

    golang大厂面试 滴滴 写个二分查找 以下是一个简单的二分查找算法的 Go 语言实现: package main import "fmt" // 二分查找函数 func binarySearch(arr []int, target int) int { left, right := 0, len(arr)-1 for ...

  • QT5基础教程(介绍,下载,安装,第一个QT程序)

    基于Go语言的有 walk 和 electron; 还有国内初露头角的 aardio; Visual Basic 曾经很流行,现在逐渐失去了色彩; 如果你有 Web 开发经验,也可以基于 Webkit 或 Chromium 将网页转换为桌面程序。 没有哪一种方案...

  • 编程新手导论

     我们要编程(如果说第一部分是要懂得的原理,那么这里就谈实践细节,当然要求精通),当然首先用一门语言,我打算举C++和JAVA作为例子,因此语言 和语言库这一部分重点是说到了这二大编程语言,我现在的想法是再...

  • language part

    C++这门语言是一个追求底层的语言, 老实说我为什么选择C++就是因为它够底层, 让我能知道底层大致在干什么。但是在学习的过程很明显存在不具体的问题, 而且C++语言的语法非常多,理解cpp的底层基础上, 结合代码...

  • 编程新手导论(转载)

     我们要编程(如果说第一部分是要懂得的原理,那么这里就谈实践细节,当然要求精通),当然首先用一门语言,我打算举C++和JAVA作为例子,因此语言 和语言库这一部分重点是说到了这二大编程语言,我现在的想法是再...

  • 在大型项目上,Python 是个烂语言吗

    Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the Head TA for a class taught in Java at MIT. I used… Robert has 10+ answers in Google Engineering. ...

  • 基于springboot大学生就业信息管理系统源码数据库文档.zip

    基于springboot大学生就业信息管理系统源码数据库文档.zip

  • 基于java的驾校收支管理可视化平台的开题报告.docx

    基于java的驾校收支管理可视化平台的开题报告

  • 原木5秒数据20241120.7z

    时间序列 原木 间隔5秒钟 20241120

Global site tag (gtag.js) - Google Analytics