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