20. 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
25. 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.)
26. 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/fcan be imported only by code in the directory
tree rooted at /a/b/c.
$GOROOT/src/pkg/internal/xxxcan be imported only by other code in the
standard library ($GOROOT/src/).
And, later:
$GOPATH/src/mypkg/internal/foocan be imported only by code in
$GOPATH/src/mypkg.
golang.org/s/go14internal(http://golang.org/s/go14internal)
27. src/pkg → src
Move the standard library from $GOROOT/src/pkgto $GOROOT/src.
Basically makes $GOROOTwork just like $GOPATH.
(Not a big deal for most, but a nice clean up for the core.)
golang.org/s/go14nopkg(http://golang.org/s/go14nopkg)
28. File system access throttling
Throttling of access to the file system at the ospackage 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.)
29. "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:generateyacc-ogopher.gogopher.y
Use the Go tool to execute the directives:
%gogenerate[packagepath]
(Proposal forthcoming.)
30. More tool chain work
cmd/gosupport for gccgo
cmd/gosupport 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/gctranslated to Go
31. 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:
golang.org/s/go14mallocgc(http://golang.org/s/go14mallocgc)
32. 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.
33. Package changes
Easier structuring features in text/template
Bring reflect.Valueback to 3 words
Fix embedded field visibility (reflect)
Safe version of encoding/gob
Unicode 7 support
35. 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.
golang.org/s/go14android(http://golang.org/s/go14android)