Go: A Documentary

Go 1.2

Part II · commits first contained in tag go1.2 ^go1.1 (tagged 2013-11-29) · 531 in-scope commits

Cooperative preemption via stackguard0. Funcdata/pcdata and pointer maps; precise stack scanning built but shipped opt-in (precisestack). New in-memory symbol table and pclntab. Three-index slices. Per-P allocator caches and persistentalloc.

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)

Allocator refinement for per-P caches (whole-span transfer, inlined malloc fast path), persistentalloc, lazy page table and flexible 64-bit mapping; precise stack scan tried and reverted.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Cooperative preemption of long-running goroutines (10ms), GODEBUG/schedtrace, stack and thread limits, Windows and Solaris pollers; threads: preemption, netpoll, diagnostics.

Other changes

Data structures and type metadata

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

Hash lookup shortcuts, hashmap internals get typed GC info instead of bespoke GC code, itabs from persistentalloc, faster x86 memmove, Slice3, and ARM softfloat/preemption fixes.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Block profiler gains select/close support; race instrumentation fixes; "created by" in tracebacks.

Other changes

OS layer, stacks and panics

From OS interface, stacks and panics (Go 1.0–1.4)

Preemptive scheduling via stackguard0, rewindmorestack prologue, 8 kB segments and the 1 GB stack limit, -shared/external linking on ARM, dragonfly, lazy extra M, wrapper-aware recover.

Other changes

Compiler frontend

From Compiler frontend (Go 1.1–1.9)

Three-index slices (b4e92cee97), precise stack collection built but disabled (30ecb4cd05), large stack variables moved to heap, many inlining-export and message fixes.

Other changes

Middle end and SSA optimizer

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

Small: escape-driven stack make, redundant bounds checks dropped in inlined append and slicing (threads: escape analysis, order/walk).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.0–1.6)

Groundwork for precise GC: funcdata/pcdata, pointer maps from cc and gc, zeroing of pointers on entry, proginfo, portable optimizer code and temporary merging. Threads: pointer maps/liveness, register allocator.

Other changes

Linker and object files

From Linker and object files (Go 1.0–1.9)

New in-memory symbol table and contiguous pclntab with FUNCDATA GC metadata and argument bitmaps; ARM external linking and TLS merge.

Other changes