今天看到 Go1.5 全部采用 Go lang 重新写了。
为什么抛弃 C, 是不是这样更快点?这样做法有什么优势吗?
|  |      1sablib      2015-08-20 17:29:54 +08:00 为了实现自举吧。 | 
|      2wakemecn      2015-08-20 17:43:54 +08:00 我今天第一次下载 go 就用了新版== | 
|  |      3tabris17      2015-08-20 17:45:07 +08:00 为了逼格,向 C 致敬 | 
|  |      4Bown      2015-08-20 17:49:43 +08:00 - It is easier to write correct Go code than to write correct C code. - It is easier to debug incorrect Go code than to debug incorrect C code. - Work on a Go compiler necessarily requires a good understanding of Go. Implementing the compiler in C adds an unnecessary second requirement. - Go makes parallel execution trivial compared to C. - Go has better standard support than C for modularity, for automated rewriting, for unit testing, and for profiling. - Go is much more fun to use than C. https://docs.google.com/document/d/1P3BLR31VA8cvLJLfMibSuTdwTuF7WWLux71CYD0eeD8/edit | 
|  |      5chmlai      2015-08-20 18:03:51 +08:00 自举 | 
|      6vipygd      2015-08-20 19:41:08 +08:00 自举 | 
|  |      7windyboy      2015-08-20 19:48:19 +08:00 我只能说真的强悍 | 
|  |      8yakczh      2015-08-20 19:56:37 +08:00 为啥 perl6 自举失败了 | 
|  |      9oska874      2015-08-20 20:01:20 +08:00 以前不举,现在终于硬了。 | 
|  |      10hooluupog      2015-08-20 20:07:59 +08:00 《 Go in Go 》 https://talks.golang.org/2015/gogo.slide#1 | 
|  |      11loading      2015-08-20 20:15:28 +08:00 via Android go 很早就完成自举了,不是新鲜事! | 
|  |      12songjiaxin2008      2015-08-20 20:16:13 +08:00 先有鸡先有蛋的问题吗 | 
|  |      13lujiajing1126      2015-08-20 20:27:21 +08:00 via Android 实现自举 | 
|  |      14janxin      2015-08-20 20:35:37 +08:00 为了自举。就是信仰 | 
|  |      15echo1937      2015-08-20 20:38:55 +08:00 其实自举的语言太多了, C 干过, C 艹干过, Java 干过, rust 干过, Python 的 Pypy 也干过,不少见。 | 
|  |      17undeflife      2015-08-20 22:00:21 +08:00 @loading 用 Go 重新写 Compiler 才能叫自举(bootstrapping )  你所谓的早就完成是什么意思? | 
|  |      18timothyye      2015-08-20 22:04:06 +08:00 via Android 自举是一种信仰,哈哈 | 
|  |      19realpg PRO 一直觉得自举就是为了那啥而那啥 用汇编写个编译器才是王道…… 你编译这个编译器用的还不是 C 写的编译器 6 | 
|      20phx13ye      2015-08-20 22:39:31 +08:00 bootstrap | 
|      22zwy100e72      2015-08-20 23:09:14 +08:00  4 @realpg 我想您有地方理解不是很恰当。 大部分编译器生成的代码都是机器码,也可以等价的认为是汇编代码 然而汇编语言抽象层次不高,难以直接用汇编语言写出复杂的编译器 编译器不只编译,而且还做语法分析、代码优化等多种工作 用本语言写本语言的编译器是对语言功能的一种检验,也算是一个比较好的例子 第一个 C 语言的编译器当然不是用 C 语言写的,但是用 c 写出一个高性能的编译器在我看来绝对是对 C 语言性能的一个最好证明,也大概是 C 语言能风靡世界的一个重要原因 小弟一家之言,还基本上是重新整合了一下以前看过的几篇文章,您随便看看。。有什么问题咱们一起讨论 | 
|      24hucsmn      2015-08-20 23:51:41 +08:00 自举了以后 Go 开发团队方便干活而已,这只是个开始 | 
|  |      25barbery      2015-08-20 23:52:31 +08:00 好犀利 | 
|  |      26qige023      2015-08-20 23:59:19 +08:00 看了下 @zwy100e72  的回复,我理解下 第一个 go 编译器肯定是 c 写的,当 go 成熟之后,官方写了一个 c -> go 的转换器,将 c 写的 go 编译器代码 全部装换成 go 的代码。整个过程就是 用 c 语言作为一个桥梁,沟通了汇编 和 go | 
|  |      27rock_cloud      2015-08-21 00:06:11 +08:00 @qige023 你这个 C -> Go 的转换器就是一个 C 语言到 Go 语言的编译器啊,哈哈哈~ | 
|      28zwy100e72      2015-08-21 00:12:18 +08:00 @qige023 并不是。 编译器本身就是您说的桥梁,官方在 Go 成熟之后是用 Go 写了一个 Go -> 机器码 的转换器,并用之前的 C 语言 版的编译器将新编译器编译成可执行文件,从而达到 Go 语言可以编译 Go 语言 的目的 另外,您提到的 C -> Go 的转换器可以看成是翻译器,印象当中豆瓣网站就用了这样的工具将 Python 翻译成 C 以获得高性能。 | 
|      29julyclyde      2015-08-21 00:17:07 +08:00 其实就是讲政治 问题是再讲政治,也抹不掉最早的版本被其它编译的黑历史 | 
|  |      30mxalbert1996      2015-08-21 00:22:51 +08:00  1 @qige023  你想创造一门 V 语言而且用 V 语言来写 V 编译器的话,你得按照下面的方法做: 1 、用 C++把那个编译器( A )写出来,顺便留下很多测试用例。 2 、用 V 语言把那个编译器写( B )出来,用 A.exe 来编译 B ,修改直到所有测试用例都通过为止。 3 、 B.exe 来编译 B 自己得到 B2.exe ,修改直到 B2.exe 所有测试用例都通过为止。这是为了保证,就算 B 本身有很多 bug ,至少编译自己是没有 bug 的,从而你就可以走到第四步。 4 、当你觉得有信心了,用 A.exe 把 B 编译一遍,就得到了 B.exe 。然后 A 的代码和 A.exe 都在也不需要存在了,删掉他们。以后你就不断的用 B.exe 来编译下一个版本的 B 就好了。就自举了。 | 
|  |      31zonghua      2015-08-21 00:34:43 +08:00 量子计算机什么时候能够面世?苏联的三进制计算机 blog.renren.com/share/100254538/5981159080 | 
|      32zwy100e72      2015-08-21 00:57:59 +08:00 @mxalbert1996 说的很对,一个小瑕疵: 1. 用 X 语言将 A 写出来,并不局限为 C/C++ ,可以是任意语言 例子:汇编语言的汇编器没问题的话此处 X = 机器语言, Ada 语言的编译器此处 X = 汇编语言 (另外不是所有的可执行文件都需要 .exe 后缀) | 
|  |      33qige023      2015-08-21 01:09:32 +08:00 @mxalbert1996 的例子很好 @zwy100e72 如你所说的话,那就是官方为了实现自举的话,得用 go 实现 go -> 平台特定( x86 、 x64 、 PowerPC 等)的汇编码的过程,然后用平台特定的汇编编译器编译成可执行程序,这样理解正确吗? | 
|      34zwy100e72      2015-08-21 02:15:19 +08:00 @qige023  有一部分编译器借助了这个过程,更多的是直接生成机器码 另外并不存在特定官方的说法,只是如今部分语言有主要推动者,出力比较多 (MS-Visual X / Apple-Swift&ObjC / Google-Go )。。。 如果不满意官方的,完全可以另起炉灶,或者在官方基础上形成分支,或者直接影响官方的版本 | 
|  |      35echo1937      2015-08-21 02:23:05 +08:00 @zwy100e72 自起炉灶要大量的人力和财力去支撑,现在差不多用途的语言都有先来者占着了,除非有大公司撑腰或者社区有极大热情的,否则前景都不会太好。最典型的恐怕就是 dart 和 JS , go 和 rust 了。 perl6 掉进坑里了,真是心酸, python 的 pypy 要是能发展快一点多好啊。 | 
|      37hitmanx      2015-08-21 10:57:41 +08:00 @mxalbert1996 学习了。尤其是里面提到了测试用例 | 
|  |      38tonic      2015-08-21 11:00:46 +08:00 不然养着这个作者做什么呢... | 
|  |      39caoyue      2015-08-21 12:07:17 +08:00 我猜: 一是显示这门语言已经足够成熟强大了给社区信心嘛 二是用自己的语言写编译器当然更方便写起来更爽啊 | 
|  |      40lucifer9      2015-08-21 16:17:20 +08:00 显然是被 rust 黑烦了 现在不用再听 rust 唠叨了 | 
|      41datou552211      2015-08-21 18:49:45 +08:00 via iPhone 然而编译速度慢了好多。编译一个 30m 的东西,新款 13 寸 mac 要 40 秒左右 | 
|  |      42janxin      2015-08-21 20:48:56 +08:00 @datou552211 编译到无所谓,不过现在 STW 改善了好多这个点赞 | 
|  |      43yuekcc      2015-08-22 09:22:50 +08:00 现在 Go 自举了,感觉编译也烦了。首先用 C 编译 1.4 ,然后又用 1.4 编译 1.5 。 是不是往后都这样?那不是要同时维护 1.4 和 新版本的代码库?? (最近被项目的老代码搞烦了,掉前人坑里了) | 
|  |      44huobazi      2015-09-06 12:17:11 +08:00 google 就可以招聘 golang 程序员来写 golang 了 | 
|  |      45huobazi      2015-09-06 12:19:36 +08:00 自己造的变成语言,自己工作中却不能用,这是什么感觉? | 
|  |      46likuku      2015-09-14 14:36:47 +08:00 刚刚在 freebsd 10.1 release 下 用 ports 安装 ports/lang/go ,最新的就是 go-1.5 因为 ports 是自动源代码编译,所以安装 go-1.5 就会依赖 go-1.4 , 整个自动化过程: 先根据依赖自动安装 go-1.4 ,用系统自带的 llvm/clang 编译安装好 go-1.4 , 接着使用 go-1.4 编译安装了 go-1.5 |