Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the story behind the revision history of Go?

Tags:

go

mercurial

I noticed that the first 4 revisions f6182e5abf5e, b66d0bf8da3e, ac3363d7e788, 172d32922e72 of the Go source are all from long before Golang was even proposed, the oldest being from 1972. They are also all credited to Brian Kernighan of AWK-ward fame. They seem to be hello, world implementations in C. Is this an easter-egg or is there some practical purpose?

like image 476
Floegipoky Avatar asked Feb 24 '14 05:02

Floegipoky


People also ask

Why was go created?

The creation of Go was motivated by the need to solve software engineering issues at Google and to provide an alternative for C++. Also, as multi-core processors became more popular, developing a language with higher productivity levels was necessary. Go started being designed at Google in 2007.

Why Golang is not popular?

Unfortunately, Go lacks a lot of features by design, and sometimes it's really annoying. Golang was meant to make development faster, but in a lot of situations, you are writing more code than you'd write using other programming languages.

Is Golang the same as GO?

You might hear the language called both Go and Golang, which might be confusing. I once thought they were names for different languages. But Golang is just another name for Go – and Go remains the official name. Golang came from the domain name of the Go official website, golang.org.

Does go need a runtime?

Does Go have a runtime? Go does have an extensive library, called the runtime, that is part of every Go program. The runtime library implements garbage collection, concurrency, stack management, and other critical features of the Go language.


1 Answers

That thread mentions:

Homage, Easter egg, inside joke, take your pick :). Notice the authors of the commits in question too

Said thread references this commit as the starting point, but also points out to the actual first commit of the Golang project, with the first revision of the Go spec.

The (alleged) "author" of the four first commits is Brian Kernighan.
Rob Pike has worked with Brian in the 1980's, at Bell Labs, so this can be viewed as a reference to his professional origin.

The idea of this Easter egg is to illustrate an evolution of an Hello World program in C:

(See more with this recent GopherCon April 2014 talk hellogophers.slide - Rob Pike)


Hello, World

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';

Convert to 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");
}

Convert to Draft-Proposed 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");
}

Last-minute fix: convert to ANSI C

changeset:   3:172d32922e72
user:        Brian Kernighan <[email protected]>
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;
}

Go spec starting point

changeset:   4:4e9a5b095532
user:        Robert Griesemer <[email protected]>
date:        Sun Mar 02 20:47:34 2008 -0800
summary:     Go spec starting point.
like image 182
VonC Avatar answered Nov 07 '22 06:11

VonC