Go: A Documentary

Go 1.13

Part II · commits first contained in tag go1.13 ^go1.12 (tagged 2019-09-03) · 567 in-scope commits

New escape analysis on by default. Stack-allocated defer records. Background scavenger. Go 2 number literals and signed shift counts. Spec-compliant package init order. sync.Pool victim cache. internal/reflectlite.

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)

Background scavenger, first-fit address-ordered allocation, huge-page-aware scavenging, effective GOGC.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Pool victim cache and lock-free queues, inlinable sync fast paths, preemption on many short syscalls, poller error reporting; threads: Pool, Mutex, preemption.

Other changes

Data structures and type metadata

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

internal/reflectlite, reflect.IsZero, ifaceeq direct fast path, kindNoPointers removed, StructOf GC fixes, arm bytealg.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Runtime dlog ring-buffer debug log; go env -w/-u; arm/mips CPU profile corruption fixed.

Other changes

OS layer, stacks and panics

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

aix/ppc64 completed, netbsd/openbsd arm64, illumos, TOPFRAME, PCDATA/FUNCDATA re-ordering, Android TLS offset made dynamic, physHugePageSize.

Other changes

Compiler frontend

From Compiler frontend (Go 1.10–1.17)

Go 2 number literals and signed shifts, evconst consolidation, spec-compliant package init order, multi-value f(g()) rewriting moved to typecheck, -newescape default.

Other changes

Middle end and SSA optimizer

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

The new escape analysis (escape.go) landed and became the default; defer records moved to the stack; signed divisibility rules and prove learned extensions/bounds facts; the rulegen rewrite began and short-circuiting/&& ordering were fixed (threads: Escape, Defers, Prove, Arithmetic, Walk/order).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.12–1.17)

Intrinsics and ports: Add64/Sub64 carry chains, wasm intrinsics and options, ABI wrappers for linkname'd symbols, index-carrying bounds failures, s390x sequentially consistent atomics.

Other changes

Linker and object files

From Linker and object files (Go 1.10–1.17)

mmapped output and object data, Reloc shrunk, pctab deduplication in pclntab, -strictdups, runtime version info symbol, AIX external linking and PIE, riscv64 groundwork, GOWASM.

Other changes