Go 语言源码可追溯到 1972 年?
fmms 13年前
<p>Go 语言团队已经在本周三发布了第一个发布候选版 Go 1 RC1(即 Beta4),正式版的发布已经为期不远。地鼠(gopher)们该行动起来啦!</p> <p>周四就有地鼠提问,“<a title="What are those commits from 40-24 years ago in Go source?" href="/misc/goto?guid=4958333121510612003" target="_blank">Go 源码中几十年前的那些修订是什嘛情况哦?</a>”</p> <p>原来,Go 代码库的最初四次修订发生于 1972-1988 年,然后才有了 <a title="Revision: 4e9a5b095532" href="/misc/goto?guid=4958333122319927888" target="_blank">Go 语言规范的初稿</a>。</p> <p>其中,第一次修订 <a title="Revision: f6182e5abf5e" href="/misc/goto?guid=4958333123115179030" target="_blank">Revision <code>f6182e5abf5e</code></a> (1972) 是 Brian Kernighan《<a title="A TUTORIAL INTRODUCTION TO THE LANGUAGE B" href="/misc/goto?guid=4958333123911177707" target="_blank">B 语言入门教程</a>》第七节中的“hello, world!”示例代码:</p> <pre>main( ) { extrn a, b, c; putchar(a); putchar(b); putchar(c); putchar('!*n'); } a 'hell'; b 'o, w'; c 'orld';</pre> <p>第二次修订 <a title="Revision: b66d0bf8da3e" href="/misc/goto?guid=4958333124711485959" target="_blank">Revision <code>b66d0bf8da3e</code></a> (1974) 将程序用 C 语言重写了一遍,当年 Unix 内核的主要部分已经采用 C 重新编写:</p> <pre>main() { printf("hello, world"); }</pre> <p>第三次修订 <a title="Revision: ac3363d7e788" href="/misc/goto?guid=4958333125506420068" target="_blank">Revision <code>ac3363d7e788</code></a> (1988) 按 <a href="/misc/goto?guid=4958333126303612813" target="_blank">ANSI C</a> 草案的标准加上了 <code>#include</code> 语句,并补上了漏掉的换行符:</p> <pre><span style="background-color:#66cc99;">#include <stdio.h></span> main() { printf("hello, world<span style="background-color:#66cc99;">\n</span>"); }</pre> <p>第四次修订 <a title="Revision: 172d32922e72" href="/misc/goto?guid=4958333127097494559" target="_blank">Revision <code>172d32922e72</code></a> (1988) 则给程序加上了输入<a title="函数原型" href="/misc/goto?guid=4958333128132402248" target="_blank">原型</a>与返回值:</p> <pre>#include <stdio.h><span style="background-color:#66cc99;">int</span> main(<span style="background-color:#66cc99;">void</span>) { printf("hello, world\n"); <span style="background-color:#66cc99;">return 0;</span> }</pre> <p>(次年,标准 C89(ANSI X3.159-1989)诞生。)</p> <p>这四次修订重现了编程语言由 B 到标准化的 C 的发展史,也显示了项目组的宏伟抱负。当然,Go 团队本身也是大有来头,其中就包括 B 语言与 Unix 作者 <a title="Kenneth Thompson" href="/misc/goto?guid=4958333128946652819" target="_blank">Kenneth Thompson</a> 和 <a href="/misc/goto?guid=4958333129736778611" target="_blank">Plan 9</a> 架构师 <a title="Rob Pike" href="/misc/goto?guid=4958333130548802048" target="_blank">Rob Pike</a>,他俩都曾在贝尔实验室工作,并共同完成了 <a href="/misc/goto?guid=4958333131356555939" target="_blank">UTF-8 编码</a>的创立。(via <a title="Google hopes to remake programming with Go" href="/misc/goto?guid=4958333132153335339" target="_blank">cnet</a>)在 Go 语言中,Ken Thompson 还<a title="'spell it with an " e"'"="" href="/misc/goto?guid=4958333132960480327" target="_blank">弥补</a>了没能在 Unix 中“拼全‘creat<strong>e</strong>’”的<a title="“I'd spell creat with an e.”" href="/misc/goto?guid=4958333133771105825" target="_blank">遗憾</a>。(via <a title="My favorite joke of is this." href="/misc/goto?guid=4958333134571421633" target="_blank">mattn</a>)</p> <p>Go 公布初期就提供了 <code>cgo</code> 命令以及 gcc 前端 <code>gccgo</code>,可以说 Go 本身就是对历代成果 fork 而来的项目。</p> <p>敬请期待 Go 的正式发布!</p>