Go: A Documentary

Go 1.11

Part II · commits first contained in tag go1.11 ^go1.10 (tagged 2018-08-24) · 991 in-scope commits

Sparse heap arenas and no heap-size limit. Indexed export format. Concurrent compilation of all functions. Safepoints almost everywhere, with register liveness maps. Prove pass reworked. WebAssembly port. Darwin syscalls through libc. Trace user annotations. DWARF compression. internal/bytealg. Debugger call injection.

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)

Sparse heap: arena index, sparse bitmap and span map, no heap size limit.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

atomic redirected to runtime, RWMutex profiling, ancestor tracebacks, js/wasm callbacks; threads: atomics, diagnostics.

Other changes

Data structures and type metadata

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

internal/bytealg created, arm64 aeshash/memmove/Compare/Index, map fast routines in type-specific files, old ARM softfloat deleted, method-set sorting in the compiler.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Trace user annotations (Task/Span/Log), allocs profile, race on ppc64le, pprof mapping flags.

Other changes

OS layer, stacks and panics

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

Darwin/iOS syscalls through libc, js/wasm, debugger call injection, VDSO traceback, vDSO on arm/arm64, internal/bytealg, GODEBUGCPU experiment, graceful g0 overflow handling.

Other changes

Compiler frontend

From Compiler frontend (Go 1.10–1.17)

Indexed export format added and made default, syntax package made independent with column-aware line directives, concurrent compilation of all functions, method-set sorting O(N+M).

Other changes

Middle end and SSA optimizer

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

The prove pass was reworked (unsatisfiability, poset, loop BCE folded in, loopbce deleted), range loops stopped producing past-the-end pointers, location lists were redesigned, is_stmt statement boundaries and stack maps at nearly every instruction landed, and mid-stack inlining prerequisites (variadics, panic, thresholds) arrived; arm64 got CondSelect (threads: Prove, Statement boundaries, DWARF, Inlining, CFG passes, Range loops).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.7–1.11)

Safepoints almost everywhere with register liveness maps, buffered write barrier on all runtime architectures, location-list redesign and statement boundaries, branchelim/CMOV on amd64 and CSEL on arm64, ARM64 fused operations and bitfield patterns, AVX-512 in the assembler, | rule alternation, and the new wasm architecture.

Other changes

Linker and object files

From Linker and object files (Go 1.10–1.17)

DWARF compression (ELF, then Windows and Darwin) and separation of VA from file layout, is_stmt line tables, dsymutil workarounds, DWARF on darwin/arm, WebAssembly port, GOROOT default at link time, JSON-encoded cgo directives.

Other changes