Design docs and discussions
Memory management
Stop-the-world mark-sweep, then the parallel collector
- design doc Simpler and faster GC for Go listed in Go: A Documentary
- design doc Better GC and Memory Allocator for Go listed in Go: A Documentary
- discussion Better GC and Memory Allocator for Go golang-dev · listed in Go: A Documentary
- design doc Go 1.4+ GC Plan and Roadmap listed in Go: A Documentary
Concurrent sweep and proportional sweep
- motivating issue #18155 runtime: latency in sweep assists when there's no garbage referenced by 5 of this thread's commits
- motivating issue #11911 runtime: unbounded heap growth with concurrent GC referenced by 2 of this thread's commits
Concurrent mark: write barriers and the dev.garbage collector
- design doc Go 1.4+ GC Plan and Roadmap listed in Go: A Documentary
- discussion Sub-millisecond GC pauses golang-dev
- talk Go GC: Solving the Latency Problem. GopherCon 2015. Jul 8, 2015. listed in Go: A Documentary
- background Rick Hudson. Getting to Go: The Journey of Go's Garbage Collector. 12 July 2018. listed in Go: A Documentary
- background Edsger W. Dijkstra, Leslie Lamport, A. J. Martin, C. S. Scholten, and E. F. M. Steffens. 1978. On-the-fly garbage collection: An exercise in cooperation. Commun. ACM 21, 11 (November 1978), 966–975. listed in Go: A Documentary
Decentralized GC state machine and mark termination simplification
- design doc Proposal: Decentralized GC coordination Austin Clements, 2015-10-25 · listed in Go: A Documentary
- tracking issue #11970 runtime: replace GC coordinator with state machine referenced by 6 of this thread's commits
- design doc Proposal: Simplify mark termination and eliminate mark 2 Austin Clements, 2018-08-09 · linked from #26903
- proposal #26903 runtime: simplify mark termination and eliminate mark 2 referenced by 14 of this thread's commits
- motivating issue #12041 runtime: redesign GC synchronization referenced by 2 of this thread's commits
GC pacer: trigger controller, assists and background utilisation
- design doc Go 1.5 concurrent garbage collector pacing listed in Go: A Documentary
- discussion Proposal: Garbage collector pacing golang-dev · listed in Go: A Documentary
- design doc Proposal: Separate soft and hard heap size goal Austin Clements, 2017-10-31 · listed in Go: A Documentary
- motivating issue #14951 runtime: mutator assists are over-aggressive, especially at high GOGC referenced by 3 of this thread's commits
- proposal #44167 proposal: runtime: GC pacer redesign referenced by 8 of this thread's commits
- design doc GC Pacer Redesign Michael Knyszek · linked from #44167
- tracking issue #42430 runtime: GC pacer problems meta-issue listed in Go: A Documentary
Stack scanning: conservative, precise by frames, stack barriers, hybrid barrier, async safe points
- design doc Precise stack roots listed in Go: A Documentary
- discussion Precise garbage collection of stack roots golang-dev · listed in Go: A Documentary
- design doc GC scanning of stacks listed in Go: A Documentary
- tracking issue #17503 runtime: eliminate stack rescanning referenced by 4 of this thread's commits
- design doc Proposal: Eliminate STW stack re-scanning Austin Clements, Rick Hudson, 2016-10-21 · linked from #17503
- design doc Proposal: Concurrent stack re-scanning Austin Clements, Rick Hudson, 2016-10-18 · listed in Go: A Documentary
Hybrid write barrier and buffered write barrier
- design doc Proposal: Eliminate STW stack re-scanning Austin Clements, Rick Hudson, 2016-10-21 · linked from #17503
- tracking issue #17503 runtime: eliminate stack rescanning referenced by 6 of this thread's commits
- tracking issue #22460 runtime: optimize write barrier referenced by 8 of this thread's commits
- background T. Yuasa. 1990. Real-time garbage collection on general-purpose machines. J. Syst. Softw. 11, 3 (March 1990), 181-198. listed in Go: A Documentary
Allocating from mark bits: allocBits, freeindex and ctz
- design doc Proposal: Dense mark bits and sweep-free allocation Austin Clements, 2015-09-30 · listed in Go: A Documentary
- tracking issue #12800 runtime: replace free list with direct bitmap allocation listed in Go: A Documentary
Size classes, tiny allocator and mcache/mcentral
- motivating issue #8885 runtime: consider adding 24-byte size class referenced by 1 of this thread's commits
- background Sanjay Ghemawat, Paul Menage. TCMalloc : Thread-Caching Malloc. Google Inc., 2009 listed in Go: A Documentary
The bitmap page allocator
- design doc Proposal: Scaling the Go page allocator Michael Knyszek, Austin Clements, 2019-10-18 · linked from #35112
- tracking issue #35112 runtime: make the page allocator scale referenced by 14 of this thread's commits
- talk Evolving the Go Memory Manager's RAM and CPU Efficiency. Nov 11, 2020 listed in Go: A Documentary
Scavenger: returning memory to the OS
- design doc Proposal: Smarter Scavenging Michael Knyszek · golang/proposal
- tracking issue #30333 runtime: smarter scavenging referenced by 7 of this thread's commits
- motivating issue #35788 runtime: scavenger not as effective as in previous releases referenced by 3 of this thread's commits
- motivating issue #34048 runtime: scavenger pacing fails to account for fragmentation referenced by 1 of this thread's commits
- motivating issue #32012 runtime: background scavenger is overzealous with small heaps referenced by 1 of this thread's commits
Heap address space: contiguous arena to sparse arenas
- motivating issue #10460 runtime: 512GB memory limitation referenced by 6 of this thread's commits
Memory statistics and accounting
- design doc Proposal: API for unstable runtime metrics Michael Knyszek · listed in Go: A Documentary
- design doc Go runtime stats
- motivating issue #16843 runtime: mechanism for monitoring heap size listed in Go: A Documentary
GC pacer redesign
- proposal #44167 proposal: runtime: GC pacer redesign referenced by 10 of this thread's commits
- design doc GC Pacer Redesign Michael Knyszek · linked from #44167
- tracking issue #42430 runtime: GC pacer problems meta-issue listed in Go: A Documentary
Soft memory limit and GC CPU limiter
- proposal #48409 runtime/debug: soft memory limit referenced by 11 of this thread's commits
- design doc Proposal: Soft memory limit Michael Knyszek · linked from #48409
- proposal #44309 proposal: runtime/debug: user-configurable memory target linked from #48409
- design doc User-configurable memory target Michael Knyszek · listed in Go: A Documentary
- background Memory Limits for Go (Public)
Green Tea: span-based marking with vector scan kernels
- tracking issue #73581 runtime: green tea garbage collector referenced by 12 of this thread's commits
- background Michael Knyszek and Austin Clements. The Green Tea Garbage Collector. October 29, 2025. (experimental in Go 1.25, default in Go 1.26) listed in Go: A Documentary
mallocgc decomposition and size-specialized malloc
- tracking issue #79286 runtime: sizespecializedmalloc experiment referenced by 13 of this thread's commits
Scavenger redesign
- proposal #48409 runtime/debug: soft memory limit referenced by 2 of this thread's commits
- design doc Proposal: Soft memory limit Michael Knyszek · linked from #48409
Transparent huge page management
- design doc A more hugepage-aware Go heap Michael Knyszek, Michael Pratt · golang/proposal
- tracking issue #59960 runtime: improve heap hugepage utilization referenced by 2 of this thread's commits
Finalizers, runtime.AddCleanup and the cleanup queue
- proposal #67535 runtime: add AddCleanup referenced by 3 of this thread's commits
- proposal #71825 runtime: allow cleanups to run concurrently referenced by 2 of this thread's commits
Weak pointers and the unique package
- proposal #67552 weak: new package providing weak pointers referenced by 1 of this thread's commits
- proposal #62483 unique: new package with unique.Handle referenced by 2 of this thread's commits
- motivating issue #43615 proposal: container: add weak reference maps listed in Go: A Documentary
Object pinning (runtime.Pinner)
- proposal #46787 runtime: provide Pinner API for object pinning referenced by 3 of this thread's commits
- motivating issue #40431 proposal: runtime.Pin() to protect against hypothetical moving GC in the future linked from #46787
Memory arenas experiment
- proposal #51317 proposal: arena: new package providing memory arenas referenced by 5 of this thread's commits
- design doc Memory regions golang/proposal
- discussion memory regions
runtime.freegc: compiler-directed explicit freeing
- tracking issue #74299 runtime, cmd/compile: add runtime.freegc and runtime.freegcTracked to reduce GC work (GOEXPERIMENT=runtimefreegc) referenced by 5 of this thread's commits
- design doc Directly freeing user memory to reduce GC work cited in this thread's commits
- discussion a safe free of memory proposal, runtime.FreeMemory() golang-nuts · linked from #74299
Mark worker scheduling and GC work queues
- motivating issue #44163 runtime: remove idle GC workers for the 2-minute GC cycle referenced by 2 of this thread's commits
- motivating issue #37116 runtime: 10ms-26ms latency from GC in go1.14rc1, possibly due to 'GC (idle)' work referenced by 1 of this thread's commits
Allocation publication, zeroing and preemptibility
- motivating issue #31222 runtime: long pauses STW (sweep termination) on massive block allocation referenced by 1 of this thread's commits
- motivating issue #69327 runtime: non-preemptible zeroing in clear, append, bytes.growSlice, etc referenced by 1 of this thread's commits
Sweeper termination and pacing
- motivating issue #45315 runtime: runtime.GC can return without finishing sweep referenced by 1 of this thread's commits
Heap base address randomization
- motivating issue #27583 runtime: feature request: Support for ASLR with the heap referenced by 1 of this thread's commits
- discussion Secure Go binaries golang-nuts · linked from #27583
Scheduler and concurrency
The G-M-P scheduler: from global-lock M:N to per-P run queues, spinning Ms and work stealing
- design doc Scalable Go Scheduler Design Doc listed in Go: A Documentary
- talk Go scheduler: Implementing language with lightweight concurrency. Oct 14, 2019. listed in Go: A Documentary
- background Ian Lance Taylor. How does the golang scheduler work? July 16, 2016. listed in Go: A Documentary
- background Robert D. Blumofe and Charles E. Leiserson. 1999. Scheduling multithreaded computations by work stealing. J. ACM 46, 5 (September 1999), 720-748. listed in Go: A Documentary
- motivating issue #43997 runtime: non-spinning Ms spin uselessly when work exists referenced by 6 of this thread's commits
- motivating issue #28808 runtime: scheduler work stealing slow for high GOMAXPROCS referenced by 2 of this thread's commits
- motivating issue #18237 runtime: scheduler is slow when goroutines are frequently woken referenced by 2 of this thread's commits
- design doc NUMA-aware scheduler for Go linked from #28808
Preemption: cooperative stack-check preemption (1.2) to signal-based asynchronous preemption (1.14)
- design doc Go Preemptive Scheduler Design Doc listed in Go: A Documentary
- design doc Proposal: Non-cooperative goroutine preemption Austin Clements, 2019-01-18 · linked from #24543
- proposal #24543 runtime: non-cooperative goroutine preemption referenced by 7 of this thread's commits
- motivating issue #10958 runtime: tight loops should be preemptible referenced by 8 of this thread's commits
- motivating issue #543 runtime: preemptive scheduling referenced by 4 of this thread's commits
- talk Pardon the Interruption: Loop Preemption in Go 1.14. Nov 12, 2020. listed in Go: A Documentary
- tracking issue #36365 runtime: clean up async preemption loose ends listed in Go: A Documentary
Timers: timerproc goroutine → per-bucket heaps → timers on Ps
- tracking issue #6239 runtime: make timers faster referenced by 11 of this thread's commits
- motivating issue #15133 runtime: timer doesn't scale on multi-CPU systems with a lot of timers referenced by 1 of this thread's commits
- motivating issue #27707 time: excessive CPU usage when using Ticker and Sleep referenced by 25 of this thread's commits
- motivating issue #38860 runtime: CPU bound goroutines cause unnecessary timer latency referenced by 2 of this thread's commits
- discussion Periodic task when time.Ticker and time.Sleep are pretty expensive golang-nuts · linked from #27707
Channels and select
- design doc Go channels on steroids listed in Go: A Documentary
- discussion update on "lock-free channels" golang-dev · listed in Go: A Documentary
- tracking issue #8899 runtime: lock-free channels listed in Go: A Documentary
- motivating issue #40410 runtime: trim unnecessary fields from scase referenced by 3 of this thread's commits
sync.Mutex, RWMutex, WaitGroup, Cond, Once
- proposal #13086 runtime: fall back to fair locks after repeated sleep-acquire failures referenced by 1 of this thread's commits
sync.Pool
- proposal #4720 sync: add Pool type referenced by 1 of this thread's commits
- discussion gc-aware pool draining policy golang-dev · linked from #22950
- motivating issue #22950 sync: avoid clearing the full Pool on every GC referenced by 4 of this thread's commits
- motivating issue #8979 sync: Pool does not release memory on GC referenced by 1 of this thread's commits
- motivating issue #22331 runtime: clearpools causes excessive STW1 time referenced by 3 of this thread's commits
sync.Map, atomic.Value and sync/atomic
- talk Lightning Talk: An overview of sync.Map. GopherCon 2017. Jul 24, 2017. listed in Go: A Documentary
- discussion Atomic pointer operations and unsafe golang-dev · listed in Go: A Documentary
- motivating issue #21031 sync: reduce pointer overhead in Map listed in Go: A Documentary
- motivating issue #21032 sync: reduce (*Map).Load penalty for Stores with new keys listed in Go: A Documentary
- motivating issue #21035 sync: reduce contention between Map operations with new-but-disjoint keys listed in Go: A Documentary
- motivating issue #599 cmd/compile: make 64-bit fields 64-bit aligned on 32-bit systems referenced by 1 of this thread's commits
- discussion align 64-bit integers on 32-bit platforms golang-dev · linked from #599
Runtime lock ranking (static lock order checking)
- tracking issue #40677 runtime: lock held checking referenced by 3 of this thread's commits
Runtime from C to Go: scheduler, channels, semaphores, timers, netpoll
- design doc dev.cc branch plan cited in this thread's commits
- talk Go from C to Go. GopherCon 2014. May 18, 2014 listed in Go: A Documentary
Goroutine and M lifecycle: caches, ids, LockOSThread, Goexit, cgo extra Ms, deadlock detection
- motivating issue #21827 runtime: big performance penalty with runtime.LockOSThread referenced by 1 of this thread's commits
- proposal #20395 runtime: terminate locked OS thread if its goroutine exits referenced by 1 of this thread's commits
- proposal #20458 proposal: runtime: pair LockOSThread, UnlockOSThread calls referenced by 1 of this thread's commits
- discussion Why there is a so great performance penalty when the usage combines LockOSThread and channel? golang-nuts · linked from #21827
Scheduler diagnostics: schedtrace, GODEBUG, execution tracer, block/mutex profiles
- design doc Go Execution Tracer listed in Go: A Documentary
Fast random numbers for the scheduler
- motivating issue #21806 runtime: select is not fair referenced by 2 of this thread's commits
GOMAXPROCS, thread and resource limits
- design doc Go 1.5 GOMAXPROCS Default cited in this thread's commits
Timer rewrite: per-P timer heap, timer.lock, and GC-able synchronous timer channels
- proposal #37196 time: make Timer/Ticker channels not receivable with old values after Stop or Reset returns referenced by 1 of this thread's commits
- proposal #61542 time: stop requiring Timer/Ticker.Stop for prompt GC referenced by 1 of this thread's commits
- motivating issue #8898 runtime: special case timer channels referenced by 1 of this thread's commits
Runtime mutex: tri-state futex/sema locks → "spinbit" mutex
- design doc Proposal: Improve scalability of runtime.lock2 Rhys Hiltner, 2024-10-16 · golang/proposal
- tracking issue #68578 runtime: improve scaling of lock2 referenced by 5 of this thread's commits
- motivating issue #66999 runtime: correct attribution of internal mutex contention referenced by 10 of this thread's commits
Contended runtime-lock profiling (mutex profile for runtime-internal locks)
- motivating issue #57071 runtime/metrics: add a way to measure runtime-internal lock contention referenced by 3 of this thread's commits
- motivating issue #49881 runtime/metrics: add contention metrics referenced by 3 of this thread's commits
- proposal #61015 runtime: change mutex profile to scale contention by number of blocked goroutines referenced by 1 of this thread's commits
Scheduler core: spinning Ms, work conservation, stealing, STW interaction
- tracking issue #51071 runtime: investigate possible Go scheduler improvements inspired by Linux Kernel's CFS listed in Go: A Documentary
- motivating issue #65694 runtime: stronger affinity between G ↔ P ↔ M ↔ CPU? referenced by 3 of this thread's commits
- motivating issue #44313 runtime: stopped Ms can't become dedicated or fractional GC workers referenced by 1 of this thread's commits
- tracking issue #81657 runtime: speed up GC phase transitions referenced by 3 of this thread's commits
- motivating issue #32113 runtime: optimization to reduce P churn listed in Go: A Documentary
Syscall path: eliminating _Psyscall, _Gdeadextra, and goroutine states
- tracking issue #51087 runtime: clean up system call code listed in Go: A Documentary
GOMAXPROCS container awareness and dynamic updates
- proposal #73193 runtime: CPU limit-aware GOMAXPROCS default referenced by 5 of this thread's commits
- motivating issue #33803 runtime: make `GOMAXPROCS` cfs-aware on `GOOS=linux` linked from #73193
- discussion runtime: Setting GOMAXPROCS in over-scheduled Contanier Environments golang-nuts · linked from #73193
- design doc Go 1.5 GOMAXPROCS Default linked from #73193
- discussion Concurrency and task scheduler scalability golang-nuts · linked from #73193
testing/synctest bubbles
- proposal #67434 testing/synctest: new package for testing concurrent code referenced by 7 of this thread's commits
- proposal #69687 testing/synctest: experimental package for testing concurrent code referenced by 2 of this thread's commits
Coroutines (iter.Pull runtime support)
- design doc Coroutines for Go listed in Go: A Documentary
- proposal #61897 iter: new package for iterators referenced by 1 of this thread's commits
Asynchronous preemption: extended register state
- talk Pardon the Interruption: Loop Preemption in Go 1.14. Nov 12, 2020. listed in Go: A Documentary
- tracking issue #36365 runtime: clean up async preemption loose ends listed in Go: A Documentary
sync package API evolution
- proposal #45435 sync: add Mutex.TryLock referenced by 2 of this thread's commits
- proposal #63796 sync: add WaitGroup.Go referenced by 2 of this thread's commits
- proposal #56102 sync: add OnceFunc, OnceValue, OnceValues referenced by 1 of this thread's commits
- proposal #51972 sync: add new Map methods CompareAndSwap, CompareAndDelete, Swap referenced by 1 of this thread's commits
- proposal #61696 sync: add Map.Clear method referenced by 1 of this thread's commits
sync/atomic and runtime atomics
- proposal #50860 sync/atomic: add typed atomic values referenced by 1 of this thread's commits
- tracking issue #53821 runtime: convert atomic values to runtime/internal/atomic types referenced by 10 of this thread's commits
- proposal #50859 doc: update Go memory model linked from #50860
- discussion Updating the Go memory model listed in Go: A Documentary
- proposal #61395 sync/atomic: add OR/AND operators for unsigned types referenced by 1 of this thread's commits
- motivating issue #8739 runtime,sync/atomic: unify API for runtime/internal/atomic and sync/atomic listed in Go: A Documentary
Runtime lock ranking
- tracking issue #40677 runtime: lock held checking listed in Go: A Documentary
- tracking issue #53789 runtime: express lock rank graph as a DAG like go/build/deps_test.go referenced by 5 of this thread's commits
Goroutine lifecycle and identity
- proposal #74609 runtime/pprof,runtime: new goroutine leak profile referenced by 2 of this thread's commits
- design doc Proposal: Goroutine leak detection via garbage collection Georgian-Vlad Saioc, Milind Chabbi, 14 Aug 2025 · linked from #74609
- proposal #38651 runtime: add 'created by goroutine number' to stack traces referenced by 1 of this thread's commits
- motivating issue #13759 proposal: Add a Partial Deadlock Detector For Go linked from #74609
Data structures and type metadata
Hash map core: from the first hashmap.c to the 8-entry bucket design
- talk Inside the Map Implementation. GopherCon 2016. Jul 12, 2016. listed in Go: A Documentary
- tracking issue #3885 runtime: profile and tune map code referenced by 2 of this thread's commits
Hash functions and algorithm tables: memhash, AES hash, fallback hash
- discussion Design discuss: Switch hashmap implementation to SipHash-2-4 golang-dev
- motivating issue #25237 runtime: opportunistically rotate map key seed referenced by 2 of this thread's commits
- motivating issue #2630 runtime: hash function should be randomized to prevent DOS attacks referenced by 1 of this thread's commits
Runtime type descriptors: layout, shrinking and name encoding
- tracking issue #6853 all: binaries too big and growing referenced by 13 of this thread's commits
Interface values, itabs and type assertions
- proposal #14874 proposal: cmd/compile: compiler-emitted itab symbols referenced by 2 of this thread's commits
- motivating issue #20505 runtime: need a better itab table referenced by 2 of this thread's commits
Register ABI support in reflect and runtime assembly (Go 1.17)
- tracking issue #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 8 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
C-to-Go conversion of runtime data-structure code
- design doc dev.cc branch plan cited in this thread's commits
internal/reflectlite and checkptr
- proposal #22218 proposal: add GOEXPERIMENT=checkptr referenced by 3 of this thread's commits
- discussion Dynamic unsafe pointer checking available at master golang-dev · linked from #34964
Swiss-table maps (GOEXPERIMENT=swissmap → only implementation)
- tracking issue #54766 runtime: use SwissTable referenced by 26 of this thread's commits
Interface conversion: itabs, type switch and assertion caches
- talk Interface Internals. GopherCon 2024 listed in Go: A Documentary
Register ABI completion for reflect, memmove/memclr and bytealg across architectures
- tracking issue #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 9 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
Slice growth, string building and allocation-free bytes/strings helpers
- discussion slices grow at 25% after 1024 but why 1024? golang-nuts · cited in this thread's commits
Runtime randomness: fastrand, chacha8rand and math/rand/v2
- proposal #61716 math/rand/v2: revised API for math/rand referenced by 1 of this thread's commits
- discussion math/rand/v2: a new API for math/rand and a first v2 for std linked from #61716
iter.Pull and range-over-func iterator types
- proposal #61897 iter: new package for iterators referenced by 2 of this thread's commits
- discussion user-defined iteration using range over func values listed in Go: A Documentary
- background Coroutines for Go listed in Go: A Documentary
Diagnostics and knobs
Execution tracer (trace v1): events, per-goroutine sequencing, annotations
- design doc Go Execution Tracer linked from #16619
CPU profiler and runtime/pprof writers (legacy format to compressed protobuf)
- proposal #16093 runtime/pprof: generate profiles in gzipped proto format referenced by 5 of this thread's commits
Profile labels
- design doc Proposal: Support for pprof profiler labels Michael Matloob, 15 May 2017 (to reflect actual implementation) · linked from #17280
- proposal #17280 pprof: add support for profiler labels referenced by 1 of this thread's commits
runtime/metrics
- design doc Proposal: API for unstable runtime metrics Michael Knyszek · linked from #37112
- proposal #37112 runtime: API for unstable metrics referenced by 7 of this thread's commits
The new execution tracer (trace v2): generations, per-M buffers, new parser
- design doc Execution tracer overhaul linked from #60773
- proposal #60773 runtime/trace: execution tracer overhaul referenced by 10 of this thread's commits
- tracking issue #66703 runtime/trace: set the v2 tracer as the default tracer referenced by 2 of this thread's commits
- background Go Execution Tracer linked from #60773
Mutex and block profiles, including runtime-internal lock contention
- motivating issue #57071 runtime/metrics: add a way to measure runtime-internal lock contention referenced by 2 of this thread's commits
- proposal #61015 runtime: change mutex profile to scale contention by number of blocked goroutines referenced by 1 of this thread's commits
- tracking issue #66999 runtime: correct attribution of internal mutex contention referenced by 5 of this thread's commits
Flight recorder and trace subscribers
- proposal #63185 runtime/trace: flight recording referenced by 1 of this thread's commits
CPU profiling, goroutine profiling, pprof labels and the protobuf writer
- proposal #76349 runtime: add runtime/pprof goroutine labels to tracebacks referenced by 1 of this thread's commits
Goroutine leak profile (GC-based leak detection)
- design doc Proposal: Goroutine leak detection via garbage collection Georgian-Vlad Saioc, Milind Chabbi, 14 Aug 2025 · linked from #74609
- proposal #74609 runtime/pprof,runtime: new goroutine leak profile referenced by 4 of this thread's commits
- tracking issue #75280 runtime/pprof,runtime: add new goroutine leak profile as a GOEXPERIMENT linked from #74609
runtime/metrics and MemStats
- design doc Proposal: API for unstable runtime metrics Michael Knyszek · listed in Go: A Documentary
- proposal #15490 runtime/metrics: add goroutine state counts, total goroutines created, total threads referenced by 3 of this thread's commits
- proposal #47216 runtime/metrics: add GOMAXPROCS, NumCgoCall, GC CPU time referenced by 3 of this thread's commits
- proposal #56857 runtime/metrics: add /gc/heap/live:bytes referenced by 8 of this thread's commits
Coverage redesign: runtime/coverage, internal/coverage, covdata
- design doc Proposal: extend code coverage testing to include applications Than McIntosh, 2022-03-02 · golang/proposal
- proposal #51430 cmd/cover: extend coverage testing to include applications referenced by 11 of this thread's commits
Race detector, ASan, MSan and Valgrind integration
- proposal #44853 runtime: enable address sanitizer in Go referenced by 2 of this thread's commits
- discussion Enable address sanitizer in Go golang-dev · linked from #44853
- tracking issue #64611 all: add internal/asan and internal/msan packages referenced by 3 of this thread's commits
Crash output, runtime/debug, BuildInfo and debuglog
- proposal #42888 runtime/debug: add SetCrashOutput(file *os.File) referenced by 4 of this thread's commits
- proposal #37475 cmd/go: stamp git/vcs current HEAD hash/commit hash/dirty bit in binaries referenced by 3 of this thread's commits
- proposal #67182 runtime/debug: add SetCrashOutput options referenced by 2 of this thread's commits
OS layer, stacks and panics
Segmented stacks to contiguous (copied) stacks
- design doc Contiguous stacks listed in Go: A Documentary
Goroutine preemption (stackguard0, 10 ms and GC preemption)
- design doc Go Preemptive Scheduler Design Doc listed in Go: A Documentary
- motivating issue #543 runtime: preemptive scheduling referenced by 2 of this thread's commits
C-to-Go conversion of the runtime's OS, arch and signal layers ([dev.cc])
- design doc dev.cc branch plan cited in this thread's commits
Goroutine stack growth, shrinking, GC stack barriers and stack objects
- design doc Proposal: Eliminate STW stack re-scanning Austin Clements, Rick Hudson, 2016-10-21 · linked from #17503
- tracking issue #17503 runtime: eliminate stack rescanning referenced by 2 of this thread's commits
- design doc Starting stack size linked from #18138
- motivating issue #12967 runtime: shrinkstack during mark termination significantly increases GC STW time referenced by 4 of this thread's commits
- design doc GC scanning of stacks listed in Go: A Documentary
Defer, panic, recover and Goexit (runtime side)
- design doc Proposal: Low-cost defers through inline code, and extra funcdata to manage the panic case Dan Scales, Keith Randall, and Austin Clements, 2019-09-23 · linked from #34481
- design doc #34481 cmd/compile, runtime: a design for low-cost defers via inline code referenced by 2 of this thread's commits
- motivating issue #14939 runtime: defer is slow referenced by 4 of this thread's commits
- talk Implementing Faster Defers. Nov 11, 2020 listed in Go: A Documentary
Asynchronous preemption: signal plumbing, injected calls and per-arch support
- design doc Proposal: Non-cooperative goroutine preemption Austin Clements, 2019-01-18 · linked from #24543
- proposal #24543 runtime: non-cooperative goroutine preemption referenced by 7 of this thread's commits
- motivating issue #10958 runtime: tight loops should be preemptible referenced by 7 of this thread's commits
- talk Pardon the Interruption: Loop Preemption in Go 1.14. Nov 12, 2020. listed in Go: A Documentary
- tracking issue #36365 runtime: clean up async preemption loose ends referenced by 1 of this thread's commits
cgo runtime support: pointer checks, callbacks, extra Ms, C-to-Go call path
- design doc Proposal: Rules for passing pointers between Go and C Ian Lance Taylor, October, 2015 · linked from #12416
- proposal #12416 cmd/cgo: specify rules for passing pointers between Go and C referenced by 2 of this thread's commits
Shared-library and buildmode entry points (c-archive, c-shared, plugin, shared)
- discussion Proposal: Shared libraries in Go, take 2 (+linux/amd64 implementation) golang-nuts
- discussion Re: [PATCH] RFC: go shared libraries support (Linux/x64) golang-nuts
vDSO, time sources and process-wide randomness
- design doc Proposal: Monotonic Elapsed Time Measurements in Go Russ Cox, January 26, 2017<br> · cited in this thread's commits
- proposal #12914 time: use monotonic clock to measure elapsed time referenced by 1 of this thread's commits
Darwin and OpenBSD move to libc; Solaris and AIX libcall; syscall wrapper layer
- tracking issue #36435 all: stop using non-libc system calls on OpenBSD referenced by 17 of this thread's commits
- motivating issue #17490 cmd/link: use libsystem_kernel.dylib or libSystem.dylib for syscalls on macOS referenced by 9 of this thread's commits
CPU feature detection (internal/cpu), auxv parsing and GODEBUG=cpu.*
- proposal #15403 internal/cpu: new package to expose processor capabilities referenced by 3 of this thread's commits
- proposal #27218 runtime: document (and support) cpu options in GODEBUG referenced by 3 of this thread's commits
Assembly-level runtime entry points: memequal/cmp/IndexByte, hashing, atomics and ABI wrappers
- design doc Proposal: Create an undefined internal calling convention Austin Clements, 2019-01-14 · linked from #31230
Debugger function calls and conservative preemption frames
- motivating issue #21678 runtime: provide a mechanism for debuggers to execute a function in the program being debugged referenced by 1 of this thread's commits
Plan 9 and NaCl ports
- proposal #30439 all: remove nacl port referenced by 2 of this thread's commits
Unwinder: gentraceback → unwinder iterator, inline unwinder, pcvalue cache
- tracking issue #54466 runtime: rewrite gentraceback as an iterator API referenced by 16 of this thread's commits
Frame pointers: explicit NOFRAME, FP maintenance and FP unwinding
- motivating issue #16638 runtime: use frame pointers for callers referenced by 2 of this thread's commits
- tracking issue #58378 runtime: support unwinding logical cgo stack transitions using frame pointers referenced by 4 of this thread's commits
runtime/secret and data-independent timing (DIT)
- proposal #21865 runtime/secret: add new package referenced by 2 of this thread's commits
- proposal #66450 crypto/subtle: add WithDataIndependentTiming referenced by 2 of this thread's commits
vDSO, vgetrandom and fast clocks
- motivating issue #69577 crypto/rand: use new Linux vDSO referenced by 2 of this thread's commits
Syscall layer: AllThreadsSyscall, internal/runtime/syscall, libc and Windows SyscallN
- tracking issue #51087 runtime: clean up system call code referenced by 8 of this thread's commits
CPU feature detection, GOAMD64 checks and cpu GODEBUG options
- proposal #45453 all: add GOAMD64 environment variable referenced by 2 of this thread's commits
- proposal #60905 all: add GOARM64=v8.1 and so on referenced by 2 of this thread's commits
Compiler frontend
Escape analysis and heap allocation
- background Go Escape Analysis Flaws listed in Go: A Documentary
The C-to-Go translation of the compiler (cmd/gc → cmd/internal/gc → cmd/compile/internal/gc)
- design doc Go 1.3+ Compiler Overhaul listed in Go: A Documentary
- design doc Go 1.5 Bootstrap Plan listed in Go: A Documentary
- design doc dev.cc branch plan cited in this thread's commits
- talk The move from C to Go in the toolchain. GopherFest 2015. Jun 10, 2015. listed in Go: A Documentary
Binary export data and the object-file split
- tracking issue #13241 cmd/compile: switch to new export format referenced by 2 of this thread's commits
Escape analysis and stack allocation
- background Go Escape Analysis Flaws listed in Go: A Documentary
Type aliases (the => experiment and type A = B)
- design doc Proposal: Type Aliases Russ Cox, Robert Griesemer, December 16, 2016 · linked from #18130
- proposal #18130 all: support gradual code repair while moving a type between packages referenced by 7 of this thread's commits
- design doc Proposal: Alias declarations for Go Robert Griesemer & Rob Pike, July 18, 2016 · linked from #16339
- proposal #16339 Proposal: Alias declarations for Go referenced by 3 of this thread's commits
- talk Lightning Talk: Alias Declarations for Gom: A proposal. GopherCon 2016. Oct 9, 2016. listed in Go: A Documentary
- tracking issue #17487 cmd/compile: support alias referenced by 2 of this thread's commits
- background Russ Cox. Codebase Refactoring (with help from Go). listed in Go: A Documentary
Compiler data structures: Node, Nodes, Type, and the types package
- tracking issue #14473 cmd/compile: investigate replacing NodeList with slice referenced by 12 of this thread's commits
- discussion Reducing gc peak memory use golang-dev · linked from #14473
Compiler performance, formatting and concurrency
- tracking issue #15756 cmd/compile: parallelize compilation referenced by 5 of this thread's commits
Generics bring-up in the compiler (dev.typeparams): parser, -G, types2, irgen, first stenciling
- proposal #43651 spec: add generic programming using type parameters listed in Go: A Documentary
- design doc Type Parameters Proposal listed in Go: A Documentary
- design doc Generics implementation - Stenciling listed in Go: A Documentary
- design doc Generics implementation - Dictionaries listed in Go: A Documentary
- design doc Generics implementation - GC Shape Stenciling listed in Go: A Documentary
- discussion Implementing Generics golang-dev · listed in Go: A Documentary
Constants: Go 2 number literals, evconst, untyped conversion and go/constant
- design doc Proposal: Go 2 Number Literal Changes linked from #12711
- proposal #19308 proposal: spec: binary integer literals referenced by 2 of this thread's commits
- proposal #28493 proposal: permit blank (_) separator in integer number literals referenced by 3 of this thread's commits
- proposal #29008 proposal: Go 2: hexadecimal floats referenced by 2 of this thread's commits
- proposal #12711 proposal: different octal base literal representation referenced by 3 of this thread's commits
- proposal #19113 proposal: spec: allow signed shift counts referenced by 2 of this thread's commits
- design doc Proposal: Permit Signed Integers as Shift Counts for Go 2 listed in Go: A Documentary
Language version gating (-lang) and language changes implemented in the frontend
- proposal #28221 cmd/go, cmd/compile: record language version to support language transitions referenced by 1 of this thread's commits
- design doc Proposal: Go 2 transition Ian Lance Taylor · linked from #28221
- tracking issue #31793 go/types, types2: provide configuration support for different language versions referenced by 3 of this thread's commits
Package initialization order, static initialisation and init functions
- motivating issue #22326 cmd/compile: incorrect package initialization order for spec example referenced by 3 of this thread's commits
Inlining-related frontend work: export of bodies, type switches, closures, devirtualization
- proposal #19348 cmd/compile: enable mid-stack inlining referenced by 1 of this thread's commits
- design doc Proposal: Mid-stack inlining in the Go compiler David Lazar, Austin Clements, 2017-03-10 · linked from #19348
checkptr instrumentation and compiler debugging flags
- proposal #22218 proposal: add GOEXPERIMENT=checkptr referenced by 2 of this thread's commits
- tracking issue #34972 all: get standard library building with -d=checkptr referenced by 3 of this thread's commits
- motivating issue #34964 cmd/compile: enable -d=checkptr as part of -race and/or -msan? referenced by 2 of this thread's commits
- discussion Dynamic unsafe pointer checking available at master golang-dev · linked from #34964
Register-ABI plumbing in the frontend
- tracking issue #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 10 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
- proposal #18597 proposal: cmd/compile: define register-based calling convention linked from #27539
- discussion Bug in new amd64 ABI golang-dev · linked from #40724
Bringing up generics in types2 (type-parameter operands, core/structural types, tparam-as-interface)
- proposal #70128 spec: remove notion of core types referenced by 6 of this thread's commits
- proposal #60994 proposal: go/types: add func CommonUnderlying(Type) Type, (formerly CoreType) linked from #70128
- design doc Type Parameters Proposal listed in Go: A Documentary
Type sets, union terms, interfaces and constraint satisfaction
- proposal #52509 proposal: spec: allow interface types to instantiate `comparable` type parameters referenced by 3 of this thread's commits
- proposal #56548 spec: allow basic interface types to instantiate comparable type parameters referenced by 2 of this thread's commits
- proposal #45346 spec: generics: use type sets to remove type keyword in constraints referenced by 1 of this thread's commits
- motivating issue #50646 spec: document/explain which interfaces implement `comparable` referenced by 2 of this thread's commits
- motivating issue #51257 spec: `any` no longer implements `comparable` referenced by 1 of this thread's commits
- design doc Type Parameters Proposal linked from #51257
Instantiation, Named types, Context deduplication and lazy expansion
- tracking issue #52728 go/types: guarantee that a finite number of distinct instances are reachable via the API referenced by 6 of this thread's commits
- proposal #47916 go/types: additions to support type parameters referenced by 2 of this thread's commits
- design doc Additions to go/types to support type parameters Rob Findley, Robert Griesemer, 2021-08-17 · golang/proposal
Type inference and unification
- proposal #58650 spec: a general approach to type inference linked from #58671
- proposal #59338 spec: infer type arguments from assignments of generic functions (reverse type inference) referenced by 6 of this thread's commits
- proposal #58671 spec: type inference should be more lenient about untyped numeric literals referenced by 2 of this thread's commits
- proposal #60353 spec: when unifying against interface types, consider common methods referenced by 2 of this thread's commits
- motivating issue #57192 spec: interfaces that have different-size method sets never unify (but they possibly could) referenced by 3 of this thread's commits
Generic type aliases and Alias type nodes
- proposal #46477 spec: generics: permit type parameters on aliases referenced by 5 of this thread's commits
- tracking issue #67547 go/types, types2: audit type assertions for potential Alias bugs referenced by 8 of this thread's commits
- proposal #76472 remove gotypesalias, asynctimerchan GODEBUG flag for 1.27 referenced by 1 of this thread's commits
- tracking issue #65294 x/tools: get tests passing with GODEBUG=gotypesalias=1 referenced by 2 of this thread's commits
Per-file language versions and version gating
- proposal #57001 extended forwards compatibility for Go referenced by 1 of this thread's commits
- design doc Proposal: Extended forwards compatibility in Go linked from #57001
- proposal #56986 extended backwards compatibility for Go linked from #57001
- design doc Proposal: Extended backwards compatibility for Go listed in Go: A Documentary
- design doc Proposal: Go 2 transition Ian Lance Taylor · listed in Go: A Documentary
- tracking issue #63974 go/types, types2: switch to using go/version once we can use it in the compiler referenced by 2 of this thread's commits
Composite-literal type elision via target types (#12854)
- proposal #12854 spec: type inferred composite literals referenced by 6 of this thread's commits
- proposal #77245 spec: function type inference should work in all assignment contexts referenced by 1 of this thread's commits
Method receiver checking
- tracking issue #51343 go/types, types2: simplify type-checking of method receivers with type parameters referenced by 5 of this thread's commits
Error reporting: codes, messages, and sub-errors
- tracking issue #55326 go/types, types2: remove discrepancy between type-checker and compiler error messages referenced by 7 of this thread's commits
Sharing code between go/types and types2
- tracking issue #54511 types2, go/types: share tests referenced by 6 of this thread's commits
- tracking issue #69673 go/types: position-independent type checking referenced by 2 of this thread's commits
Checker performance, memory and API ergonomics
- proposal #61035 go/types, types2: fix SizesFor("gc", ...) to match actual gc behavior referenced by 2 of this thread's commits
Generics via GC-shape stenciling and runtime dictionaries
- design doc Generics implementation - GC Shape Stenciling linked from #50182
- design doc Generics implementation dictionaries Go 1.18 listed in Go: A Documentary
- design doc Generics implementation - Dictionaries listed in Go: A Documentary
- design doc Generics implementation - Stenciling listed in Go: A Documentary
- proposal #43651 spec: add generic programming using type parameters referenced by 1 of this thread's commits
- discussion Implementing Generics golang-dev · listed in Go: A Documentary
Unified IR: one serialization for noding, stenciling, inlining and export
- tracking issue #57410 cmd/compile: remove GOEXPERIMENT=nounified referenced by 5 of this thread's commits
- motivating issue #54534 cmd/compile: design doc explaining unified IR implementation listed in Go: A Documentary
- motivating issue #68778 exportdata: support type parameterized aliases referenced by 5 of this thread's commits
Old typechecker and IR node-model cleanup
- tracking issue #19683 cmd/compile: eliminate base.Pos and ir.CurFunc referenced by 9 of this thread's commits
- tracking issue #51691 cmd/compile: remove support for "broken" IR and types referenced by 10 of this thread's commits
Generic methods (type parameters on methods)
- proposal #77273 spec: generic methods for Go referenced by 6 of this thread's commits
- proposal #75526 proposal: allow type parameters on methods (generic methods) listed in Go: A Documentary
Compile-time performance, concurrency and the self-PGO'd compiler
- tracking issue #60234 cmd/compile: update compiler's PGO profile referenced by 5 of this thread's commits
- motivating issue #15734 cmd/go: build dependent packages as soon as export data is ready referenced by 3 of this thread's commits
Package paths, -p, and build-system contract
- proposal #51225 cmd/compile: require build systems to specify -importcfg referenced by 1 of this thread's commits
- tracking issue #51734 cmd/compile: cleanup code paths that aren't needed now that -p is required referenced by 7 of this thread's commits
- motivating issue #15734 cmd/go: build dependent packages as soon as export data is ready referenced by 2 of this thread's commits
Middle end and SSA optimizer
SSA backend arrival (dev.ssa): bring-up, coverage, default-on
- design doc New SSA Backend for the Go Compiler listed in Go: A Documentary
- talk Generating Better Machine Code with SSA. GopherCon 2017. Jul 24, 2017. listed in Go: A Documentary
- talk All About The Go Compiler. Jul 20, 2017. listed in Go: A Documentary
Prove pass and bounds-check elimination
- background Bounds Checking Elimination
Escape analysis (esc.c → esc.go)
- background Go Escape Analysis Flaws listed in Go: A Documentary
Write-barrier insertion: from gc to the SSA writebarrier pass
- tracking issue #17583 cmd/compile: insert write barriers in SSA referenced by 4 of this thread's commits
- motivating issue #17503 runtime: eliminate stack rescanning referenced by 1 of this thread's commits
- design doc Proposal: Eliminate STW stack re-scanning Austin Clements, Rick Hudson, 2016-10-21 · linked from #17503
Interface conversions, type assertions and devirtualization
- motivating issue #19361 cmd/compile: Devirtualize calls when concrete type behind interface is statically known referenced by 2 of this thread's commits
Preparing the backend for concurrent compilation (Go 1.9)
- tracking issue #15756 cmd/compile: parallelize compilation referenced by 11 of this thread's commits
Lowering of copies, strings and slices; intrinsics
- proposal #18616 math/bits: an integer bit twiddling library referenced by 3 of this thread's commits
Prove pass: unsatisfiability, partial-order facts, loop bounds-check elimination
- background Bounds Checking Elimination
Escape analysis: the esc.go fixes, the escape.go rewrite, and the move to package escape
- tracking issue #23109 cmd/compile: rewrite escape analysis referenced by 3 of this thread's commits
- tracking issue #33981 cmd/compile: improve escape analysis fidelity referenced by 4 of this thread's commits
- background Go Escape Analysis Flaws listed in Go: A Documentary
Inlining: budget, mid-stack inlining, closures, and what became inlinable
- proposal #19348 cmd/compile: enable mid-stack inlining referenced by 2 of this thread's commits
- design doc Proposal: Mid-stack inlining in the Go compiler David Lazar, Austin Clements, 2017-03-10 · linked from #19348
- talk talk: Mid-stack inlining in the Go compiler (external) linked from #19348
- motivating issue #15561 cmd/compile: support inlining non-escaping closures referenced by 3 of this thread's commits
Open-coded defers and defer lowering
- design doc Proposal: Low-cost defers through inline code, and extra funcdata to manage the panic case Dan Scales, Keith Randall, and Austin Clements, 2019-09-23 · linked from #34481
- proposal #34481 cmd/compile, runtime: a design for low-cost defers via inline code referenced by 1 of this thread's commits
- motivating issue #14939 runtime: defer is slow referenced by 2 of this thread's commits
- motivating issue #6980 cmd/compile: allocate some defers in stack frames referenced by 1 of this thread's commits
- talk Implementing Faster Defers. Nov 11, 2020 listed in Go: A Documentary
Late call expansion and the SSA side of the register ABI
- tracking issue #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 14 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
- proposal #18597 proposal: cmd/compile: define register-based calling convention linked from #40724
- discussion Bug in new amd64 ABI golang-dev · linked from #40724
Rewrite-rule generator, typed Aux/AuxInt, and rule syntax
- motivating issue #30810 cmd/compile: rewrite rulegen to not generate plaintext Go code directly referenced by 1 of this thread's commits
Profile-guided optimization (PGO): hot-call inlining, devirtualization, profile preprocessing
- design doc Proposal: profile-guided optimization Cherry Mui, Austin Clements, Michael Pratt, 2022-09-12 · listed in Go: A Documentary
- proposal #55022 cmd/compile: profile-guided optimization referenced by 7 of this thread's commits
- design doc Proposal: Design and Implementation of Profile-Guided Optimization (PGO) for Go Raj Barik, Jin Lin, 2022-09-12 · listed in Go: A Documentary
- proposal #55025 cmd/compile: design and implementation of Profile-Guided Optimization (PGO) listed in Go: A Documentary
- tracking issue #62463 cmd/compile: PGO opportunities umbrella issue linked from #55022
- talk Michael Pratt, Boost application performance with profile guided optimization, GopherConUK 2024 listed in Go: A Documentary
- background Profile-guided optimization listed in Go: A Documentary
- background Chen, et al. AutoFDO: Automatic Feedback-Directed Optimization for Warehouse-Scale Applications. 2016. listed in Go: A Documentary
Inliner: budget, closures, and the interleaved inline/devirtualize driver
- design doc Go 1.22 inlining overhaul listed in Go: A Documentary
Allocation avoidance: stack-allocated slice backing stores and allocation-free literals
- design doc Directly freeing user memory to reduce GC work cited in this thread's commits
- proposal #74299 runtime, cmd/compile: add runtime.freegc and runtime.freegcTracked to reduce GC work (GOEXPERIMENT=runtimefreegc) referenced by 2 of this thread's commits
- tracking issue #71359 cmd/compile: avoid allocs by better tracking of literals for interface conversions and make referenced by 8 of this thread's commits
- motivating issue #8618 runtime: don't allocate for non-escaping conversions to interface{} referenced by 2 of this thread's commits
- discussion a safe free of memory proposal, runtime.FreeMemory() golang-nuts · linked from #74299
New inliner heuristics (GOEXPERIMENT=newinliner, inline/inlheur)
- design doc Go 1.22 inlining overhaul linked from #61502
- tracking issue #61502 cmd/compile: overhaul inliner referenced by 9 of this thread's commits
Prove pass and bounds-check elimination: from poset relations to a dense limit table, topo-sorted walk, and division-aware proofs
- background Bounds Checking Elimination
Known-bits pass (bitwise constant folding)
- tracking issue #78633 cmd/compile: do bitwise constant folding referenced by 11 of this thread's commits
Stack-slot merging (mergelocals)
- proposal #62737 cmd/compile: merge temporaries and named variables by GC shape referenced by 5 of this thread's commits
Switch lowering: jump tables, type-switch caches, and switch lookup tables
- motivating issue #5496 cmd/compile: compile dense, pure-integer "switch" into jump table referenced by 2 of this thread's commits
- motivating issue #34381 cmd/compile: use hashing for switch statements referenced by 2 of this thread's commits
- discussion Jump Tables in 6a golang-nuts · linked from #5496
Loop variable per-iteration semantics (loopvar)
- proposal #60078 spec: less error-prone loop variable scoping listed in Go: A Documentary
- design doc Proposal: Less Error-Prone Loop Variable Scoping golang/proposal
- tracking issue #57969 cmd/compile: add GOEXPERIMENT=loopvar referenced by 1 of this thread's commits
- discussion redefining for loop variable semantics listed in Go: A Documentary
- motivating issue #20733 proposal: spec: redefine range loop variables in each iteration listed in Go: A Documentary
testing.B.Loop support in the compiler (bloop)
- proposal #61515 testing: add testing.B.Loop for iteration referenced by 3 of this thread's commits
- tracking issue #73137 testing: implement b.Loop keepalive without preventing inlining, which can lead to heap allocs referenced by 3 of this thread's commits
- discussion Go 1.24 BLooper golang-nuts · linked from #73137
- proposal #61179 proposal: testing: add Keep, to force evaluation in benchmarks linked from #61515
Range-loop and range-over-func lowering in walk
- proposal #61405 spec: add range over int, range over func linked from #61717
- tracking issue #61717 cmd/compile: add new range behind GOEXPERIMENT=range referenced by 1 of this thread's commits
- discussion user-defined iteration using range over func values listed in Go: A Documentary
Branch-free lowering: CondSelect-into-math and ARM64 CCMP
- motivating issue #71268 cmd/compile: opt: generate conditional comparisons for || and && conditions referenced by 2 of this thread's commits
Constant-folding loads from type metadata and dictionaries
- motivating issue #75203 cmd/compile: intrinsify reflect.TypeFor referenced by 2 of this thread's commits
SSA package decomposition and compiler-infrastructure refactor
- tracking issue #80409 cmd/compile/internal/ssa: split into subpackages referenced by 14 of this thread's commits
Backends and assemblers
Stack frame layout, prologues, stack split and frame pointers
- motivating issue #10587 cmd/gc: stack split check does not follow static branch prediction rules of modern CPUs referenced by 3 of this thread's commits
- discussion get rid of stack check prolog golang-nuts · linked from #10587
liblink: a shared assembler/linker library
- design doc Go 1.3 Linker Overhaul cited in this thread's commits
The Plan 9 C compilers (cc, 5c/6c/8c) in the Go toolchain
- design doc Go 1.3+ Compiler Overhaul listed in Go: A Documentary
- design doc dev.cc branch plan listed in Go: A Documentary
- design doc Go 1.5 Bootstrap Plan listed in Go: A Documentary
Assemblers: 5a/6a/8a/9a and the Go cmd/asm
- talk The Design of the Go Assembler. GopherCon 2016. Aug 18, 2016. listed in Go: A Documentary
- design doc Go 1.3 Linker Overhaul cited in this thread's commits
C→Go translation of the toolchain (liblink, assemblers, compilers; dev.cc)
- design doc dev.cc branch plan listed in Go: A Documentary
- design doc Go 1.3+ Compiler Overhaul listed in Go: A Documentary
- design doc Go 1.5 Bootstrap Plan listed in Go: A Documentary
- talk The move from C to Go in the toolchain. GopherFest 2015. Jun 10, 2015. listed in Go: A Documentary
- design doc Go 1.3 Linker Overhaul listed in Go: A Documentary
Native Client (nacl/386, nacl/amd64p32, nacl/arm) and amd64p32 in the toolchain
- design doc Go 1.3 Native Client Support cited in this thread's commits
SSA backend bring-up on amd64 (dev.ssa merge)
- design doc New SSA Backend for the Go Compiler listed in Go: A Documentary
- talk Generating Better Machine Code with SSA. GopherCon 2017. Jul 24, 2017. listed in Go: A Documentary
Multi-architecture SSA ports: ARM, 386, ARM64 (dev.ssa)
- tracking issue #15365 cmd/compile: ARM SSA support referenced by 19 of this thread's commits
- tracking issue #16358 cmd/compile: 386 SSA support referenced by 2 of this thread's commits
- design doc New SSA Backend for the Go Compiler listed in Go: A Documentary
Multi-architecture SSA ports: PPC64, MIPS64, MIPS32, s390x
- tracking issue #16010 cmd/compile: PowerPC (LE) SSA support referenced by 8 of this thread's commits
- tracking issue #16359 cmd/compile: SSA backend for MIPS64 referenced by 3 of this thread's commits
WebAssembly backend
- design doc WebAssembly architecture for Go cited in this thread's commits
- tracking issue #18892 all: WebAssembly ("wasm") support referenced by 2 of this thread's commits
Removal of the legacy backend and decoupling gc from the code generators
- tracking issue #16357 cmd/compile: delete the legacy compiler back end referenced by 4 of this thread's commits
- tracking issue #15756 cmd/compile: parallelize compilation referenced by 7 of this thread's commits
Liveness, stack maps, safepoints and write barriers
- proposal #24543 runtime: non-cooperative goroutine preemption referenced by 12 of this thread's commits
- design doc Proposal: Non-cooperative goroutine preemption Austin Clements, 2019-01-18 · linked from #24543
- motivating issue #22460 runtime: optimize write barrier referenced by 9 of this thread's commits
DWARF variable locations, statement positions and inline info from the backend
- proposal #22080 cmd/compile: generated DWARF inlining info referenced by 1 of this thread's commits
- design doc Proposal: emit DWARF inlining info in the Go compiler Than McIntosh, 2017-10-23 · listed in Go: A Documentary
Intrinsics for atomics, math/bits, math and runtime helpers
- proposal #18616 math/bits: an integer bit twiddling library referenced by 5 of this thread's commits
- proposal #17895 spec: allow the use of fused multiply-add floating point instructions referenced by 2 of this thread's commits
- discussion Fused multiply-add? golang-dev · linked from #17895
cmd/internal/obj: Prog/LSym refactoring, concurrent backend and object-writing
- tracking issue #15756 cmd/compile: parallelize compilation referenced by 21 of this thread's commits
ARM64 assembler
- discussion [RFC] Go assembly for ARM64 golang-dev · cited in this thread's commits
Register-based ABI (ABIInternal) and ABI wrappers
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
- proposal #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 35 of this thread's commits
- design doc Proposal: Create an undefined internal calling convention Austin Clements, 2019-01-14 · linked from #31230
- proposal #27539 proposal: runtime: make the ABI undefined as a step toward changing it referenced by 6 of this thread's commits
- proposal #18597 proposal: cmd/compile: define register-based calling convention linked from #27539
- tracking issue #44816 cmd/compile: register ABI bringup testcase failures (tracking issue) referenced by 4 of this thread's commits
- discussion Bug in new amd64 ABI golang-dev · linked from #40724
- background Go internal ABI specification. listed in Go: A Documentary
Late call expansion, AuxCall and the expand_calls pass
- proposal #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 6 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
riscv64 port: assembler and compiler
- tracking issue #27532 all: port to RISC-V referenced by 21 of this thread's commits
WebAssembly backend
- design doc WebAssembly architecture for Go listed in Go: A Documentary
math/bits, atomic and runtime intrinsics (cross-architecture)
- proposal #25819 math: add guaranteed FMA referenced by 3 of this thread's commits
Safepoints, unsafe points and stack maps for asynchronous preemption
- proposal #24543 runtime: non-cooperative goroutine preemption referenced by 1 of this thread's commits
- design doc Proposal: Non-cooperative goroutine preemption Austin Clements, 2019-01-18 · linked from #24543
- tracking issue #36365 runtime: clean up async preemption loose ends referenced by 5 of this thread's commits
- motivating issue #10958 runtime: tight loops should be preemptible referenced by 1 of this thread's commits
New object file format and content-addressable symbols (dev.link, assembler side)
- design doc (PUBLIC) Building a better Go linker listed in Go: A Documentary
Register-based calling convention (ABIInternal) ports beyond amd64
- proposal #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 16 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
amd64 code generation and GOAMD64 microarchitecture levels
- proposal #45453 all: add GOAMD64 environment variable referenced by 3 of this thread's commits
arm64 code generation and assembler
- tracking issue #44734 cmd/asm: refactor the framework of the arm64 assembler referenced by 2 of this thread's commits
- discussion x86 asm source of truth golang-dev · linked from #44734
riscv64 compiler and assembler (RVA profiles, vector, compressed)
- proposal #71105 cmd/compile: change GORISCV64=rva20u64 to include compressed instructions referenced by 7 of this thread's commits
- proposal #61476 all: add GORISCV64 environment variable linked from #71105
loong64 backend and assembler
- proposal #46229 all: port to linux/loong64 referenced by 8 of this thread's commits
PPC64 / Power10 backend (GOPPC64, prefixed instructions, PC-relative code)
- tracking issue #44549 cmd/asm,cmd/compile,cmd/link,cmd/objdump: ppc64 ISA 3.1 support referenced by 4 of this thread's commits
Stack slot merging, liveness and stack maps
- motivating issue #62737 cmd/compile: merge temporaries and named variables by GC shape referenced by 4 of this thread's commits
Atomics and memory-ordering code generation
- proposal #61395 sync/atomic: add OR/AND operators for unsigned types referenced by 2 of this thread's commits
WebAssembly backend
- proposal #42372 proposal: cmd/compile: go:wasmexport directive linked from #65199
- design doc Proposal: go:wasmexport directive Francesco Guardiani, 2020-12-17 · linked from #65199
- background go:wasmexport - implementation notes linked from #65199
- background WebAssembly architecture for Go linked from #63131
s390x, MIPS, 386 and 32-bit ARM backends
- proposal #60072 cmd/go: add GOMIPS32, GOMIPS64 ISA levels (iii, r1, r2, r5, r6) referenced by 2 of this thread's commits
Backend hooks for GOEXPERIMENT=simd (amd64 AVX-512, arm64 SVE, wasm)
- proposal #73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT linked from #79781
- proposal #79781 simd/archsimd: support ARM64 SVE SIMD intrinsics under a GOEXPERIMENT referenced by 1 of this thread's commits
SSA package split into subpackages (issue #80409)
- tracking issue #80409 cmd/compile/internal/ssa: split into subpackages referenced by 5 of this thread's commits
- motivating issue #20104 cmd/compile: move arch-specific rewrite rules and ops into arch-specific packages referenced by 1 of this thread's commits
Compiler SIMD type system, ABI and register-allocation support
- proposal #73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT linked from #79781
- proposal #78902 simd: architecture and vector-size agnostic SIMD intrinsics under a GOEXPERIMENT linked from #79781
simdgen: the instruction-table-driven generator
- tracking issue #81819 simd: unify API generation around executable spec referenced by 1 of this thread's commits
- proposal #78902 simd: architecture and vector-size agnostic SIMD intrinsics under a GOEXPERIMENT linked from #81819
AMD64 archsimd API: AVX, AVX2 and AVX-512 operations
- proposal #73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT linked from #76473
- proposal #78979 proposal: simd/archsimd: enable AMD64 architecture-specific SIMD by default referenced by 3 of this thread's commits
- proposal #76473 simd: rename low-level SIMD package to simd/archsimd (GOEXPERIMENT) referenced by 1 of this thread's commits
- proposal #78902 simd: architecture and vector-size agnostic SIMD intrinsics under a GOEXPERIMENT linked from #78979
Mask representation, masked operations and merge peepholes
- proposal #73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT linked from #78979
dev.simd branch, GOEXPERIMENT=simd lifecycle and merges to master
- proposal #76473 simd: rename low-level SIMD package to simd/archsimd (GOEXPERIMENT) referenced by 1 of this thread's commits
- proposal #73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT linked from #76473
ARM64 SVE: scalable vectors and predicate masks
- proposal #79781 simd/archsimd: support ARM64 SVE SIMD intrinsics under a GOEXPERIMENT referenced by 18 of this thread's commits
- proposal #73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT linked from #79781
Spec-driven API generation (internal/spec, specgen, specfill)
- tracking issue #81819 simd: unify API generation around executable spec referenced by 11 of this thread's commits
- proposal #78902 simd: architecture and vector-size agnostic SIMD intrinsics under a GOEXPERIMENT linked from #81819
API shaping and renames before stabilisation
- proposal #76473 simd: rename low-level SIMD package to simd/archsimd (GOEXPERIMENT) linked from #78979
- proposal #78979 proposal: simd/archsimd: enable AMD64 architecture-specific SIMD by default referenced by 2 of this thread's commits
Linker and object files
Go symbol table, pc/line table and function metadata (gosymtab, pclntab, findfunc)
- design doc Go 1.2 Runtime Symbol Information cited in this thread's commits
- motivating issue #6853 all: binaries too big and growing referenced by 4 of this thread's commits
Dead code and data elimination
- motivating issue #6853 all: binaries too big and growing referenced by 4 of this thread's commits
External (host) linking and cgo
- design doc Go Execution Modes cited in this thread's commits
- motivating issue #4069 cmd/ld: invoke host linker for Windows cgo build referenced by 5 of this thread's commits
Build modes: -shared, c-archive, c-shared, shared, PIE, plugin
- design doc Go Execution Modes listed in Go: A Documentary
- discussion Proposal: Shared libraries in Go, take 2 (+linux/amd64 implementation) golang-nuts · cited in this thread's commits
- discussion Re: [PATCH] RFC: go shared libraries support (Linux/x64) golang-nuts · cited in this thread's commits
liblink, the object file format and the move into the compilers
- design doc Go 1.3 Linker Overhaul cited in this thread's commits
From C to Go: cmd/link
- design doc Go 1.3 Linker Overhaul cited in this thread's commits
Runtime type data, GC metadata and sections laid out by the linker
- motivating issue #6853 all: binaries too big and growing referenced by 3 of this thread's commits
New object file format and the loader (dev.link)
- design doc (PUBLIC) Building a better Go linker listed in Go: A Documentary
Wavefront conversion of linker passes to the loader; sym.Symbol removal
- design doc (PUBLIC) Building a better Go linker listed in Go: A Documentary
Linker performance and memory engineering
- design doc (PUBLIC) Building a better Go linker listed in Go: A Documentary
DWARF compression and Mach-O dsymutil combining
- tracking issue #11799 cmd/link: compress debug info referenced by 5 of this thread's commits
Symbol ABIs: stable ABI0 vs ABIInternal in the linker and object files
- proposal #27539 proposal: runtime: make the ABI undefined as a step toward changing it referenced by 4 of this thread's commits
- proposal #40724 cmd/compile: switch to a register-based calling convention for Go functions referenced by 3 of this thread's commits
- design doc Proposal: Register-based Go calling convention Austin Clements, 2020-08-10 · linked from #40724
- design doc Proposal: Create an undefined internal calling convention Austin Clements, 2019-01-14 · listed in Go: A Documentary
- proposal #18597 proposal: cmd/compile: define register-based calling convention linked from #27539
Mach-O and Darwin support
- tracking issue #38485 runtime: tracking bug for ARM-based macOS and GOOS/GOARCH values referenced by 9 of this thread's commits
PE / Windows
- tracking issue #36439 all: port to Windows/arm64 referenced by 3 of this thread's commits
AIX / XCOFF
- tracking issue #25893 all: port to AIX/ppc64 referenced by 3 of this thread's commits
WebAssembly
- design doc WebAssembly architecture for Go cited in this thread's commits
Architecture ports and trampoline insertion
- tracking issue #27532 all: port to RISC-V referenced by 2 of this thread's commits
GOEXPERIMENT plumbing and tool configuration
- proposal #42681 build: move GOEXPERIMENT knob from make.bash to cmd/go referenced by 1 of this thread's commits
Relocation-free pclntab and funcdata (offsets instead of relocations)
- tracking issue #76038 cmd/link: rearrange compiler/linker generated data for clarity referenced by 6 of this thread's commits
- background Go 1.2 Runtime Symbol Information linked from #76038
- discussion Do we document the history of .gosymtab and .gopclntab, and the differences with .symtab and .debug_line, .debug_frame? golang-nuts · linked from #76038
- discussion Presence of PCLN Table in CGo binaries golang-nuts · linked from #76038
Type, itab and typelink layout (.go.type section, relro rework)
- tracking issue #76038 cmd/link: rearrange compiler/linker generated data for clarity referenced by 2 of this thread's commits
//go:linkname restrictions and the blocklist
- tracking issue #67401 cmd/link: lock down future uses of linkname referenced by 4 of this thread's commits
DWARF 5 migration
- tracking issue #26379 cmd/compile: consider using DWARF 5 referenced by 11 of this thread's commits
Darwin split DWARF (dSYM)
- proposal #62577 cmd/link, cmd/go: emit split DWARF on darwin referenced by 4 of this thread's commits
Reproducible build IDs, buildinfo and symbol tables
- motivating issue #41004 cmd/link: add support for automatically generating .note.gnu.build-id referenced by 3 of this thread's commits
- motivating issue #68678 cmd/link: LC_UUID not generated by go linker, resulting in failure to access local network on macOS 15 referenced by 4 of this thread's commits
FIPS 140 support in the linker
- tracking issue #69536 crypto: obtain a FIPS 140-3 validation referenced by 3 of this thread's commits