Go: A Documentary

Go 1.15

Part II · commits first contained in tag go1.15 ^go1.14 (tagged 2020-08-11) · 963 in-scope commits

The new linker: dev.link’s conversion to the loader is complete and the old object format is deleted. Static lock ranking. Lock-free mcentral. Typed aux and the rulegen rewrite. Small-integer interface conversions without allocation. darwin/386 and darwin/arm removed.

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)

Lock-free spanSet-based mcentral, offset-address ranges, zombie-slot detection, scavenger watermarks, preemptible dedicated mark workers.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Static lock ranking, Ticker.Reset, Map.LoadAndDelete, timer stealing and poller-local queueing; threads: lock ranking, timers, Map.

Other changes

Data structures and type metadata

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

Cheap-checks-first generated equality algorithms, small-integer interface conversions without allocation, typehash equal to compiler hashes, quiet NaNs in softfloat.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Max RSS in heap profiles, goroutine profile labels, block/mutex seconds parameter, race .syso rebuilds.

Other changes

OS layer, stacks and panics

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

conservative-scanned debug calls, darwin/arm and 386 removed, open-coded defer stale-entry fix, larger stack growth for large frames, Plan 9 env cache.

Other changes

Compiler frontend

From Compiler frontend (Go 1.10–1.17)

Misplaced-directive diagnostics, new syntax source reader, ODDDARG removal, mid-stack inlining in recursion cycles, slicesym/gdata cleanup.

Other changes

Middle end and SSA optimizer

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

Strongly typed aux/auxint with ellipsis rules across architectures, integer-range fuse+rules replacing walkinrange, mid-stack inlining through recursion cycles, precise method-value escape analysis, and typed-rule conversions (threads: Rulegen, Inlining, Escape, CFG passes).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.12–1.17)

rulegen reshaped (ellipses, commutative loops, typed aux); separate addressing-modes pass for amd64/386/s390x; stack maps only at calls; spectre mitigation; alignment directives; new object format re-enabled.

Other changes

Linker and object files

From Linker and object files (Go 1.10–1.17)

The dev.link conversion: old object format deleted, all passes moved to loader.Sym, new DWARF on loader, parallel relocation/asmb/dwarfcompress, internal PIE and Windows PIE.

Other changes