Go: A Documentary

Go 1.12

Part II · commits first contained in tag go1.12 ^go1.11 (tagged 2019-02-25) · 659 in-scope commits

Mark termination simplified, page reclaimer, more aggressive scavenger. Stack objects. ABI0/ABIInternal symbol split. Binary export removed; -lang. AIX port. MADV_FREE. macOS syscall via libSystem.

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)

Mark termination simplification (mark 2, gchelper, gctrace=2 removed), page reclaimer, treap-only span tracking, aggressive scavenger with fixes.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

gList, gchelper removed, netpoll timer merging, scheduling by class; threads: scheduler, netpoll.

Other changes

Data structures and type metadata

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

emptyOne/emptyRest early exit in map scans, overflow-checked multiplication in make/growslice/makemap, growslice bulk barrier, reflect return-value scanning fix, MapRange.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Race on arm64, debug.ReadBuildInfo, GODEBUG=madvdontneed, mid-stack inlining traceback work, gctrace=2 removed.

Other changes

OS layer, stacks and panics

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

stack objects, windows/arm and AIX ports, GODEBUG=cpu., libSystem-backed syscall on macOS, MADV_FREE, ABI hygiene for runtime symbols.

Other changes

Compiler frontend

From Compiler frontend (Go 1.10–1.17)

Binary export removed, -lang introduced, constant folding restricted to Go constants, typechecker tracing and new node dumper.

Other changes

Middle end and SSA optimizer

From Middle end and SSA optimizer (Go 1.10–1.17)

Argument stack construction moved from walk to SSA, write barriers eliminated for non-heap stores, inlining cost tuned (57, single-call bodies, wrappers), ssa.html gained sources and CFGs, and bits intrinsics expanded (threads: Late call expansion, Write barriers, Inlining, Diagnostics, Arithmetic).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.12–1.17)

Dominated by incremental lowering work (amd64/386/ARM/arm64/ppc64/s390x peepholes), arm64 constants without the literal pool, arm64 frame pointers and the first symabis plumbing for the future register ABI.

Other changes

Linker and object files

From Linker and object files (Go 1.10–1.17)

AIX/XCOFF port, stable ABI0 vs ABIInternal separation and ABI aliases in the object file, linker memory slimming (cold Symbol fields), deadcode-before-mangling.

Other changes