Go: A Documentary

Go 1.9

Part II · commits first contained in tag go1.9 ^go1.8 (tagged 2017-08-24) · 1136 in-scope commits

Type aliases. sync.Map. math/bits intrinsics. Inline-aware tracebacks and CallersFrames. Stack barriers removed. Concurrent runtime.GC(). Profile labels. Write-barrier insertion moved into SSA. Devirtualization. Groundwork for the concurrent backend. Monotonic time.

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)

Noscan spans and spanClass, concurrent runtime.GC, treap for large spans, rationalised trigger, workbufs as manual spans.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Fairer Mutex, sync.Map, semaphore treap, runtime rwmutex, os poller and internal/poll; threads: Mutex, semaphores, Map, netpoll.

Other changes

Data structures and type metadata

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

sync.Map-backed reflect caches, hmap.extra and overflow preallocation, MakeMapWithSize, the compiler's dxxx-to-LSym refactoring and deterministic signature ordering, C99 complex division.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Streaming protobuf writer, profile labels, inlining-aware tracebacks/Callers, concurrent runtime.GC(), heap-profile snapshot at mark termination.

Other changes

OS layer, stacks and panics

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

inline-aware tracebacks/Callers/CallersFrames, stack barriers removed, monotonic time.Now, internal/cpu created, 2 MB Windows stacks, allocManual.

Other changes

Compiler frontend

From Compiler frontend (Go 1.1–1.9)

Type aliases implemented, syntax.Pos position redesign with columns in errors, parse-time label/goto checking, concurrent parsing and initial backend concurrency (-c), cmd/compile/internal/types split, -importcfg, export-data version 5 with inlined-body positions.

Other changes

Middle end and SSA optimizer

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

Write barrier insertion fully moved to SSA, de-virtualization, loop rotation, constant-to-interface without allocation, concurrent-backend preparation, inlining dead-code awareness (threads: write barriers, devirtualization, backend concurrency prep, inlining, rewrite rules, order/walk).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.7–1.11)

Cleanup and speed: liveness ported to SSA, math/bits and rotate intrinsics, automatic commutative rule generation, chunked rewrite functions, types.Type in SSA, XPos/src.Pos, inlining PC tables, Follow removal, concurrent-safe assemblers and Prog allocation for the concurrent backend, ARM/ARM64 assembler hardening, load+op fusion on amd64.

Other changes

Linker and object files

From Linker and object files (Go 1.0–1.9)

PIE linked externally by default, Windows external linking and DWARF fixes, Mach-O DWARF for dsymutil, -importcfg, object magic go19ld, objabi split and symbol-kind trimming.

Other changes