Go: A Documentary

Go 1.14

Part II · commits first contained in tag go1.14 ^go1.13 (tagged 2020-02-25) · 826 in-scope commits

Asynchronous (signal-based) preemption. Timers on Ps. Open-coded defers. Bitmap page allocator. riscv64 port. First pieces of the new object file format. Overlapping interfaces. checkptr.

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)

New bitmap page allocator, self-paced scavenger, async-preemption support for GC (conservative scanning), trigger ratio floor.

Other changes

Scheduler and concurrency

From Scheduler and concurrency runtime (Go 1.0–1.17)

Timers on Ps and asynchronous (signal) preemption, suspendG, starvation handoff; threads: timers, preemption.

Other changes

Data structures and type metadata

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

Hash functions generated only for map-key types with run-time interface hashing, -d=checkptr support, riscv64 bytealg/reflect, atomic memmove on arm64.

Other changes

Diagnostics and knobs

From Diagnostics and knobs (Go 1.0–1.17)

Inlined function encoding in profiles, asyncpreemptoff GODEBUG, race support for new timers.

Other changes

OS layer, stacks and panics

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

signal-based asynchronous preemption on all main archs, open-coded defers' runtime support, freebsd/arm64 and linux/riscv64, NaCl removed, signal-stack mlock workaround.

Other changes

Compiler frontend

From Compiler frontend (Go 1.10–1.17)

Untyped constant conversion rewrite, -d=checkptr, overlapping interfaces gated by -lang, columns in export data, scanner error limiting.

Other changes

Middle end and SSA optimizer

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

Open-coded defers and their follow-up fixes, escape analysis performance and the new leak encoding, switch walking refactor and string-switch optimization, poset rework, statement-mark preservation across passes, checkptr, and optimizer logging for IDEs (threads: Defers, Escape, Switch, Prove, Statement boundaries, Diagnostics, Rulegen).

Other changes

Backends and assemblers

From Backends and assemblers (Go 1.12–1.17)

riscv64 assembler and compiler arrive; multi-control blocks and s390x compare-and-branch; FMA intrinsics; unsafe-point marking for async preemption; compiler-generated debug_lines; dev.link object format begins.

Other changes

Linker and object files

From Linker and object files (Go 1.10–1.17)

Compiler-generated DWARF line tables with multi-CU packages, open-coded defer funcdata, libFuzzer counters, and the first shipped pieces of the new object file format/loader (default via -newobj) plus initial riscv64 and PIE work.

Other changes