The State of Go
Where we are in February 2015

Andrew Gerrand
adg@golang.org


* Go 1.4

Released in December 2014.

A few important things:

- Android support.
- Canonical import paths.
- The `go`generate` command.

Lots of behind-the-scenes work:

- Prep work for new garbage collector.
- Prep work for C to Go tool chain conversion.
- Source tree re-organization.

.link /doc/go1.4 go.dev/doc/go1.4


* Transition to Git

* Transition to Git

In December we migrated the Go repositories from Mercurial to Git.

Also moved to new development infrastructure:

- googlesource.com replaces Google Code for repository hosting.
- Gerrit replaces Rietveld for code review.
- GitHub replaces Google Code for issue tracking and wiki.

A big deal for Go contributors, but not important to Go users.

.link https://go.googlesource.com
.link https://go-review.googlesource.com
.link https://github.com/golang/go


* Why Git?

- Gerrit and GitHub use Git.

Why Gerrit?

- Rietveld was unmaintained.
- Gerrit is actively maintained; used by Android and Chrome, among others.

Why GitHub?

- Puts us closer to our community.
- Other GitHub repos can more easily link to Go issues and commits.


* Transition pros and cons

Pros:

- More people understand Git than Mercurial.
- Contributors can use their own Git workflows.
- Good integration between Git and Gerrit. (Rietveld and Mercurial are separate.)
- Automated CLA checking.

Cons:

- Git has a steep learning curve.
- No way to disable pull requests.
- No way to "star" or +1 issues.
- The standard of issue reports has gone down. (No issue templates. Different culture.)
- The transition was a ton of work.


* Why not accept pull requests?

Coming from Gerrit, Rietveld, or Google's internal code review systems,
GitHub's pull request system is lacking.

- Can only view diffs on a single page (can be *very* slow).
- Comments are sent as they are written; you cannot "draft" comments.
- Cannot compare differences between patch sets.
- To create a patch one must fork the repository publicly (weird and unnecessary).
- Accepting a patch creates a "merge commit" (ugly repo history).
- In general, pull request culture is not about code review.


* Go 1.5


* Change to release cycle

Go 1.5 is scheduled for release in August 2015 (was June).

(Previous cycle clashed with holidays and other calendrical events.)


* From C to Go

The `gc` tool chain is being converted from C to Go.

An ongoing process, started early 2014.
Russ Cox says "It'll be done by March [2015]."

New `link` tool to replace `6l`, `8l`, etc.
New `asm` tool to replace `6a`, `8a`, etc.
Machine-translated `gc` to replace `6g`, `8g`, etc.

Design doc:

.link /s/go13compiler go.dev/s/go13compiler

Go 1.5 will have *no* C code in the tool chain or runtime.


* Compiling Go 1.5

You will need Go 1.4 to build Go 1.5 and above.

(But you will not need a C compiler!)

As a user, put Go 1.4 in `$HOME/go1.4` (or set `$GOROOT_BOOTSTRAP`).

New OS or architecture ports will need to cross-compile.

Design doc:

.link /s/go15bootstrap go.dev/s/go15bootstrap

If you use a binary distribution of Go, you don't need to do anything.


* Concurrent Garbage Collector

Work began on a new, concurrent GC during the Go 1.4 dev cycle.

Goal:

- Limit GC latency to less than 10 milliseconds.
- Run Go application code for at least 40ms out of every 50ms.

On track for Go 1.5.

.link /s/go14gc go.dev/s/go14gc


* HTTP/2

Brad Fitzpatrick has implemented an `HTTP/2` server for Go.

Will be in the standard library by Go 1.soon.

Go servers that use `net/http` will get `HTTP/2` for free.

Currently in Brad's GitHub:

.link https://github.com/bradfitz/http2

See it in action:

.link https://http2.golang.org


* Mobile

David Crawshaw, Hana Kim, Minux, and Burcu Dogan have been working on Go for
mobile devices.

Can build Android apps with Go 1.4
(if you can work out the Android build system).

For Go 1.5:

- Simpler build story for Android.
- More NDK library support.
- Better bindings for calling Go from Java.
- Beginnings of iOS support. (New `darwin/arm` build target.)


* New architectures

Go 1.5 will support PowerPC 64 and (maybe) ARM64.

PowerPC 64 is basically done; builder running, passes tests.

ARM64 development ongoing.
Hope to have a dev.arm64 branch in the main repo for Go 1.5.
Stretch goal is merging it into master.

See work in progress for ARM64 here:

.link https://github.com/4ad/go


* Execution tracing

Dmitry Vyukov has implemented a `trace` tool.
It collects data to produce diagrams of process execution.

.image state-of-go/trace.png 350 _

Front end is the Android/Chrome trace-viewer. ([[https://github.com/google/trace-viewer][github.com/google/trace-viewer]])

.link /s/go15trace go.dev/s/go15trace


* Analysis and Refactoring Tools

Alan Donovan and others have been working on a tools for analyzing and
manipulating Go source code.

Available in the `tools` repo:

- `callgraph`: display the call graph of a Go program.
- `gomvpkg`: moves go packages, updating import declarations.
- `gorename`: type-safe renaming of identifiers in Go source code.

Coming soon:

- `sockdrawer`: a tool for automatically splitting packages.


* Builder infrastructure

Brad Fitzpatrick and Andrew Gerrand have been hacking away at our continuous
build infrastructure.

Now running Linux, FreeBSD, OpenBSD, and Plan 9 builders
on Google Compute Engine. (OS X, Windows coming soon.)

Spin up builders to do work, spin up many in parallel.
Gives us results much faster.

Up next: trybots to test pending changes.

Also: gomote! (Demo)


* The Go Community


* Conferences in 2015

- FOSDEM, Brussels, now!
- GopherCon India, Bengaluru, February
- GoCon, Tokyo, Spring and Autumn
- GopherCon, Denver, July
- dotGo, Paris, November

More to be announced.


* Gopher Gala

A global Go hackathon, in January 2015 (last week).

.image state-of-go/gala.jpg 200 _

Teams compete to produce Go apps, judged by "usefulness, creativity, completeness, and how well they showcase Go's strengths."

Also physical hackathons around the world: from San Francisco to Stockholm to Tokyo.

Cool prizes, including a Chromebook Pixel, a Raspberry Pi, and a trip to Colima, Mexico.

The [[http://gophergala.com/blog/gopher/gala/2015/02/03/winners/][winners have been announced]].



* Go user groups

Lots of Go meetups popping up all over the world.

Find one near you:

.link https://go-meetups.appspot.com

