Go的修订历史背后的故事是什么?

时间:2014-02-24 05:37:29

标签: go mercurial

我注意到Go源的前4个版本f6182e5abf5eb66d0bf8da3eac3363d7e788172d32922e72都是在Golang被提议之前很久就已经提出的,{{3 }}。他们也都归功于AWK成名的Brian Kernighan。他们似乎是在C. hello, world实施。这是复活节彩蛋还是有一些实际目的?

1 个答案:

答案 0 :(得分:18)

thread提及:

  

敬意,复活节彩蛋,里面的笑话,请你选择:)。请注意有关提交的作者

所述线程引用this commit作为起点,但也指出了actual first commit的Golang项目的first revision of the Go spec

第四次提交的(被指控的)“作者”是Brian Kernighan Rob Pike在1980年的Bell Labs与Brian合作过,所以这可以看作是对他职业起源的一种参考。

这个复活节彩蛋的想法是用C:

来说明Hello World程序的演变

(请参阅最近的GopherCon 2014年4月的演讲hellogophers.slide - Rob Pike


你好,世界

hg log -r 0:4
changeset:   0:f6182e5abf5e
user:        Brian Kernighan <bwk>
date:        Tue Jul 18 19:05:45 1972 -0500
summary:     hello, world

$ hg update -r 0
$ cat src/pkg/debug/macho/testdata/hello.b

main( ) {
    extrn a, b, c;
    putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';

转换为C

changeset:   1:b66d0bf8da3e
user:        Brian Kernighan <bwk>
date:        Sun Jan 20 01:02:03 1974 -0400
summary:     convert to C

$ hg update -r 1
$ cat src/pkg/debug/macho/testdata/hello.c

main() {
    printf("hello, world");
}

转换为草案提议的ANSI C

changeset:   2:ac3363d7e788
user:        Brian Kernighan <research!bwk>
date:        Fri Apr 01 02:02:04 1988 -0500
summary:     convert to Draft-Proposed ANSI C

$ hg update -r 2
$ cat src/pkg/debug/macho/testdata/hello.c

#include <stdio.h>

main()
{
    printf("hello, world\n");
}

最后修复:转换为ANSI C

changeset:   3:172d32922e72
user:        Brian Kernighan <bwk@research.att.com>
date:        Fri Apr 01 02:03:04 1988 -0500
summary:     last-minute fix: convert to ANSI C

$ hg update -r 3
cat src/pkg/debug/macho/testdata/hello.c


#include <stdio.h>

int
main(void)
{
    printf("hello, world\n");
    return 0;
}

去规范起点

changeset:   4:4e9a5b095532
user:        Robert Griesemer <gri@golang.org>
date:        Sun Mar 02 20:47:34 2008 -0800
summary:     Go spec starting point.