Go: A Documentary

Go 1.6

Part II · commits first contained in tag go1.6 ^go1.5 (tagged 2016-02-17) · 719 in-scope commits

GC pause work: root jobs in workers, decentralised state machine. Hand-written parser replaces yacc. cgo pointer checks (cgocheck). mips64. PIE and shared libraries on more architectures. MSan. Concurrent-map-misuse detection.

Each area lists the stage every thread reached in this release (with what was left open afterwards), then changes that are not part of a thread. Thread names link to the full thread on its topic page.

Memory management

From Memory management: GC and allocator (Go 1.0–1.17)

Pause work: root jobs in workers, STW loops removed, decentralised state machine, background GC goroutine removed.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Simplified buffered channels, fewer thread wakeups, GC-work handoff; threads: channels, scheduler.

Other changes

Data structures and type metadata

From Runtime data structures and type metadata (Go 1.0–1.17)

Atomic pointer writes in memmove/memclr, aeshash DoS hardening, removal of type.zero, concurrent-map-misuse detection.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

msan runtime support; tracer made free of write barriers; debug.SetTraceback; panic frames restored in tracebacks.

Other changes

OS layer, stacks and panics

From OS interface, stacks and panics (Go 1.5–1.17)

cgo pointer checks (GODEBUG=cgocheck), GOTRACEBACK=single, runtime/internal/{sys,atomic}, the pcvalue cache, mips64 and android/{386,amd64,arm64} ports, c-archive/c-shared signal handling and addmoduledata for shared builds.

Other changes

Compiler frontend

From Compiler frontend (Go 1.1–1.9)

Hand-written recursive-descent parser replaces yacc, compact binary export data under -newexport, captureless-closure constants, go:noinline, -msan, mass NodeList→slice cleanup.

Other changes

Middle end and SSA optimizer

From Middle end and SSA optimizer (Go 1.0–1.9)

Escape precision for variadic args and loop levels; string compare cleanup (threads: escape analysis, copies/strings).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.0–1.6)

mips64 port; position-independent code on ppc64le, arm, arm64, 386; AVX/VEX assembler support and AVX2 runtime assembly; code layout split from object writing. Threads: mips64, PIC/TLS, assemblers, zeroing/copying.

Other changes

Linker and object files

From Linker and object files (Go 1.0–1.9)

PIE and many shared/c-shared architecture additions, -msan, -libgcc/-extar, mips64, ppc64 external linking.

Other changes