Compiler Toolchain
Office Hours
- discuss/runtime-office-hours compiler & runtime office hours
- talk/runtime-office-meeting1 Go compiler & runtime office hours 2022-12-19
- talk/runtime-office-meeting2 Go compiler & runtime office hours 2023-01-19
Compiler
- code/gc0initial Ken Thompson. Go0 compiler initial version. 28 Mar 2008.
- code/6g Rob Pike. the first complete Go0 compiler. 4 Jun 2008.
- design/go12symtab Russ Cox. Go 1.2 Runtime Symbol Information. July 2013.
- design/go13compiler Russ Cox. Go 1.3+ Compiler Overhaul. December 2013
- design/go14generate Rob Pike. Go generate: A Proposal
- design/dev.cc Russ Cox. dev.cc branch plan. Nov 2014
- design/go15bootstrap Russ Cox. Go 1.5 Bootstrap Plan. January 2015.
- doc/escape-analysis Dmitry Vyukov. Go Escape Analysis Flaws. Feb 10, 2015.
- design/execmodes Ian Lance Taylor. Go Execution Modes. August, 2014 (updated January 2016)
- design/go17ssa Keith Randall. New SSA Backend for the Go Compiler. 2/10/2015.
- doc/compiler-optimization Compiler And Runtime Optimizations.
- issue/6853 all: binaries too big and growing.
- design/go19inlining David Lazar, Austin Clements. Proposal: Mid-stack inlining in the Go compiler.
- issue/19348 cmd/compile: enable mid-stack inlining.
- talk/go19inliningtalk David Lazar. Mid-stack inlining in the Go compiler
- design/go122inlining Go 1.22 inlining overhaul
- design/dwarf-inlining Than McIntosh. Proposal: emit DWARF inlining info in the Go compiler. 2017-10-23.
- issue/22080 cmd/compile: generated DWARF inlining info
- issue/23109 cmd/compile: rewrite escape analysis.
- issue/27167 cmd/compile: rename a bunch of things
- doc/renames Proposed Go 1.12 toolchain renames
- GOEXPERIMENT=checkptr
- issue/22218 proposal: add GOEXPERIMENT=checkptr
- issue/34964 cmd/compile: enable -d=checkptr as part of -race and/or -msan?
- issue/34972 all: get standard library building with -d=checkptr
- discuss/checkptr
- issue/37121 runtime: unaligned jumps causing performance regression on Intel
- issue/16798 proposal: cmd/compile: add tail call optimization for self-recursion only. (declined)
- issue/22624 proposal: Go 2: add become statement to support tail calls (declined)
- design/64align Dan Scales. Proposal: Make 64-bit fields be 64-bit aligned on 32-bit systems, add //go:packed, //go:align directives. 2020-06-08.
- issue/599 cmd/compile: make 64-bit fields 64-bit aligned on 32-bit systems
- issue/36606 proposal: cmd/compile: make 64-bit fields be 64-bit aligned on 32-bit systems, add //go:packed directive on structs
- issue/19057 proposal: runtime: add AlignedN types that can be used to increase alignment
- talk/gccgo Brief overview of gccgo, "the other" Go compiler. Aug 6, 2015.
- issue/54534 cmd/compile: design doc explaining unified IR implementation
- discuss/53060 discussion: clarify Go support policy for secondary ports
- issue/53383 clarify Go support policy for secondary ports
- Profile-guided Optimization
- paper/autofdo Chen, et al. AutoFDO: Automatic Feedback-Directed Optimization for Warehouse-Scale Applications. 2016.
- doc/pgo Profile-guided optimization
- issue/28262 cmd/compile: feedback-guided optimization
- issue/55022 proposal: cmd/compile: profile-guided optimization
- issue/55025 proposal: design and implementation of Profile-Guided Optimization (PGO)
- design/pgo Proposal: profile-guided optimization
- design/pgo-implementation Design and Implementation of Profile-Guided Optimization (PGO) for Go
- issue/62463 cmd/compile: PGO opportunities umbrella issue
- talk/pgo Michael Pratt, Boost application performance with profile guided optimization, GopherConUK 2024
- Toolchain Telemetry
- issue/58409 telemetry in the Go toolchain
- issue/58894 all: add opt-in transparent telemetry to Go toolchain
- doc/telemetry-sample The Magic of Sampling, and its Limitations
- doc/telemetry-intro Transparent Telemetry for Open-Source Projects.
- doc/telemetry-design The Design of Transparent Telemetry.
- doc/telemetry-uses Use Cases for Transparent Telemetry.
- doc/telemetry-optin Opting In to Transparent Telemetry.
- discuss/reducing-gc-peak-memory Reducing gc peak memory use (golang-dev)
- discuss/bug-in-new-amd64 Bug in new amd64 ABI (golang-dev)
- issue/51225 cmd/compile: require build systems to specify -importcfg
- issue/18616 math/bits: an integer bit twiddling library
- issue/74299 runtime, cmd/compile: add runtime.freegc and runtime.freegcTracked to reduce GC work (GOEXPERIMENT=runtimefreegc)
- issue/62737 cmd/compile: merge temporaries and named variables by GC shape
- discuss/jump-tables-in-6a Jump Tables in 6a (golang-nuts)
- issue/61515 testing: add testing.B.Loop for iteration
- discuss/go-1-24-blooper Go 1.24 BLooper (golang-nuts)
- discuss/get-rid-of-stack get rid of stack check prolog (golang-nuts)
- discuss/fused-multiply-add Fused multiply-add? (golang-dev)
- discuss/rfc-go-assembly-for [RFC] Go assembly for ARM64 (golang-dev)
- discuss/x86-asm-source-of x86 asm source of truth (golang-dev)
- issue/71105 cmd/compile: change GORISCV64=rva20u64 to include compressed instructions
- issue/61476 all: add GORISCV64 environment variable
- issue/46229 all: port to linux/loong64
- design/wasmexport Francesco Guardiani. Proposal: go:wasmexport directive. 2020-12-17.
- issue/42372 proposal: cmd/compile: go:wasmexport directive
- issue/60072 cmd/go: add GOMIPS32, GOMIPS64 ISA levels (iii, r1, r2, r5, r6)
- issue/73787 simd/archsimd: architecture-specific SIMD intrinsics under a GOEXPERIMENT
- issue/79781 simd/archsimd: support ARM64 SVE SIMD intrinsics under a GOEXPERIMENT
- issue/78979 proposal: simd/archsimd: enable AMD64 architecture-specific SIMD by default
- issue/76473 simd: rename low-level SIMD package to simd/archsimd (GOEXPERIMENT)
- issue/13241 cmd/compile: switch to new export format
- issue/14473 cmd/compile: investigate replacing NodeList with slice
- issue/15756 cmd/compile: parallelize compilation
- issue/22326 cmd/compile: incorrect package initialization order for spec example
- issue/19683 cmd/compile: eliminate base.Pos and ir.CurFunc
- issue/51691 cmd/compile: remove support for "broken" IR and types
- issue/60234 cmd/compile: update compiler's PGO profile
- issue/15734 cmd/go: build dependent packages as soon as export data is ready
- issue/51734 cmd/compile: cleanup code paths that aren't needed now that -p is required
- issue/17583 cmd/compile: insert write barriers in SSA
- issue/19361 cmd/compile: Devirtualize calls when concrete type behind interface is statically known
- issue/33981 cmd/compile: improve escape analysis fidelity
- issue/15561 cmd/compile: support inlining non-escaping closures
- issue/30810 cmd/compile: rewrite rulegen to not generate plaintext Go code directly
- issue/71359 cmd/compile: avoid allocs by better tracking of literals for interface conversions and make
- issue/8618 runtime: don't allocate for non-escaping conversions to interface{}
- issue/61502 cmd/compile: overhaul inliner
- issue/78633 cmd/compile: do bitwise constant folding
- issue/5496 cmd/compile: compile dense, pure-integer "switch" into jump table
- issue/34381 cmd/compile: use hashing for switch statements
- issue/73137 testing: implement b.Loop keepalive without preventing inlining, which can lead to heap allocs
- issue/71268 cmd/compile: opt: generate conditional comparisons for || and && conditions
- issue/75203 cmd/compile: intrinsify reflect.TypeFor
- issue/80409 cmd/compile/internal/ssa: split into subpackages
- issue/10587 cmd/gc: stack split check does not follow static branch prediction rules of modern CPUs
- issue/15365 cmd/compile: ARM SSA support
- issue/16358 cmd/compile: 386 SSA support
- issue/16010 cmd/compile: PowerPC (LE) SSA support
- issue/16359 cmd/compile: SSA backend for MIPS64
- issue/18892 all: WebAssembly ("wasm") support
- issue/16357 cmd/compile: delete the legacy compiler back end
- issue/27532 all: port to RISC-V
- issue/44734 cmd/asm: refactor the framework of the arm64 assembler
- issue/44549 cmd/asm,cmd/compile,cmd/link,cmd/objdump: ppc64 ISA 3.1 support
- issue/20104 cmd/compile: move arch-specific rewrite rules and ops into arch-specific packages
- issue/81819 simd: unify API generation around executable spec
- design/bce Bounds Checking Elimination.
- discuss/checkptr Matthew Dempsky. Dynamic unsafe pointer checking available at master. golang-dev. October 17, 2019.
- doc/pgo-preview Michael Pratt. Profile-guided optimization preview. February 8, 2023.
- doc/pgo Michael Pratt. Profile-guided optimization in Go 1.21. September 5, 2023.
- doc/gotelemetry Robert Findley. Telemetry in Go 1.23 and beyond. September 3, 2024.
- issue/67111 cmd/go: add go telemetry subcommand
- doc/allocation-optimizations Keith Randall. Allocating on the Stack. February 27, 2026.
- doc/simd-experiment David Chase and Junyang Shao. Platform-independent SIMD in Go. September 24, 2026.
- doc/archsimd Junyang Shao and David Chase. Arch-specific SIMD in Go. October 2, 2026.
- talk/jin2022 Jin Lin. Profile-Guided Optimization in the Go Compiler. Lightning talk, GopherCon 2022, Chicago. October 2022.
- talk/jin2024 Jin Lin. Automating Efficiency Improvement by Profile Guided Optimization. GopherCon 2024, Chicago. July 2024.
Linker
The Go Linker was written by Ken Thompson. Russ led a few more overhaul in Go 1.3. Austin led a rework to the linker together with Keith, Than, Cheery and many other brilliant brains, which was landed in Go 1.15 and Go 1.16.
- design/go13linker Russ Cox. Go 1.3 Linker Overhaul. Nov 2013.
- design/go116linker Austin Clements. Building a better Go linker. 2019-09-12.
- issue/52209 cmd/compile, cmd/link: generate dwarf type info in compiler
- design/go-dynamic-tls Alexander Musman. Proposal: Go general dynamic TLS. 2025-01-28.
- issue/71953 proposal: runtime: support general dynamic thread local storage model
- issue/42681 build: move GOEXPERIMENT knob from make.bash to cmd/go
- discuss/do-we-document-the Do we document the history of .gosymtab and .gopclntab, and the differences with .symtab and .debug_line, .debug_frame? (golang-nuts)
- discuss/presence-of-pcln-table Presence of PCLN Table in CGo binaries (golang-nuts)
- issue/62577 cmd/link, cmd/go: emit split DWARF on darwin
- issue/4069 cmd/ld: invoke host linker for Windows cgo build
- issue/11799 cmd/link: compress debug info
- issue/38485 runtime: tracking bug for ARM-based macOS and GOOS/GOARCH values
- issue/36439 all: port to Windows/arm64
- issue/25893 all: port to AIX/ppc64
- issue/76038 cmd/link: rearrange compiler/linker generated data for clarity
- issue/67401 cmd/link: lock down future uses of linkname
- issue/26379 cmd/compile: consider using DWARF 5
- issue/41004 cmd/link: add support for automatically generating .note.gnu.build-id
- issue/68678 cmd/link: LC_UUID not generated by go linker, resulting in failure to access local network on macOS 15
- issue/69536 crypto: obtain a FIPS 140-3 validation
Debugger
- doc/go13heapdump heapdump13
- doc/go14heapdump heapdump14
- doc/go15heapdump heapdump15 through heapdump17
- design/heap-viewer Michael Matloob. Proposal: Go Heap Dump Viewer. 20 July 2016
- issue/16410 x/tools/cmd/heapdump: create a heap dump viewer
- design/profiler-labels Michael Matloob. Proposal: Support for pprof profiler labels. May 15, 2017.
- issue/17280 pprof: add support for profiler labels
- issue/36821 proposal: runtime/pprof: add PMU-based profiles
- issue/53286 proposal: runtime/pprof: extend profile configuration to support perf events
- talk/derek2024 Derek Parker. A Decade of Debugging. GopherCon 2024, Chicago. July 2024.
Race Detector
- issue/42598 runtime: apparent false-positive race report for a buffered channel after CL 220419
- issue/44853 runtime: enable address sanitizer in Go
- discuss/enable-address-sanitizer-in Enable address sanitizer in Go (golang-dev)
- issue/64611 all: add internal/asan and internal/msan packages
Tracer
- design/go15trace Dmitry Vyukov. Go Execution Tracer. Oct 2014
- design/tracefmt nduca@, dsinclair@. Trace Event Format. October 2016.
- issue/54466 runtime: rewrite gentraceback as an iterator API
- issue/57175 runtime: diagnostics improvements tracking issue
- design/execution-tracer-overhaul Execution tracer overhaul.
- issue/60773 runtime/trace: execution tracer overhaul
- issue/63185 runtime/trace: flight recording
- issue/66703 runtime/trace: set the v2 tracer as the default tracer
- doc/execution-traces-2024 Michael Knyszek. More powerful Go execution traces. March 14, 2024.
- doc/flight-recorder Carlos Amedee and Michael Knyszek. Flight Recorder in Go 1.25. September 26, 2025.
- talk/felix2025 Felix Geisendörfer. Profiling Request Latency with Critical Path Analysis. GopherCon 2025, New York City. August 2025.
Lock Analysis
- issue/38029 x/build: linux-amd64-staticlockranking consistently failing
- cl/192704 runtime: lock operation logging support
- cl/207348 runtime: release timersLock while running timer
- cl/207846 runtime: avoid potential deadlock when tracing memory code
- cl/207619 runtime: static lock ranking for the runtime (enabled by GOEXPERIMENT)
- cl/222925 cmd/go: define a build tag for any GOEXPERIMENT which is enabled
- cl/228417 runtime: incorporate Gscan acquire/release into lock ranking order
- cl/229480 runtime: added several new lock-rank partial order edges
- cl/231463 runtime: add one extra lock ranking partial edge
- cl/233599 runtime: add a lock partial order edge (assistQueue -> mspanSpecial)
- cl/236137 runtime: add three new partial orders for lock ranking
- issue/40677 runtime: lock held checking
Builder
- design/go13nacl Russ Cox. Go 1.3 Native Client Support. October 2013.
- design/gobuilder Brad Fitzpatrick. Go Builder Plan. 2014-09-03.
- discuss/gobuilder Changing how builders run
- design/go14android David Crawshaw. Go support for Android. June 2014.
- design/go-generate Rob Pike. Go Generate. January 2014.
- issue/13560 proposal: build: define standard way to recognize machine-generated files
- discuss/generatedcode Rob Pike's Final Comments on Issue 13560
- design/goenv Russ Cox. Proposal: go command configuration file. March 1, 2019
- issue/30411 proposal: cmd/go: add go env -w to set default env vars
- design/go116build Russ Cox. Bug-resistant build constraints — Draft Design. June 30, 2020.
- issue/41184 cmd/go: continue conversion to bug-resistant //go:build constraints
- Windows
- issue/41191 toolchain directives
- discuss/win2000-golang-nuts objections to removing Go support for Windows 2000 (x86-32)?
- design/wasm Richard Musiol. WebAssembly architecture for Go. 28th February 2018.
- design/wasm2 WebAssembly assembly files
- issue/57631 build: use a zero for third digit for major release, such as 'go1.21.0'
- issue/54265 build: adopt Go 1.20 as bootstrap toolchain for Go 1.22
- issue/69315 build: adopt Go 1.24 as bootstrap toolchain for Go 1.26
- doc/rebuild Russ Cox. Perfectly Reproducible, Verified Go Toolchains. August 28, 2023.
- issue/57179 cmd/go: load $GOROOT/go.env before loading user go.env
- issue/59719 cmd/go: add GOEXPERIMENT=cacheprog to let a child process implement the internal action/output cache
- issue/64876 cmd/go: enable GOCACHEPROG by default
- issue/62067 cmd/go: go build -json
- issue/38248 cmd/compile: replace CallImport with go:wasmimport directive
- issue/58141 all: add GOOS=wasip1 GOARCH=wasm port
- doc/wasi Johan Brandhorst-Satzkorn, Julien Fabre, Damian Gryski, Evan Phoenix, and Achille Roussel. WASI support in Go. September 13, 2023.
- issue/65199 cmd/compile: add go:wasmexport directive
- design/wasmexport-notes Achille Roussel. go:wasmexport - implementation notes.
- doc/wasmexport Cherry Mui. Extensible Wasm Applications with Go. February 13, 2025.
- talk/johan2023 Johan Brandhorst-Satzkorn. Go Support for WASI/Wasm. Lightning talk, GopherCon 2023, San Diego. September 2023.
Modules
- design/go-dep Go Packaging Proposal Process
- design/go-dep2 Dependency Management Tool
- doc/go-dep Sam Boyer. The Saga of Go Dependency Management. Dec 13, 201
- talk/go-dep GopherCon 2017: Sam Boyer - The New Era of Go Package Management. Jul 24, 2017
- talk/go-dep-design dotGo 2017 - sam boyer - The Functional Design of Dep. Dec 8, 2017
- discuss/go-dep Building Predictability into Your Pipeline :: Russ Cox; Jess Frazelle, Sam Boyer, Pete Garcin. Feb 22, 2018
- design/vgo Russ Cox. Proposal: Versioned Go Modules. March 20, 2018.
- issue/24301 cmd/go: add package version support to Go toolchain
- doc/deps Russ Cox. Our Software Dependency Problem. January 23, 2019.
- doc/vgo Russ Cox. Go & Versioning
- discuss/groups-gomod go modules have landed
- discuss/go-dep-response Reddit discussion.
- doc/go-dep-response Peter Bourgon. A response about dep and vgo. 2018-07-27.
- discuss/go-dep-response2 Hacker News discussion.
- discuss/go-dep-twitter Russ Cox's Twitter Storm
- design/sumdb Russ Cox, Filippo Valsorda. Proposal: Secure the Public Go Module Ecosystem. April 24, 2019.
- issue/25530 proposal: cmd/go: secure releases with transparency log
- issue/23966 why go.mod has its own bespoke syntax?
- design/lazy-gomod Bryan C. Mills. Proposal: Lazy Module Loading. Feb 20, 2020
- issue/45713 proposal: cmd/go: add a workspace mode
- design/workspace Proposal: Multi-Module Workspaces in cmd/go
- doc/vuln Julie Qiu. Vulnerability Management for Go. September 6, 2022.
- doc/govulncheck Julie Qiu. Govulncheck v1.0.0 is released! July 13, 2023.
- discuss/60696 Michael Matloob. cmd/go: add package forwarding. June 8, 2023.
- discuss/61669 Russ Cox. gonew: templates for new modules. July 31, 2023.
- doc/gonew Cameron Balahan. Experimenting with project templates. July 31, 2023.
- issue/48429 cmd/go: track tool dependencies in go.mod
- design/x-repo-continuous-go Dmitri Shuralyov. Proposal: all, x/build/cmd/relui: automate go directive maintenance in golang.org/x repositories. August 27, 2024.
- doc/pkgsite-api Ethan Lee, Hana Kim, and Jonathan Amsterdam. Introducing the pkg.go.dev API. May 21, 2026.
gopls
- design/gopls-workspace Heschi Kreinick, Rebecca Stambler. Proposal: Multi-project gopls workspaces. Mar 9, 2020.
- doc/gopls-scalability Robert Findley and Alan Donovan. Scaling gopls for the growing Go ecosystem. September 8, 2023.
- issue/63501 x/tools/cmd/deadcode: add new command
- doc/deadcode Alan Donovan. Finding unreachable functions with deadcode. December 12, 2023.
- issue/61324 x/tools/go/analysis/checker: an importable analysis driver based on go/packages
- issue/32816 cmd/fix: automate migrations for simple deprecations
- issue/73605 cmd/fix: remove all functionality
- issue/71859 cmd/go: fix: apply fixes from modernizers, inline, and other analyzers
- doc/gofix Alan Donovan. Using go fix to modernize Go code. February 17, 2026.
- doc/inliner Alan Donovan. //go:fix inline and the source-level inliner. March 10, 2026.
- design/lsp-interactive-refactoring Hongxiang Jiang. Proposal: Language Server Protocol (LSP) Interactive Code Actions. July 16, 2026.
- doc/interactive-refactoring Hongxiang Jiang. Interactive refactoring in gopls. October 16, 2026.
Testing, x/perf
- design/subtests Marcel van Lohuizen. testing: programmatic sub-test and sub-benchmark support. September 2, 2015.
- issue/12166 proposal: testing: programmatic sub-test and sub-benchmark support
- design/gotest-bench Russ Cox, Austin Clements. Proposal: Go Benchmark Data Format. February 2016.
- issue/14313 cmd/go: decide, document standard benchmark data format
- issue/20875 testing: consider calling ReadMemStats less during benchmarking
- issue/27217 testing: tiny benchmark with StopTimer runs forever
- issue/41637 testing: benchmark iteration reports incorrectly
- issue/41641 testing: inconsistent benchmark measurements when interrupts timer
- design/gotest-json Nodir Turakulov. Proposal: -json flag in go test. 2016-09-14.
- design/testing-helper Caleb Spare. Proposal: testing: better support test helper functions with TB.Helper. 2016-12-27
- issue/4899 testing: add t.Helper to make file:line results more useful
- design/fuzzing Katie Hockman. Design Draft: First Class Fuzzing
- issue/43744 testing: benchmark unit properties
- issue/48803 all: Go compiler/runtime performance monitoring system
- issue/49121 x/perf/storage: support postgres for db
- issue/61179 proposal: testing: add identity function that forces evaluation for benchmarks
- issue/67434 proposal: testing/synctest: new package for testing concurrent code
- design/revamp-code-coverage Than McIntosh. Proposal: extend code coverage testing to include applications. 2022-03-02.
- issue/51430 cmd/cover: extend coverage testing to include applications
- doc/integration-test-coverage Than McIntosh. Code coverage for Go integration tests. March 8, 2023.
- doc/synctest Damien Neil. Testing concurrent code with testing/synctest. February 19, 2025.
- doc/testing-b-loop Junyang Shao. More predictable benchmarking with testing.B.Loop. April 2, 2025.
- issue/73567 testing/synctest: replace Run with Test
- doc/testing-time Damien Neil. Testing Time (and other asynchronicities). August 26, 2025.
- issue/71287 testing: store test artifacts