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?
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.
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.
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 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.
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)
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';
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");
}
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");
}
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;
}
changeset: 4:4e9a5b095532
user: Robert Griesemer <[email protected]>
date: Sun Mar 02 20:47:34 2008 -0800
summary: Go spec starting point.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With