Hello, Gophers!
Gophercon Opening Keynote
24 Apr 2014

Rob Pike
Google, Inc.
https://go.dev

* 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 /blog/strings go.dev/blog/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.
[[/s/emerging]]

.image hellogophers/emerging.png

* The future

This is where you come in!

.image hellogophers/gophers.jpg 500 750
