The State of the Gopher (Oct)
10 Oct 2014
Tags: dotgo, gopher

Brad Fitzpatrick
Gopher, Google
@bradfitz
bradfitz@golang.org

* The State of the Gopher

- where we've been
- where we're going

.image state-of-the-gopher/gopher.jpg

* bradfitz

- Work on Go's standard library, builders, etc
- Started contributing to Go May 2010
- [[http://camlistore.org]], my big, old Go project: personal data storage & indexing for life

* The Past

* Userbase before November 2009

- 3-10 people inside Google?

* November 2009

- Go is [[http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html][open sourced]]:

.image state-of-the-gopher/opensource.png

* Website in 2009

.image state-of-the-gopher/website1.png

* Website in 2009

.image state-of-the-gopher/website2.png

* Compilers in 2009

- already two: `gc` and `gccgo`

* Aside: GC vs gc

- `gc`: "Go compiler", based originally on Plan 9's C compiler. The main Go compiler.
- `GC`: "Garbage Collector"

* Ports in 2009

- linux-386
- linux-amd64
- linux-arm, just starting to work
- darwin-386
- darwin-amd64
- nacl-386 (first attempt)
With gccgo, more.

* Tools in 2009

- gofmt
- gofix
- godoc

* Release Highlights

* weekly releases

- "weekly.2009-12-09"
- break users weekly, not daily
- gofix appears

* monthly releases

- "r56" ... "r60"
- break users monthly, not weekly
- still painful to write and use packages (Makefiles)

* Go 1.0 (2012-03-28)

- the "error" type
- delete(m, k)

  // before Go 1:
  latLong[storeID] = LatLong{}, false
  name[userID] = "", false

  // new:
  delete(name, userID)

- [[https://golang.org/doc/go1compat][stability promise]] + API check tool:

  pkg net/http, const StatusOK = 200
  pkg net/http, const StatusOK ideal-int
  pkg net/http, type RoundTripper interface { RoundTrip }
  pkg net/http, type Server struct, TLSConfig *tls.Config
  pkg net/http, var DefaultServeMux *ServeMux
  pkg time, method (*Timer) Reset(Duration) bool
  pkg unicode/utf8, func ValidRune(int32) bool

- the `go` tool (get, build, test, ...)

* Go 1.1 (2013-05-03)

- method values

  type S struct { once sync.Once; ... }
  func (s *S) init() { ... }
  func (s *S) Foo() {
      s.once.Do(s.init)

- func "terminating statement"

  func abs(n int) int {
      switch {
      case n < 0: return -n
      default:    return n
      }
  }

- 64-bit "int", large heaps
- 30-40% speed improvement, stdlib++
- more precise heap GC, usually

* Aside: precise vs conservative GC

Conservative GC: if it "looks like" a pointer, treat it like one.

  [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
  [ ptr? ] [ byte slice (skipped in Go 1.0)                             ]
  [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]

Terrible for 32-bit (e.g. ARM) computers: many integers look like pointers.

Precise GC:

  [ int ] [ ptr     ] [ string      ] [ byte slice          ]
  [ int ] [ t f t f ] [ ptr ] [ int ] [ float64     ] [ ptr ]

Requires knowing what every position in memory _actually_ is.

- no false retention, only look at some memory during GC

* Go 1.2 (2013-12-01)

- 6 month release cycle begins
- setting slice capacity with s[i:j:k]

  s := make([]byte, 10, 20)
  foo(s[10:12:15])

  func foo(s []byte) { fmt.Println(len(s), cap(s)) }

- preemption in scheduler
- go test -cover

* Go 1.3 (2014-06-18)

- no language changes
- GOOS=solaris,dragonfly,plan9,nacl
- precise GC of the stack (mostly)
- contiguous stacks (mostly)

* Aside: Segmented vs. Contiguous stacks

- C++/Java: one huge stack per thread
- Go <= 1.2: multiple discontiguous 4K stacks, bounce between
- Go 1.3: one little stack, grow & shrink as needed
.image state-of-the-gopher/contig-stack.png _ 550

* The present (relative to Nov 2009)

* More ports

- Windows
- FreeBSD, OpenBSD, NetBSD
- Solaris, Plan 9, DragonFly BSD
- NaCl (again)

* Better docs

- [[http://blog.golang.org][Blog]] articles,
- Community [[https://golang.org/wiki][Wiki]],
- [[https://golang.org/wiki/Books][Books]]

* Users: up and to the right

- Go [[https://code.google.com/p/go-wiki/wiki/GoUserGroups][user groups]], [[http://go-meetups.appspot.com/][meetups]]
- GitHub commits, stars, forks
- Since 2009: `golang-nuts@` (1450 → 14134), `-dev` (37 → 2152)
.link http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/ Go: the emerging language of cloud infrastructure

.image state-of-the-gopher/oloh.png

* The Cloud

- Docker
- CoreOS, etcd, fleet
- Juju
- NATS, gnatsd, Packer, Heka
- dl.google.com, Vitess, Kubernetes
- App Engine

* Conferences

[[http://connpass.com/series/312/][GoCon Tokyo]]

* Conferences

.image state-of-the-gopher/gophercon.png

* Conferences

.image state-of-the-gopher/dotgo.png

* Conferences

.image state-of-the-gopher/india.png

* CoreOS

.image state-of-the-gopher/bus.jpg

- increasingly running [[http://build.golang.org]], each in a Docker container
- Go powering Go development!

* build.golang.org

.image state-of-the-gopher/build.png 400 _

* Better tools

- go/parser: godoc, [[http://godoc.org]], gofmt, gofix →
- [[http://godoc.org/code.google.com/p/go.tools/cmd/goimports][goimports]]: automatic import lines
- go/types, gofix+types, 
- go/ast, go/ssa, [[http://godoc.org/code.google.com/p/go.tools/cmd/oracle][oracle]],
- [[http://godoc.org/code.google.com/p/go.tools/cmd/eg][eg]], example-based refactoring
- [[http://godoc.org/code.google.com/p/go.tools/cmd/gorename][gorename]], safe global renaming tool

Tooling begets better tooling!

- goimports + go/types + go/parser == [[https://twitter.com/sqs/status/520203018957250560][goreturns]] (lazy "return err")

* The Future

* Go 1.4

* Go 1.4 (2014-12-01?)

- fully precise GC of the stack + heap
- segmented stacks & conservative GC deleted
- stack copier & shrinker requires precise stack types too

- `runtime` conversion from C to Go: maps, channels, interfaces, type checks, println, defer, panic, etc.

- Garbage collector and scheduler are still in C

* Go 1.4

- [[http://golang.org/s/go14android][GOOS=android]] (Elias Naur, David Crawshaw)
- GOOS=nacl GOARCH=arm
- [[http://golang.org/s/go14internal]["internal" packages]]
- [[http://golang.org/s/go1.4-generate]["go generate"]]
- [[https://docs.google.com/a/golang.org/document/d/1QXzI9I1pOfZPujQzxhyRy6EeHYTQitKKjHfpq0zpxZs][syscall package frozen, go.sys]]
- "go tool pprof" converted from Perl (!) to Go
- minor stdlib additions, improvements

* Go 1.5

* Go 1.5 (2014-06-01?)

- Concurrent GC is main theme
- Roadmap: [[http://golang.org/s/go14gc]] (GC in 1.4, 1.5, 1.6+)

* Go 1.5: ports

- GOOS=ios revival? (Minux, David Crawshaw)
- GOARCH=ppc64 (minux)
- GOARCH=arm64 (aram, dfc)

* Go 1.5: removing more C

Didn't make Go 1.4:

- `cmd/link`: linker rewrite in Go
- `cmd/asm`: assembler rewrite in Go
- "gc" compiler in Go

* "gc" Compiler in Go

- lots of C
- C → Go translator == kinda ugly Go
- refactor that Go with tools: `eg`, `gorename`, etc
- add packages, tests
- unify all `8g`, `5g`, `6g`, `9g`
- SSA form, new optimizations

See rsc's GopherCon [[http://talks.golang.org/2014/c2go.slide#1][slides]], [[http://gophercon.sourcegraph.com/post/83820197495/russ-cox-porting-the-go-compiler-from-c-to-go][notes]], [[https://www.youtube.com/watch?v=QIE5nV5fDwA][video]].

* Go 1.5 Tracing

- Dmitry's GOTRACE + Chrome trace viewer

.image state-of-the-gopher/trace.png

* Go 1.6

- More GC work
- Ongoing compiler-in-Go cleanup & optimizations
- PNaCl?
- [[https://docs.google.com/a/google.com/document/d/1d3iI2QWURgDIsSR6G2275vMeQ_X7w-qxM2Vp7iGwwuM/pub][NUMA-aware scheduler]]?
- unknown surprises
Who knows.
Find out next year at dotGo Paris 2015!

* Go 2.0

- maybe one day

* Outside of the core

* libraries & tools

- HTTP/2, to be merged into `net/http`
- go.tools: `goimports`, `eg`, `gorename`, `oracle`, ...
- go.text: Unicode collation, normalization, ...
- go.mobile: Android, iOS, gaming, 3D graphics, event handling
- go.crypto
- go.net
- go.tools
- go.syscall

* gccgo

- keeping up with spec
- better in some ways (codegen, OS, arch)
- worse in others (precise GC, escape analysis)
- work underway to improve

All checking & improving each other:

- gc, gccgo, go/types, language spec, unit tests

* Notable other compilers

- [[https://github.com/go-llvm/llgo][llgo]], Go → LLVM → PNaCL, etc
- [[https://github.com/tardisgo/tardisgo][TARDIS Go]], Go → Haxe → JS, anything
- [[https://github.com/gopherjs/gopherjs][GopherJS]], Go → JS

And all three written in Go, use `go/parser`, `go/types`, etc.
We can't wait to join them.

* In summary

* The growth is exciting

- things are getting cleaner,
- things are getting faster,
- things are getting more impressive,
- everything is growing on top of everything else,
- hard to keep up with golang-dev@, golang-nuts@, bugs, wiki, new github projects, code reviews,

* You all are awesome 

- keep being awesome
- keep making awesome things
