Go: A Documentary

Go 1.1

Part II · commits first contained in tag go1.1 ^go1 (tagged 2013-05-13) · 967 in-scope commits

Per-P scheduler with local run queues. Runtime-integrated network poller. Parallel GC and the first precise heap scanning. 8-entry-bucket hashmap with incremental growth, plus AES hash. Race detector. External (host) linking. int is 64 bits on amd64. Method values.

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)

Parallel GC with parfor and per-thread work buffers, and the first precise heap scanning from type information; "Stop-the-world mark-sweep…", "Precise heap scanning", "Mark work distribution".

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

The per-P scheduler (779c45a507) with local run queues, and the runtime-integrated network poller; threads: G-M-P scheduler, network poller, goroutine lifecycle.

Other changes

Data structures and type metadata

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

The 8-slot bucket hashmap with incremental growth and fast-path routines, AES hash, reflect.MakeFunc/Select/Convert/Of and method values, the removal of run-time code generation, ARM softfloat conditional execution and faster ARM division.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Race detector added (compiler racewalk, TSan runtime, Windows port, lazy shadow); runtime/debug GC controls; heap profile overhead cut from 64kB to 2kB per MB.

Other changes

OS layer, stacks and panics

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

Non-Go threads can call Go (6c976393ae), fast time sources, integrated netpoll, NetBSD and FreeBSD/ARM ports, new symbol table encoding, GOTRACEBACK=crash.

Other changes

Compiler frontend

From Compiler frontend (Go 1.1–1.9)

C cmd/gc maintenance: method values, new return rules and shift/const rules; first escape-analysis flow tracking and inlining with locals; first race-detector instrumentation (041fc8bf96); mostly error-message and robustness fixes.

Other changes

Middle end and SSA optimizer

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

Escape analysis restructured (call-graph SCC order, in→out parameter tags), inliner made practical (variadic, wrappers, escape-info stealing), rotate recognition (threads: escape analysis, inlining, order/walk).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.0–1.6)

int becomes 64 bits on amd64; a long series of 6g/8g/5g code-quality changes (out-of-line panicindex, componentgen, rotates, SSE register use, GO386), the first GOEXPERIMENT, and explicit type information for locals. Threads: expression codegen, register allocator, C compilers.

Other changes

Linker and object files

From Linker and object files (Go 1.0–1.9)

External (host) linking is born (-hostobj then -linkmode, -extld), -shared PIC output, symbol table repacked host-endian, args/locals info, race/fieldtrack hooks, and typelinks for reflect.ArrayOf.

Other changes