Go: A Documentary

Go 1.10

Part II · commits first contained in tag go1.10 ^go1.9 (tagged 2018-02-15) · 793 in-scope commits

Buffered write barrier. Soft and hard heap goals. Per-P timer buckets. Threads can exit and LockOSThread nests. DWARF location lists. AVX/AVX2 in the assembler. Open-addressed itab table. Linker code-health refactor and content-based build IDs.

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)

Soft/hard heap goals and 5% assist headroom, buffered write barrier, worker scheduling cleanup.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Per-P timer buckets, nested LockOSThread, no GOMAXPROCS limit, xorshift fastrand; threads: timers, lifecycle, random.

Other changes

Data structures and type metadata

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

A large series of map micro-optimizations (evacuate refactor, fast-path copies, specialized memhash), the new open-addressed itab table with compile-time function pointers, MIPS soft-float.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Block/mutex profiles in new format with delays in ns and mutex scaling; STW trace events; label-race fix.

Other changes

OS layer, stacks and panics

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

threads can exit, vDSO on linux/386 and amd64 on large stacks, DT_GNU_HASH, unified entry points, previous-handler signal death and late handler forwarding, never allocate in unrecoverable panic.

Other changes

Compiler frontend

From Compiler frontend (Go 1.10–1.17)

Export-data diet (skipping unreachable/duplicate inline bodies), better syntax-error recovery and line directives groundwork, and many small typechecker/map-lowering improvements; frontend still C-to-Go-translated gc.

Other changes

Middle end and SSA optimizer

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

Closing the SSA backend's first year: inlining closures with captures and refusing recover callers, location-list lifetimes, memmove-to-Move, stores to unread autos eliminated, and small-range loop simplification; walk shrank (print, select, order) and write barriers were already in SSA (threads: Inlining, Memory-op optimizations, Range loops, Write barriers, DWARF).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.7–1.11)

AVX/AVX2 assembler support via RestArgs, DWARF location lists and -gendwarfinl, math rounding and Abs intrinsics, ARM fused-op patterns, SSE zeroing on amd64, buffered write barrier compiler support (amd64), memory-op combining.

Other changes

Linker and object files

From Linker and object files (Go 1.10–1.17)

Code-health release for cmd/link: globals moved into Link, packages split out (object reader, sym, loadelf/loadmacho/loadpe), the PE writer rewritten around peFile/peSection, DWARF given one compilation unit per package, content-based build IDs, plus PIE/plugin/c-shared enablement across arches.

Other changes