The State of Go
Where we are in June 2014

Andrew Gerrand

* Yesterday


* Initial reception

Looking back on the first months.


* Complaints

The complaints started right away…

.image state-of-go/msg-wrong.png _ 600

.image state-of-go/msg-lacks.png _ 600


* Familiar complaints

.image state-of-go/msg-generics.png _ 600

.image state-of-go/msg-type.png _ 600

.image state-of-go/msg-exceptions1b.png _ 600


* Familiar complaints

.image state-of-go/indent.png 500 _

The first HN thread about Go was mostly an argument about braces and indentation.


* Historic moments

The first public language change (Dec 10, 2009):

.image state-of-go/msg-semi.png _ 400


* The gopher

.image state-of-go/msg-logo1.png _ 800

.image state-of-go/sadgopher.png _ 250


* The gopher

.image state-of-go/msg-logo2.png _ 800


* The gopher

.image state-of-go/msg-logo3.jpg _ 700


* A keen observation

.image state-of-go/msg-exceptions2.png _ 800


* Signs of hope

.image state-of-go/msg-nogenerics.png _ 600


* Today


* Growth

.image state-of-go/redmonk.png _ 600

.image state-of-go/oloh.png


* User groups

Today there are 48 active user groups in 15 countries across 5 continents.


* GopherCon

.image state-of-go/gophercon.png

Community-driven. 3 days. 700 attendees. 24 talks. 1 panel. 4 hours of lightning talks!


* The gopher

.image state-of-go/gophers.jpg

* The gopher

.image state-of-go/bus.jpg

* The gopher

.image state-of-go/tattoo.jpg


* Go 1.3

Released last Wednesday, 18 June 2014.

Highlights:

- Native Client support (amd64, 386)
- DragonFly BSD, Plan 9, and Solaris support
- Improved performance (GC, contiguous stacks, race detector, regexp)
- Faster incremental builds (linker overhaul)
- Precise GC of stacks
- Static analysis in godoc


* Tomorrow


* Upcoming conferences

.image state-of-go/dotgo.png

.image state-of-go/india.png


* Go 1.4

Due December 1st, 2014.

What might be in it? (Speculative list follows.)


* New language features

Nope.


* Canonical import paths

A means for a repository to specify its canonical import path.

Goal: stop people from checking out repos from the wrong path.

Applications:

- Stable vanity import paths.

	"camlistore.org" -> "camlistore.googlesource.com/camlistore"

- Make GitHub's fork model less painful.

(Proposal forthcoming.)


* Internal packages

Current proposal:

"An import of a path containing the element “internal” is disallowed if the importing code is outside the tree rooted at the parent of the “internal” directory."

- Code in `/a/b/c/internal/d/e/f` can be imported only by code in the directory tree rooted at `/a/b/c`.
- `$GOROOT/src/pkg/internal/xxx` can be imported only by other code in the standard library (`$GOROOT/src/`).

And, later:

- `$GOPATH/src/mypkg/internal/foo` can be imported only by code in `$GOPATH/src/mypkg`.

.link http://golang.org/s/go14internal


* src/pkg → src

Move the standard library from `$GOROOT/src/pkg` to `$GOROOT/src`.

Basically makes `$GOROOT` work just like `$GOPATH`.

(Not a big deal for most, but a nice clean up for the core.)

.link http://golang.org/s/go14nopkg


* File system access throttling

Throttling of access to the file system at the `os` package level.

Goal:

- Launch a million goroutines that do file system stuff.
- Don't launch a million operating system threads to block on the syscalls.

Make it work just as nicely as it does with the network.

(Proposal forthcoming.)


* "go generate"

A convenience for generating Go source code. Example uses:

- yacc: generating .go files from yacc grammar (.y) files
- protobufs: generating .pb.go files from protocol buffer definition (.proto) files
- HTML: embedding .html files into Go source code
- Other ideas abound…

Proposed mechanism:

Add generator directive in Go source files:

	//go:generate yacc -o gopher.go gopher.y

Use the Go tool to execute the directives:

	% go generate [packagepath]

(Proposal forthcoming.)


* More tool chain work

- `cmd/go` support for `gccgo`
- `cmd/go` support for embedded data files
- Race detector improvements

The transition from C to Go continues:

- Linker rewritten in Go (`cmd/link`)
- Assembler rewritten in Go (`cmd/asm`)
- Possibly: `cmd/gc` translated to Go


* Better GC and malloc

- The existing allocator is based on TCMalloc (designed for C/C++). It can be re-designed to better suit Go.
- Lighter representation and colocation of GC metadata.
- Various strategies for reducing GC pause time (concurrent sweep, etc).

Rough estimate: 10-20% overall speedup, 20-50% GC pause reduction, 5-10% RSS reduction.

Details:

.link http://golang.org/s/go14mallocgc

* Other runtime changes

Concurrency improvements:

- Lock-free fast path for non-blocking receive from empty channel.
- Rewrite select to hold only one channel lock at a time.

C to Go:

- G-stack runtime converted to Go.


* Package changes

- Easier structuring features in `text/template`
- Bring `reflect.Value` back to 3 words
- Fix embedded field visibility (`reflect`)
- Safe version of `encoding/gob`
- Unicode 7 support


* Ports

- Native Client `arm`
- PowerPC 64
- ARM64


* Go support for Android

Go support for the NDK. (Like C/C++ today, but better!)

Goal: enough support for writing games.

Based on the work of Elias Naur and others in the community.

.link http://golang.org/s/go14android


* More

.link http://golang.org/s/go14todo


* Questions?

