Hello, Gophers!
Gophercon Opening Keynote
24 Apr 2014

Rob Pike
Google, Inc.
@rob_pike
http://golang.org/s/plusrob
http://golang.org

* Video

A video of this talk was recorded at GopherCon in Denver.

.link https://www.youtube.com/watch?v=VoS7DsT1rdM Watch the talk on YouTube


* Hello, gophers!

.image hellogophers/gophers.jpg 500 750

* Hello, gophers!

.play hellogophers/hellogophers.go

* History

This is a historic occasion.

Go has achieved a level of success worthy of a conference.

* Success

Many factors contribute to that success.

- features
- lack of features
- combination of features
- design
- people
- time

* Case study

A look back, focusing on code.

* Two programs

A close look at two programs.

First is the first Go program _you_ ever saw. Historic for you.
Second is the first Go program _we_ ever saw. Historic for all gophers.

First up: "hello, world".

* hello.b

.code hellogophers/hello.b

First appeared in a 1972 B tutorial by Brian W. Kernighan.
(Not, as sometimes claimed, a few years earlier in BCPL.)

* hello.c

.code hellogophers/hello.c

First appeared in
_Programming_in_C:_A_Tutorial_, by Brian W. Kernighan, 1974.
Came as a document with Unix v5.

* hello.c

.code hellogophers/helloKnR.c

First appeared in
_The_C_Programming_Language_, by Brian W. Kernighan and Dennis M. Ritchie, 1978.

* hello.c, Draft ANSI C

.code hellogophers/helloDraftAnsi.c

Appeared in
_The_C_Programming_Language_, _Second_Edition_, (Based on Draft-Proposed ANSI C)
by Brian W. Kernighan and Dennis M. Ritchie, 1988.

* hello.c, ANSI C89

.code hellogophers/helloAnsi.c

Appeared in
_The_C_Programming_Language_, _Second_Edition_, round two,
by Brian W. Kernighan and Dennis M. Ritchie, 1988.

"You've gotta put a void THERE?" -Ken Thompson

* A generation or two later...

(Skipping all the intermediate languages.)

Go discussions start in late 2007.

Specification first drafted in March 2008.
For experimentation and prototyping, compiler work already underway.
Initially generated C output.
Once the specification arose, compiler rewritten to generate native code.

* hello.go, June 6, 2008

.code hellogophers/hello_20080606.go

First checked-in test.
The `print` builtin is all we have, and `main` returns an `int`.
Note: no parentheses on `print`.

* hello.go, June 27, 2008

.code hellogophers/hello_20080627.go

When `main` returns, the program calls `exit(0)`.

* hello.go, August 11, 2008

.play hellogophers/hello_20080811.go

Parentheses now required: `print` now a function not a primitive.

* hello.go, October 24, 2008

.code hellogophers/hello_20081024.go

The "printf as we know and love it" goes in.
(The test still uses `print` not `printf`; we've switched examples here.)

* hello.go, January 15, 2009

.play hellogophers/hello_20090115.go

Upper case for export. "Casification."

* hello.go, Dec 11, 2009

.play hellogophers/hello_20091211.go

No more semicolons.
A major change that occurs _after_ the open source release (Nov 10, 2009).

The current version.

It took us a while to get here (32 years!).

A lot of history.

* Not just C

We "started with C" but Go is profoundly different.
Some of the languages that influenced and informed the design of Go:

C: statement and expression syntax
Pascal: declaration syntax
Modula 2, Oberon 2: packages
CSP, Occam, Newsqueak, Limbo, Alef: concurrency
BCPL: the semicolon rule
Smalltalk: methods
Newsqueak: `<-`, `:=`
APL: `iota`

And others. Also some was invented whole: `defer`, constants, for instance.

Plus lessons good and bad from all those plus:
C++, C#, Java, JavaScript, LISP, Python, Scala, ...

* hello.go, Go version 1

Which brings us to today.

.play hellogophers/hello.go

Let's dig deeper, break this down.

* Hello, world in 16 tokens

`package`
`main`
`import`
`"fmt"`
`func`
`main`
`(`
`)`
`{`
`fmt`
`.`
`Println`
`(`
`"Hello,`Gophers`(some`of`whom`know`日本語)!"`
`)`
`}`

* package

Major topic in early design discussions: Key to scalability.

What is a package? Ideas from Modula-2 etc.
Why are there packages?
Hold all the information you need to build.
No circular dependencies (imports).
No subpackages.
Separation of package name and package path.
Visibility is package-level, not type-level.
Within a package, you have the whole language, outside only what you permit.
	
* main

One place where C  legacy shows through.
Was originally `Main` for some forgotten reason.
`Main` package, `main` function.
Special because the root of the initialization tree.

* import

Mechanism for loading a package.
Implemented by the compiler (as opposed to a text processor).
Worked hard to make it efficient and linear.
Imports a package, not a set of identifiers.

As for export: It used to be a keyword.

* "fmt"

Package path is just a string, not a list of identifiers.
Allows the language to avoid defining what it means—adaptability.
From the beginning wanted a URL as an option.
Allows for future growth.

* func
A keyword introduces functions (and types, variables, constants) for easy parsing.
Easy parsing is important with function literals (closures).

By the way, keyword was originally `function`.

* Aside: Mail thread from February 6, 2008

From: Ken Thompson <ken@google.com>
To: gri, r

larry and sergey came by tonight. we
talked about go for more than an hour.
they both said they liked it very much.

p.s. one of larrys comments was "why isnt function spelled func?"

---

From: Rob Pike <r@google.com>
To: ken, gri

fine with me.  seems compatible with 'var'.

anyway we can always say, "larry said to call it 'func'"

* main

Where program starts... except it isn't.
Separation of initialization from normal execution, long planned.
Where does initialization happen?
Feeds back to package design.

* ()

Look Ma, no `void`.
No return value for `main`: handled by runtime.
No function args (command line is in `os` package).
No return value.

Return values and syntax.

* {

Braces not spaces.
And not square brackets.
Why is the newline after the brace?

* fmt

All imported identifiers are _qualified_ by their import.
_Every_ identifier is either local to package or func, or qualified by type or import.
Profound effect on readability.

Why `fmt` not `format`?

* .

How many uses are there in Go for a period token? (Lots.)
The meaning of `a.B` requires using the type system.
But it is clear to humans and very easy to read.

Autopromotion of pointers (no `->` operator).

* Println

`Println` not `println`: capitals for export.
Always knew it would be reflection-driven. (Safety, formatless printing.)
Variadic functions.
Argument type was `(...)`; became `(...interface{})` on Feb 1, 2010.

* (

Traditional function syntax.

* "Hello, Gophers (some of whom know 日本語)!"

UTF-8 input source, so strings as literals are UTF-8 automatically.
But what is a string?
One of the first things written in the specification, hardly changed today.

.link http://blog.golang.org/strings

* )

No semicolon.
Semicolons went away shortly after release.
Much futzing around to try to cull them in early days.
Eventually accepted the BCPL approach.

* }

Done.

* Aside: Not discussed

- types
- constants
- methods
- interfaces
- libraries
- memory management
- concurrency (coming up)

Plus tools, ecosystem, community, ...:
Language is central but only part of the story.

* Success

Factors:

- building on history
- building on experience
- process of design
- early ideas refined into final approach
- concentrated effort by a small dedicated team

Finally: Commitment.

Go 1.0 locked down the language and libraries.

* Another round

Now watch similar evolution of a second program.

* Problem: Prime sieve

Problem specification from
_Communicating_Sequential_Processes_, by C. A. R. Hoare, 1978

"Problem: To print in ascending order all primes less than 
10000. Use an array of processes, SIEVE, in which each 
process inputs a prime from its predecessor and prints it. 
The process then inputs an ascending stream of numbers 
from its predecessor and passes them on to its successor, 
suppressing any that are multiples of the original prime. "

* Solution

Defined in the 1978 CSP paper.
(Note: not the sieve of Eratosthenes.)

"This beautiful solution was contributed by David Gries."

* CSP

In Hoare's 1978 CSP paper

.code hellogophers/sieve.csp

No channels, just processes so number of primes is fixed by program.

* Newsqueak

_circa_ 1988.
Language by Rob Pike, program by Tom Cargill via Doug McIlroy.

Uses channels, so length of run is programmable.
(Where did the idea of channels come from?)

.code hellogophers/sieve.newsqueak 1,/BREAK/

* Newsqueak (cont'd)

.code hellogophers/sieve.newsqueak /BREAK/,$

* sieve.go, March 5, 2008

First version in a Go specification, probably the second non-trivial program written.
`>` to send, `<` to receive. Channels are pointers. `Main` is capitalized.

.code hellogophers/sieve_20080305.go 1,/BREAK/

* sieve.go, March 5, 2008 (cont'd)

.code hellogophers/sieve_20080305.go /BREAK/,$

* sieve.go, July 22, 2008

`-<` to send, `<-` to receive. Channels still pointers. Now `main` not capitalized.

.code hellogophers/sieve_20080722.go 1,/BREAK/

* sieve.go, July 22, 2008 (cont'd)

.code hellogophers/sieve_20080722.go /BREAK/,$

* sieve.go, September 17, 2008

Communication operators now prefix and postfix  `<-`. Channels still pointers.

.code hellogophers/sieve_20080917.go 1,/BREAK/

* sieve.go, September 17, 2008 (cont'd)

.code hellogophers/sieve_20080917.go /BREAK/,$

* sieve.go, January 6, 2009

The `make` builtin arrives. No pointers. Code wrong! (One `*` left, bad argument types.)

.code hellogophers/sieve_20090106.go 1,/BREAK/

* sieve.go, January 6, 2009 (cont'd)

.code hellogophers/sieve_20090106.go /BREAK/,$

* sieve.go, September 25, 2009

First correct modern version. Also: capitalization gone. Uses `fmt`.

.play hellogophers/sieve_20090925.go 1,/BREAK/

* sieve.go, September 25, 2009 (cont'd)

.play hellogophers/sieve_20090925.go  /BREAK/,$

* sieve.go, December 10,  2009

Semicolons gone. Program as it is today.

.play hellogophers/sieve.go 1,/BREAK/

* sieve.go, December 10,  2009 (cont'd)

.play hellogophers/sieve.go /BREAK/,$

"This beautiful solution was contributed by a decades-long process of design."

* Aside: Not discussed

- `select`

The core connector for real concurrent applications. (A fact not always appreciated).
Origins in Dijkstra's guarded commands.
Made truly concurrent in Hoare's CSP.
Refined through Newsqueak, Alef, Limbo, and other routes.

Go's version specified on March 26, 2008.
Simplifications, clarifications, syntactic considerations.

* Stability

Sieve program unchanged since late 2009—stability!

Open source systems are not always dependably compatible and stable.

Go is.

This is a very important reason for Go's success.

* Trends

Graphs in usage metrics show knee in curve at Go 1.0 release.

.image hellogophers/trends.png

* Success

The factors for Go's success?

Obvious: Features and tools.

- concurrency
- garbage collection
- efficient implementation
- static types but dynamic feel
- rich but limited standard library
- tooling (and the factors that make it possible)
- `gofmt`
- programming in the large

* Success

Less obvious: process.

- focus on the original goals
- concentrated development followed by freeze
- consensus of a small core team
- vital contributions from a community that "gets it"
- rich ecosystem generated as a consequence

In short, an open source community that shares our mission,
coupled to a language designed for today's world.

* Fitness to purpose

From _Go:_the_emerging_language_of_cloud_infrastructure_ by Donnie Berkholz, March 2014.
[[http://golang.org/s/emerging]]

.image hellogophers/emerging.png

* The future

This is where you come in!

.image hellogophers/gophers.jpg 500 750
