The State of Go
Where we are in June 2014
Andrew Gerrand
Andrew Gerrand
Looking back on the first months.
3The complaints started right away…
The first HN thread about Go was mostly an argument about braces and indentation.
6The first public language change (Dec 10, 2009):
Today there are 48 active user groups in 15 countries across 5 continents.
15Community-driven. 3 days. 700 attendees. 24 talks. 1 panel. 4 hours of lightning talks!
16Released last Wednesday, 18 June 2014.
Highlights:
Due December 1st, 2014.
What might be in it? (Speculative list follows.)
23Nope.
24A means for a repository to specify its canonical import path.
Goal: stop people from checking out repos from the wrong path.
Applications:
"camlistore.org" -> "camlistore.googlesource.com/camlistore"
(Proposal forthcoming.)
25Current 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."
/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
.
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.)
27
Throttling of access to the file system at the os
package level.
Goal:
Make it work just as nicely as it does with the network.
(Proposal forthcoming.)
28A convenience for generating Go source code. Example uses:
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.)
29cmd/go
support for gccgo
cmd/go
support for embedded data filesThe transition from C to Go continues:
cmd/link
)cmd/asm
)cmd/gc
translated to GoRough estimate: 10-20% overall speedup, 20-50% GC pause reduction, 5-10% RSS reduction.
Details:
31Concurrency improvements:
C to Go:
text/template
reflect.Value
back to 3 wordsreflect
)encoding/gob
arm
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.
35Andrew Gerrand