by Changkun Ou <changkun.de> (and many inputs from contributors)
This document collects many interesting (publicly observable) issues, discussions, proposals, CLs, and talks from the Go development process, which intents to offer a comprehensive reference of the Go history.
- Most of the texts are written as subjective understanding based on public sources
- Factual and typo errors may occur. Referring to the original link if some text conflicts to your understanding
- PRs are very welcome for new content submission, bug fixes, and typo fixes
- Use Issues for discussions
There are many sources for digging the documents that relate to Go's historical design, and here are some of the official sources:
- blog.golang.org
- dev.golang.org
- talks.golang.org
- golang.org/doc
- golang.org/pkg
- github.com/golang/go
- github.com/golang/proposal
- github.com/golang/go/wiki
- go-review.googlesource.com
- groups.google.com/g/golang-nuts
- groups.google.com/g/golang-dev
- groups.google.com/g/golang-tools
Go is a big project that driven by a tiny group of people and the crowd of wisdom from the language user community. Here are some core committers to the project that you might interest in follow their excellent work.
By listening to the talks held by these people, you could learn more about their oral history and fun stories behind the great work.
The Go was created by Rob, Robert, and Ken initially because Rob were suffered by the slow C++ compiling time, talked to Robert, and luckily Ken was in the next office. Later, Ian joined the project since he showed huge interests and wrote the gccgo. Rob and Ken are retired. Robert and Ian currently work on adding generics to Go. Russ is also one of the core authors of the project in the early stage. Back then, he was a newcomer at Google, and Rob invited Russ for joining the Go team since he knew Russ from way back because of the Plan 9 project. Russ did many fundamental work for the early Go compiler, runtime, as well as the leap of Go 1.5 bootstrap. Now, Russ is the tech leader of the Go team.
-
Rob Pike. Website, Blog, GitHub, Twitter, Reddit. (Retired)
- talk/rob2007 Advanced Topics in Programming Languages: Concurrency/message passing Newsqueak. May 9, 2007
- talk/rob2009 The Go Programming Language. Nov 27, 2009.
- talk/rob2010a Go Programming. Google I/O 2010. May 20, 2010
- talk/rob2010b Origins of Go Concurrency style. Emerging Languages Camp 2010. July 21, 2010.
- talk/rob2010c Public Static Void. OSCON 2010. Jul 22, 2010.
- talk/rob2010d Another Go at Language Design. Aug 27, 2010
- talk/rob2011a Parallelism and Concurrency in Programming Languages. Feb 17, 2011.
- talk/rob2011b Google Go: Concurrency, Type System, Memory Management and GC. Feb 25, 2011.
- talk/rob2011c Lexical Scanning in Go. Aug 30, 2011
- talk/rob2012a Go Concurrency Patterns. Google I/O 2012. Jul 2, 2012.
- talk/rob2012b Why Learn Go?. Sep 12, 2012.
- talk/rob2013a The path to Go 1. Mar 14, 2013.
- talk/rob2013b Go at Google. Apr 13, 2013.
- talk/rob2013c Go Programming with Rob Pike and Andrew Gerrand. Aug 14, 2013.
- talk/rob2013d Concurrency Is Not Parallelism. Oct 20, 2013
- talk/rob2014a Hello Gophers! Gophercon Opening Keynote. GopherCon 2014. Apr 24, 2014
- talk/rob2014b Implementing a bignum calculator. Sydney Go meeup. Nov, 19 2014.
- talk/rob2015a The move from C to Go in the toolchain. GopherFest 2015. Jun 10, 2015.
- talk/rob2015b Go Proverbs. Gopherfest. Nov 18, 2015
- talk/rob2015c Simplicity is Complicated. dotGo 2015. Dec 2, 2015
- talk/rob2016a The Design of the Go Assembler. GopherCon 2016. Aug 18, 2016.
- talk/rob2016b Stacks of Tokens: A study in interfaces. Sydney Go Meetup. September 2016.
- talk/rob2017 Upspin. Gopherfest 2017. Jun 22, 2017.
- talk/rob2018a The History of Unix. Nov 7, 2018.
- talk/rob2018b Go 2 Draft Specifications. Sydney Golang Meetup. Nov 13, 2018
- talk/rob2019 Creating the Go programming language with Rob Pike & Robert Griesemer. Sep 10, 2019.
- talk/rob2020 A Rob Pike Interview. (Date Unclear) 2020.
-
Robert Griesemer. GitHub, Twitter
- talk/robert2012a E2E: Erik Meijer and Robert Griesemer. Going Go. Lang.NEXT. 2012.
- talk/robert2012b Go In Three Easy Pieces. Mar 19, 2012.
- talk/robert2012c Lang.NEXT 2012 Expert Panel: Native Languages. Apr 11, 2012.
- talk/robert2015 The Evolution of Go. GopherCon 2015. Jul 28, 2015.
- talk/robert2016a Lightning Talk: Alias Declarations for Gom: A proposal. GopherCon 2016. Oct 9, 2016.
- talk/robert2016b Prototype your design!. dotGo 2016. Nov 29, 2016.
- talk/robert2017 Opening Keynote: Exporting Go. GopherCon SG 2017. May 29, 2017.
- talk/robert2017 A brief overview of Go. Aug 28. 2017.
- talk/robert2019 Go is 10! Now What?. Gopherpalooza 2019. Dec 2, 2019.
- talk/robert2020 The latest on Generics with Robert Griesemer and Ian Lance Taylor. Jul 21, 2020.
-
Ken Thompson (Retired)
- talk/ken1982a The UNIX System: Making Computers More Productive. 1982.
- talk/ken1982b UNIX: Making Computers Easier To Use.
- talk/ken1982c Ken Thompson and Dennis Ritchie Explain UNIX (Bell Labs).
- talk/ken1983 Ken Thompson and Dennis Ritchie. National Medal of Technology Awards. 1996.
- talk/ken2013 Systems Architecture, Design, Engineering, and Verification. Jan 17, 2013.
- talk/ken2019a The Thompson and Ritchie Story. Feb 18, 2019.
- talk/ken2019b Brian Kernighan interviews Ken Thompson. VCF East 2019. May 4, 2019.
-
Ian Lance Taylor. Website, GitHub, Quora
- talk/ian2007 GCC: Current Topics and Future Directions. February 27, 2007.
- talk/ian2018 Transition to Go 2. Gopherpalooza 2018. Oct 24, 2018
- talk/ian2019a Generics in Go. GopherCon 2019. Aug 27, 2019
- talk/ian2019b Generics in Go. Aug 27, 2019.
- talk/ian2020 Go with Ian Lance Taylor. CppCast. Aug 9, 2020.
-
Russ Cox. Website, Blog, GitHub, Twitter, Reddit
- talk/russ2009 The Go Programming Language Promo. Nov 10, 2009.
- talk/russ2012 A Tour of the Go Programming Language. Jun 24, 2012.
- talk/russ2012b A Tour of the Acme Editor. Sep 17, 2012.
- talk/russ2014 Go from C to Go. GopherCon 2014. May 18, 2014
- talk/russ2015 Go, Open Source, Community. GopherCon 2015. Jul 28, 2015.
- talk/russ2016 Codebase Refactoring (with help from Go). Dec 5, 2016.
- talk/russ2017 The Future of Go. GopherCon 2017. Jul 24, 2017.
- talk/russ2018a Dependencies and the future of Go. Apr 19, 2018.
- talk/russ2018b Go and WebAssembly (Wasm). Apr 19, 2018
- talk/russ2018c Opening keynote: Go with Versions. GopherConSG 2018. May 5, 2018
- talk/russ2018d Go 2 Drafts Announcement. Aug 28, 2018.
- talk/russ2019 On the Path to Go 2. GopherCon 2019. Aug 27, 2019.
- talk/russ2020a
go:build
design draft. Jun 30, 2020. - talk/russ2020b
io/fs
draft design. Jul 21, 2020. - talk/russ2020c
//go:embed
draft design. Jul 21, 2020.
Dmitry is not from the Go team but on the dynamic testing tools team from Google. He wrote the scalable goroutine scheduler, many other performance improvements, synchronization primitives, race detector, and blocking profiler that related to the Go runtime. Austin was an intern at Google who worked on the Go project in the early days while pursuing a Ph. D. Later, he joined the Go team after his academic career and work together with Rick for the Go's concurrent GC. He also worked on the current preemptive scheduler and linker. Now, he is leading the Compiler/Runtime team for Go. Keith and David together focus on the Go's compiler backend, notably the current SSA backend. Michael is a recent newcomer to the Go team, his work mainly in the runtime memory system such as the refactoring of memory allocator and runtime metrics.
-
Dmitry Vyukov (Дмитрий Вьюков). Website, GitHub, Twitter
- talk/dmitry2014 Writing a functional, reliable and fast web application in Go. Sep 25, 2014.
- talk/dmitry2015a Chat with Dmitry Vyukov on go-fuzz, golang and IT security. Jul 3, 2015
- talk/dmitry2015b Go Dynamic Tools. GopherCon 2015. Jul 28, 2015.
- talk/dmitry2016 Dmitry Vyukov Interview. Jun 1, 2016.
- talk/dmitry2017 Fuzzing: The New Unit Testing. C++ Russia 2017. May 10, 2017.
- talk/dmitry2018a Fuzzing: new unit testing. GopherCon Russia. Apr 2, 2018.
- talk/dmitry2018b Syzbot and the Tale of Thousand Kernel Bugs. Sep 1, 2018.
- talk/dmitry2019 Go scheduler: Implementing language with lightweight concurrency. Oct 14, 2019.
- talk/dmitry2020 syzkaller: Adventures in Continuous Coverage-guided Kernel Fuzzing. BlueHat IL 2020. Feb 13, 2020.
-
Richard L. Hudson. GitHub (Retired)
- talk/rick2015 Go GC: Solving the Latency Problem. GopherCon 2015. Jul 8, 2015.
- talk/rick2015b Rick Hudson on Garbage Collection in Go. Dec 21, 2015
-
Keith Randall. GitHub
- talk/keith2016 Inside the Map Implementation. GopherCon 2016. Jul 12, 2016.
- talk/keith2017 Generating Better Machine Code with SSA. GopherCon 2017. Jul 24, 2017.
-
David Chase. Website, GitHub, Twitter, Scholar
- talk/david2017 All About The Go Compiler. Jul 20, 2017.
-
Dan Scales.
-
Than McIntosh. GitHub
-
Cherry Zhang. GitHub
-
Brad Fitzpatrick. Website, GitHub, Twitter
- talk/brad2010 Writing zippy Android apps. Google I/O 2010. May 27, 2010.
- talk/brad2011 Palestra Brad FitzPatrick. Perl Workshop. Parte 1. May 12, 2011.
- talk/brad2012 Behind the Scenes at LiveJournal: Scaling Storytime. Brad Fitzpatrick. May 21, 2012.
- talk/brad2013a Software I'm excited about. dotScale 2013. Jul 30, 2013.
- talk/brad2013b LiveJournal's Moscow office. Brad Fitzpatrick. Dec 15, 2013.
- talk/brad2014a Camlistore. Go meetup. Jan 2014.
- talk/brad2014b Camlistore & The Standard Library. GopherCon 2014. May 18, 2014.
- talk/brad2014c The State of the Gopher. dotGo 2014. October 10, 2014.
- talk/brad2014d Interview. dotGo 2014. Nov 6, 2014.
- talk/brad2015a Hacking with Andrew and Brad: an HTTP/2 client. Feb 25, 2015.
- talk/brad2015b HTTP/2 and Go. London Go Gathering 2015. Mar 4, 2015.
- talk/brad2015c HTTP/2 for Go. Go Devroom FOSDEM 2015. Mar 4, 2015.
- talk/brad2015d The state of the Gopher. Munich Gophers. Apr 18, 2015
- talk/brad2015e The Go Language. devoxx poland 2015. June, 2015
- talk/brad2015f Hacking with Andrew and Brad: tip.golang.org. Jan 8, 2015.
- talk/brad2015g Lightning Talk: HTTP/2 in Go. GopherCon 2015. Aug 19, 2015.
- talk/brad2015h Profiling & Optimizing in Go. Aug 27, 2015.
- talk/brad2016a Introducing Go 1.6: asymptotically approaching boring. Gophercon India 2016. Mar 29, 2016.
- talk/brad2016b Lightning Talk: My video & security system. GopherCon 2016. July, 2016.
- talk/brad2016c Go 1.7. Seattle Go Meetup. Aug 25, 2016.
- talk/brad2016d The Go Open Source Project's Innards. GothamGo 2016. Dec 15, 2016.
- talk/brad2017 Half my life spent in open source. May 19, 2017.
- talk/brad2018a Go: looking back and looking forward. Apr 2, 2018.
- talk/brad2018b Go 1 11 and beyond. Aug 26, 2018.
- talk/brad2018c Lightning Talk: The nuclear option, go test -run=InQemu. GopherCon 2018. Sep 11, 2018.
- talk/brad2019 Brad Fitzpatrick likes Go better than C, C++, Rust, Perl, Python, Ruby, JavaScript and Java. Nov 28, 2019.
-
Bryan C. Mills. GitHub
- talk/bryan2017 Lightning Talk: An overview of sync.Map. GopherCon 2017. Jul 24, 2017.
- talk/bryan2018 Rethinking Classical Concurrency Patterns. GopherCon 2018. Sep 14, 2018
-
Nigel Tao. GitHub, Twitter
-
Filippo Valsorda. GitHub,
more people and talks should be added...
- talk/goteam2012 Meet the Go Team. Google I/O 2012. Jul 2, 2012.
- talk/goteam2013 Fireside Chat with the Go Team. Google I/O 2013. May 18, 2013.
- talk/goteam2014 Inside the Gophers Studio with Blake Mizerany. GopherCon 2014. May 21, 2014
- talk/goteam2019 Meet the Authors: Go Language. Cloud Next '19. Apr 10, 2019.
A timeline helps you identify the point in time about a document that is reflected in Go versions.
Version | Release Date |
---|---|
Go 1 | 2012.03.28 |
Go 1.1 | 2013.05.13 |
Go 1.2 | 2013.12.01 |
Go 1.3 | 2014.06.18 |
Go 1.4 | 2014.12.10 |
Go 1.5 | 2015.08.19 |
Go 1.6 | 2016.02.17 |
Go 1.7 | 2016.08.15 |
Go 1.8 | 2017.02.16 |
Go 1.9 | 2017.08.24 |
Go 1.10 | 2018.02.16 |
Go 1.11 | 2018.08.24 |
Go 1.12 | 2019.02.25 |
Go 1.13 | 2019.09.03 |
Go 1.14 | 2020.02.25 |
Go 1.15 | 2020.08.11 |
The historical release notes may helpful for general information:
- doc/go1release Go Release History
- doc/go1prerelease Pre-Go 1 Release History
- doc/go0release Weekly Release History (Before Go 1)
- design/go0initial Rob Pike, Robert Griesemer, Ken Thompson. The Go Annotated Specification. Mar 3, 2008.
- design/go0semicolon Rob Pike. Semicolons in Go. Dec 10, 2009.
- design/go11func Russ Cox. Go 1.1 Function Calls. February 2013
- design/go11return Russ Cox. Go “Return at End of Function” Requirements. March 2013
- design/go12nil Russ Cox. Go 1.2 Field Selectors and Nil Checks. July 2013.
- doc/go13todo Go 1.3 “To Do” List
- doc/goatgoogle Rob Pike. Go at Google - Language Semantics. October 25, 2012.
- doc/makego Andrew Gerrand. How Go was Made. 9 July 2015.
- discuss/go1preview Russ Cox. Go 1 Preview.
- design/overlapping-interfaces Robert Griesemer. Proposal: Permit embedding of interfaces with overlapping method sets. 2019-10-16
- issue/6977 spec: allow embedding overlapping interfaces
- design/struct-conversion Robert Griesemer. Proposal: Ignore tags in struct type conversions. June 16, 2016.
- issue/16085 Proposal: Ignore tags in struct type conversions
- design/go2trans Ian Lance Taylor. Proposal: Go 2 transition. October 15, 2018
- design/signed-int-shift Robert Griesemer. Proposal: Permit Signed Integers as Shift Counts for Go 2. January 17, 2019
- issue/19113 proposal: spec: allow signed shift counts
- design/number-literal Russ Cox, Robert Griesemer. Proposal: Go 2 Number Literal Changes. March 6, 2019
- issue/12711 proposal: different octal base literal representation
- issue/19308 proposal: spec: binary integer literals
- issue/28493 proposal: permit blank (_) separator in integer number literals
- issue/29008 proposal: Go 2: hexadecimal floats
- issue/33502 proposal: review meeting minutes
- issue/33892 proposal: Go 2 review meeting minutes
- design/read-only-slices Brad Fitzpatrick. Read-only slices. May 13, 2013
- design/read-only-slices-russ Russ Cox. Evaluation of read-only slices. May 2013.
- design/go12slice Russ Cox. Go Slice with Cap. June 2013.
- design/multidim-slice Brendan Tracey. Proposal: Multi-dimensional slices. November 17th, 2016.
- design/go14internal Russ Cox. Go 1.4 “Internal” Packages. June 2014.
- design/go14nopkg Russ Cox. Go 1.4 src/pkg → src. June 2014.
- design/go14customimport Russ Cox. Go 1.4 Custom Import Path Checking. June 2014.
- design/go15vendor Russ Cox. Go 1.5 Vendor Experiment. July 2015
- design/go17binarypkg Russ Cox. Proposal: Binary-Only Packages. April 24, 2016
- issue/2775 cmd/go: work when binaries are available but source is missing
- design/type-alias Russ Cox, Robert Griesemer. Proposal: Type Aliases. December 16, 2016
- talk/type-alias GopherCon 2016 - Lightning Talk: Robert Griesemer - Alias Declarations for Go, A proposal. Oct 9, 2016
- issue/16339 proposal: Alias declarations for Go
- issue/18130 all: support gradual code repair while moving a type between packages
- talk/refactor-video Russ Cox. Codebase Refactoring (with help from Go). GothamGo 2016. November 18, 2016.
- doc/refactor Russ Cox. Codebase Refactoring (with help from Go).
- design/open-defer Dan Scales, Keith Randall, and Austin Clements. Proposal: Low-cost defers through inline code, and extra funcdata to manage the panic case. 2019-09-23
- issue/6980 cmd/compile: allocate some defers in stack frames
- issue/14939 runtime: defer is slow #14939
- Unsolved
defer recover()
edge cases.- issue/10458 spec: panicking corner-case semantics
- issue/23531 spec: recover() in nested defer
- issue/26275 runtime: document the behaviour of Caller and Callers when used in deferred functions
- issue/34530 spec: clarify when calling recover stops a panic
- cl/189377 spec: specify the behavior of recover and recursive panics in more detail
- doc/err2011 Andrew Gerrand. Error handling in Go. July 2011.
- doc/err-values Rob Pike. Errors are values. January 2015.
- doc/err-philosophy Dave Cheney. My philosophy for error handling. April 2016.
- doc/err-gracefully Dave Cheney. Don’t just check errors, handle them gracefully. April 2016.
- doc/err-stacktrace Dave Cheney. Stack traces and the errors package. June, 12 2016.
- doc/err-upspin Rob Pike. Error handling in Upspin. December 06, 2017.
- doc/err-work Damien Neil and Jonathan Amsterdam. Working with Errors in Go 1.13. October 17, 2019.
- design/err-handling-overview Russ Cox. Error Handling — Problem Overview.
- doc/err-value-faq Jonathan Amsterdam and Bryan C. Mills. Error Values: Frequently Asked Questions. August 2019.
- design/err-handle-check Marcel van Lohuizen. Error Handling — Draft Design. August 27, 2018.
- design/err-try Robert Griesemer. Proposal: A built-in Go error check function, "try". 2019-06-12
- issue/32437 Proposal: A built-in Go error check function, "try". Decision response.
- design/err-inspect Jonathan Amsterdam, Damien Neil. Error Inspection — Draft Design. August 27, 2018.
- design/err-values-overview Russ Cox. Error Values — Problem Overview. August 27, 2018.
- design/error-values Jonathan Amsterdam, Russ Cox, Marcel van Lohuizen, Damien Neil. Proposal: Go 2 Error Inspection. January 25, 2019
- issue/29934 Jonathan Amsterdam. proposal: Go 2 error values. Jan 25, 2019.
- issue/29934-decision Damien Neil. Go 1.13 lunch decision about error values. May 6, 2019.
- issue/29934-russ Russ Cox. Response, Response regarding "proposal: Go 2 error values". May 7, 2019.
- design/err-print Marcel van Lohuizen. Error Printing — Draft Design. August 27, 2018.
- issue/30468 errors: performance regression in New.
- issue/40432 language: Go 2: error handling meta issue
- issue/41198 proposal: errors: add ErrUnimplemented as standard way for interface method to fail.
- design/lockfree-channels Dmitry Vyukov. Go channels on steroids. Jan 28, 2014
- issue/8899 runtime: lock-free channels
- discuss/lockfree-channels update on "lock-free channels"
- cl/112990043 runtime: fine-grained locking in select
- cl/110580043 runtime: add fast paths to non-blocking channel operations
- issue/8898 runtime: special case timer channels
- issue/8903 runtime: make chan-based generators faster.
- issue/21806 fairness in select statement.
- doc/generics-discuss Summary of Go Generics Discussions
- doc/generics-dilemma Russ Cox. The Generic Dilemma. December 3, 2009.
- design/type-functions Ian Lance Taylor. Type Functions. June 2010.
- design/generalized-types Ian Lance Taylor. Generalized Types. March 2011.
- design/code-gen Russ Cox. Alternatives to Dynamic Code Generation in Go. September 2012.
- design/generalized-types2 Ian Lance Taylor. Generalized Types In Go. October 2013.
- design/type-parameters Ian Lance Taylor. Type Parameters in Go. December 2013.
- design/compile-time-function Bryan C. Mills. Compile-time Functions and First Class Types. September 2016.
- design/should-generics Ian Lance Taylor. Go should have generics. January 2011.
- design/should-generics2 Ian Lance Taylor. Go should have generics. Updated: April 2016.
- issue/15292 proposal: spec: generic programming facilities
- design/generics-overview Russ Cox. Generics — Problem Overview. August 27, 2018.
- design/contracts Ian Lance Taylor, Robert Griesemer. Contracts — Draft Design. August 27, 2018, Updated: July 31, 2019.
- cl/187317 Implementation prototype.
- paper/featherweight-go Griesemer, Robert, et al. Featherweight Go. arXiv preprint arXiv:2005.11710 (2020).
- talk/featherweight-go Phil Wadler: Featherweight Go. Jun 8, 2020.
- design/type-parameters2 Ian Lance Taylor, Robert Griesemer. Type Parameters - Draft Design. June 16, 2020, Updated: August 28, 2020.
- cl/dev.go2go dev.go2go branch
- doc/type-check-readme type checking.
- doc/type-check-notes This file serves as a notebook/implementation log.
- discuss/generics-parenthesis Robert. Generics and parenthesis.
- issue/33232 proposal: Go 2: add alias for interface {} as any
- discuss/generics-move Ian, Moving forward with the generics design.
- 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/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
- proposal: add 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/8885 runtime: consider adding 24-byte size class.
- issue/16798 proposal: cmd/compile: add tail call optimization for self-recursion only.
- 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
- talk/gccgo Brief overview of gccgo, "the other" Go compiler. Aug 6, 2015.]
The Go Linker was written by Ken 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.
- 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. 15 May 2017.
- issue/17280 pprof: add support for profiler labels
- design/go15trace Dmitry Vyukov. Go Execution Tracer. Oct 2014
- design/tracefmt nduca@, dsinclair@. Trace Event Format. October 2016.
- 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.
- design/go116embed Embedded files - Russ & Braid
- Windows
- 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
- 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
- design/lazy-gomod Bryan C. Mills. Proposal: Lazy Module Loading. 2020-02-20
- design/gopls-workspace Heschi Kreinick, Rebecca Stambler. Proposal: Multi-project gopls workspaces. Mar 9, 2020.
- 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
- 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/16843 runtime: mechanism for monitoring heap size
- cl/setmaxheap Austin Clements. runtime/debug: add SetMaxHeap API. Jun 26 2017.
- issue/29696 proposal: runtime: add way for applications to respond to GC backpressure
- design/go116runtime-metric Michael Knyszek. Proposal: API for unstable runtime metrics. Mar 18, 2020.
- issue/19812 runtime: cannot ReadMemStats during GC
- issue/38712 runtime: TestMemStats is flaky
- issue/40459 runtime: ReadMemStats called in a loop may prevent GC
- paper/work-steal Robert D. Blumofe and Charles E. Leiserson. 1999. Scheduling multithreaded computations by work stealing. J. ACM 46, 5 (September 1999), 720-748.
- cl/sched-m-1 Russ Cox, Clean up scheduler. Aug 5, 2008.
- cl/sched-m-n things are much better now, Nov 11, 2009.
- design/go11sched Dmitry Vyukov. Scalable Go Scheduler Design Doc, 2012
- cl/7314062 runtime: improved scheduler
- design/sched-preempt-dmitry Dmitry Vyukov. Go Preemptive Scheduler Design Doc, 2013
- design/sched-numa Dmitry Vyukov, NUMA-aware scheduler for Go. Sep 2014.
- design/go15gomaxprocs Russ Cox. Go 1.5 GOMAXPROCS Default. May 2015.
- doc/go17sched Ian Lance Taylor. How does the golang scheduler work? July 16, 2016.
- design/sched-preempt-austin Austin Clements. Proposal: Non-cooperative goroutine preemption. Jan 2019.
- cl/43050 cmd/compile: loop preemption with fault branch on amd64. May 09, 2019.
- issue/10958 runtime: tight loops should be preemptible
- issue/24543 runtime: non-cooperative goroutine preemption
- issue/36365 runtime: clean up async preemption loose ends
- issue/14592 runtime: let idle OS threads exit
- issue/18237 runtime: scheduler is slow when goroutines are frequently woken
- issue/20395 runtime: terminate locked OS thread if its goroutine exits
- issue/20458 proposal: runtime: pair LockOSThread, UnlockOSThread calls
- issue/21827 runtime: big performance penalty with runtime.LockOSThread
- issue/27345 runtime: use parent goroutine's stack for new goroutines
- issue/28808 runtime: scheduler work stealing slow for high GOMAXPROCS
- issue/32113 runtime: optimization to reduce P churn.
- design/contigstack Contiguous stacks
- issue/17007 runtime: fatal error: bad g->status in ready
- issue/26061 runtime: g0 stack.lo is sometimes too low
A quick history about the Go's memory allocator: Russ Cox first implements
the memory allocator based on tcmalloc
for Go 1, mcache
is cached on M.
Then he revised the allocator to allow user code to use 16GB memory and later allows 128GB. However, the allocator (including scavenger) was
suffered from massive lock contentions and does not scale. After Dmitry's scalable runtime
scheduler, the allocator can allocate directly from P (with much less)
lock contentions. In the meantime, the scavenger is migrated from an independent
thread into the system monitor thread. Now, Michael is actively working on
improving the memory allocator's scalability, such as migrating scavenger
to user threads, bitmap-based page allocator, scalable mcentral.
- doc/tcmalloc Sanjay Ghemawat, Paul Menage. TCMalloc : Thread-Caching Malloc. Google Inc., 2009
- issue/30333 runtime: smarter scavenging
- issue/34047 runtime: potential deadlock cycle caused by scavenge.lock
- issue/34048 runtime: scavenger pacing fails to account for fragmentation
- issue/35112 runtime: make the page allocator scale
- issue/35788 runtime: scavenger not as effective as in previous releases
- design/go113scavenge Michael Knyszek. Proposal: Smarter Scavenging. 2019-05-09.
- design/go114pagealloc Michael Knyszek, Austin Clements. Proposal: Scaling the Go page allocator. 2019-10-18.
- issue/37487 runtime: improve mcentral scalability
- cl/221182 runtime: add new mcentral implementation
- issue/18155 runtime: latency in sweep assists when there's no garbage
- issue/19112 runtime: deadlock involving gcControllerState.enlistWorker
- issue/29707 cmd/trace: failed to parse trace: no consistent ordering of events possible
- issue/35788 runtime: scavenger not as effective as in previous releases
- issue/35954 runtime: handle hitting the top of the address space in the allocator more gracefully
- issue/37487 runtime: improve mcentral scalability
- issue/37927 runtime: GC pacing exhibits strange behavior with a low GOGC
- issue/38130 runtime: incorrect sanity checks in the page allocator
- issue/38404 runtime: STW GC stops working on arm64/mips64le
- issue/38605 runtime: pageAlloc.allocToCache updates pageAlloc.searchAddr in an invalid way
- issue/38617 runtime: scavenger freezes up in Go 1.14 in Windows due to coarse time granularity
- issue/38966 runtime: aix-ppc64 builder is failing with "bad prune", "addr range base and limit are not in the same memory segment" fatal errors
- issue/39128 runtime: linux-mips-rtrk builder consistently failing with "bad prune" as of CL 233497
- issue/40191 runtime: pageAlloc.searchAddr may point to unmapped memory in discontiguous heaps, violating its invariant
- issue/40457 runtime: runqputbatch does not protect its call to globrunqputbatch
- issue/40641 runtime: race between stack shrinking and channel send/recv leads to bad sudog values
- paper/on-the-fly-gc 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.
- paper/yuasa-barrier T. Yuasa. 1990. Real-time garbage collection on general-purpose machines. J. Syst. Softw. 11, 3 (March 1990), 181-198.
- design/go13gc Dmitry Vyukov. Simpler and faster GC for Go. July 16, 2014
- cl/106260045 runtime: simpler and faster GC
- design/go14gc Richard L. Hudson. Go 1.4+ Garbage Collection (GC) Plan and Roadmap. August 6, 2014.
- design/go15gcpacing Austin Clements. Go 1.5 concurrent garbage collector pacing. 2015-03-10.
- discuss/gcpacing Austin Clements et al. Discussion of "Proposal: Garbage collector pacing". March 10, 2015.
- design/eliminate-rescan Austin Clements, Rick Hudson. Eliminate STW stack re-scanning. October 21, 2016.
- issue/11970 runtime: replace GC coordinator with state machine
- design/sweep-free-alloc Austin Clements. Proposal: Dense mark bits and sweep-free allocation. Sep 30, 2015.
- issue/12800 runtime: replace free list with direct bitmap allocation
- design/decentralized-gc Austin Clements. Proposal: Decentralized GC coordination. October 25, 2015.
- issue/12967 runtime: shrinkstack during mark termination significantly increases GC STW time
- issue/14951 runtime: mutator assists are over-aggressive, especially at high GOGC
- issue/17503 runtime: eliminate stack rescanning
- design/concurrent-rescan Austin Clements, Rick Hudson. Proposal: Concurrent stack re-scanning. Oct 18, 2016.
- issue/17505 runtime: perform concurrent stack re-scanning
- design/eliminate-rescan Austin Clements, Rick Hudson. Proposal: Eliminate STW stack re-scanning. Oct 21, 2016
- design/soft-heap-limit Austin Clements. Proposal: Separate soft and hard heap size goal. October 21, 2017.
- design/roc Request Oriented Collector (ROC) Algorithm
- cl/roc runtime: ROC write barrier code
- cl/generational-gc runtime: trigger generational GC
- doc/ismm-gc Rick Hudson. Getting to Go: The Journey of Go's Garbage Collector. 12 July 2018.
- discuss/ismm-gc Garbage Collection Slides and Transcript now available
- design/simplify-mark-termination Austin Clements. Proposal: Simplify mark termination and eliminate mark 2. Aug 9, 2018.
- issue/22350 cmd/compile: compiler can unexpectedly preserve memory,
- design/gcscan Proposal: GC scanning of stacks
- issue/26903 runtime: simplify mark termination and eliminate mark 2
- issue/27993 runtime: error message: P has cached GC work at end of mark termination
Go memory model is not well defined (yet), but atomic is likely to guarantee sequential consistency.
- doc/refmem Rob Pike and Russ Cox. The Go Memory Model. February 21, 2009.
- issue/4947 cmd/cc: atomic intrinsics
- issue/5045 doc: define how sync/atomic interacts with memory model
- issue/7948 doc: define how sync interacts with memory model
- issue/9442 doc: define how finalizers interact with memory model
- issue/33815 doc/go_mem: "hello, world" will not always be printed twice
- cl/75130045 doc: allow buffered channel as semaphore without initialization
- doc/gomem Russ Cox. Go’s Memory Model. February 25, 2016.
- doc/go2017russ Russ Cox. My Go Resolutions for 2017: Memory model. January 18, 2017.
- doc/atomic-bug Package atomic
- discuss/atomic-mem-order specify the memory order guarantee provided by atomic Load/Store
- design/cgo-pointers Ian Lance Taylor. Proposal: Rules for passing pointers between Go and C. October, 2015
- issue/12416 cmd/cgo: specify rules for passing pointers between Go and C
- design/internal-abi Austin Clements. Proposal: Create an undefined internal calling convention. 2019-01-14.
- issue/27539 proposal: runtime: make the ABI undefined as a step toward changing it.
- design/register-call Austin Clements, with input from Cherry Zhang, Michael Knyszek, Martin Möhrmann, Michael Pratt, David Chase, Keith Randall, Dan Scales, and Ian Lance Taylor. Proposal: Register-based Go calling convention. 2020-08-10.
- issue/18597 proposal: cmd/compile: define register-based calling convention
- issue/40724 proposal: switch to a register-based calling convention for Go functions
- design/go14syscall The syscall package.
- design/draft-iofs Russ Cox, Rob Pike. File System Interfaces for Go — Draft Design. July 2020.
- doc/gotypes Alan Donovan. go/types: The Go Type Checker.
- talk/gotypes Alan Donovan. Using go/types for Code Comprehension and Refactoring Tools. October 2, 2015.
- design/modular-interface Alan Donovan. Proposal: a common interface for modular static analyses for Go. 9 Sep 2018
- cl/134935 go/analysis: a new API for analysis tools
- design/percpu-sharded Sanjay Menakuru. Proposal: percpu.Sharded, an API for reducing cache contention. Jun 12, 2018.
- issue/18802 proposal: sync: support for sharded values
- discuss/add-pool gc-aware pool draining policy
- issue/4720 sync: add Pool type. Jan 28, 2013.
- cl/46010043 sync: scalable Pool. Jan 24, 2014.
- cl/86020043 sync: less agressive local caching in Pool. Apr 14, 2014.
- cl/162980043 sync: release Pool memory during second and later GCs. Oct 22, 2014.
- issue/8979 sync: Pool does not release memory on GC
- issue/13086 runtime: fall back to fair locks after repeated sleep-acquire failures.
- issue/22331 runtime: clearpools causes excessive STW1 time
- issue/22950 sync: avoid clearing the full Pool on every GC.
- issue/21035 sync: reduce contention between Map operations with new-but-disjoint keys
- cl/4631059 runtime: replace Semacquire/Semrelease implementation.
- issue/20164 proposal: atomic: add (*Value).Swap
- discuss/atomic-value
- design/monotonic-time Russ Cox. Proposal: Monotonic Elapsed Time Measurements in Go. January 26, 2017.
- issue/12914 time: use monotonic clock to measure elapsed time
- issue/6239 runtime: make timers faster.
- issue/15133 runtime: timer doesn't scale on multi-CPU systems with a lot of timers
- cl/34784 runtime: improve timers scalability on multi-CPU systems
- issue/18023 runtime: unexpectedly large slowdown with runtime.LockOSThread
- issue/27707 time: excessive CPU usage when using Ticker and Sleep.
- issue/38070 runtime: timer self-deadlock due to preemption point
- issue/8082 proposal: spec: represent interfaces by their definition and not by package and name
- issue/14660 proposal: context: new package for standard library
- issue/16209 Proposal: relaxed rules for assignability with differently-named but identical interfaces
- issue/20280 proposal: io: add Context parameter to Reader, etc.
- issue/21355 proposal: Replace Context with goroutine-local storage
- issue/24050 testing: test with child process sometimes hangs on 1.10; -timeout not respected
- [issue/27982] proposal: Go 2: bake a cooperative goroutine cancellation mechanism into the language
- issue/28342 proposal: Go 2: update context package for Go 2
- issue/29011 proposal: Go 2: use structured concurrency
- doc/context-go-away Michal Ĺ trba. Context should go away for Go 2. 2017/08/06
- doc/context Go Concurrency Patterns: Context.
- doc/context-isnt-for-cancellation Dave Cheney. Context isn’t for cancellation. August 20, 2017.
- design/go12encoding Russ Cox. Go 1.2 encoding.TextMarshaler and TextUnmarshaler. July 2013.
- design/go12xml Russ Cox. Go 1.2 xml.Marshaler and Unmarshaler. July 2013.
- design/natural-xml Sam Whited. Proposal: Natural XML. 2016-09-27
- issue/13504 encoding/xml: add generic representation of XML data
- design/zip Russ Cox. Proposal: Zip-based Go package archives. February 2016
- issue/14386 proposal: use zip format inside .a and .o files
- design/xmlstream Sam Whited. Proposal: XML Stream. 2017-03-09
- issue/19480 encoding/xml: add decode from TokenReader, to enable stream transformers
- design/raw-xml Sam Whited. Proposal: Raw XML Token. 2018-09-01
- issue/26756 proposal: encoding/xml: add RawXML token
The following issues are surrounding by the color management of the image
standard library.
At the moment, Go's image
library doesn't support encoding and decoding without reading meta
information from an image therefore the color information, for instance color space, could
go wrong while processing an image such as scaling.
- issue/11420 x/image/draw: color space-correct interpolation
- cl/253497 x/image/draw: gamma corrected non linear interpolation
- issue/20613 image/png: don't ignore PNG gAMA chunk
- issue/27830 proposal: image: decoding options
- issue/33457 proposal: image: add generic metadata support for jpeg, gif, png
- design/mobile-audio Jaana Burcu Dogan. Proposal: Audio for Mobile. November 30, 2015.
- issue/13432 proposal: x/mobile audio
- design/localization Marcel van Lohuizen. Proposal: Localization support in Go. Jan 28, 2016.
- issue/12750 x/text: localization support
- design/unbounded-queue Christian Petrin. Proposal: Built in support for high performance unbounded queue. October 2, 2018
- issue/27935 proposal: add container/queue
- design/lockfile Adrien Delorme. Proposal: make the internal lockedfile package public. 2019-10-15.
- design/cidr Rudi Kramer, James Forrest. Proposal: Add support for CIDR notation in no_proxy variable. 2017-07-10
- issue/16704 net/http: considering supporting CIDR notation in no_proxy env variable
- design/dns Sam Whited. Proposal: DNS Based Vanity Imports. 2018-06-30.
- issue/26160 proposal: use DNS TXT records for vanity import paths
- https://golang.org/s/using-guru
- Plan for Go Guru
- https://golang.org/s/stdwhy
- https://golang.org/s/oracle-design
- https://golang.org/s/oracle-user-manual
- https://golang.org/s/cgihttpproxy
- https://golang.org/s/sqldrivers
- https://golang.org/s/go2designs
- http://doc.cat-v.org/bell_labs/pikestyle
- https://www.informit.com/articles/article.aspx?p=1941206
- http://www.cs.cmu.edu/~mihaib/kernighan-interview/index.html
- https://softwareengineeringdaily.com/2017/12/28/language-design-with-brian-kernighan-holiday-repeat/
- https://www.youtube.com/watch?feature=youtu.be&v=de2Hsvxaf8M&ab_channel=Computerphile
- https://software.intel.com/content/www/us/en/develop/blogs/debugging-performance-issues-in-go-programs.html
- https://github.com/dgryski/interesting-papers
- https://github.com/golang/go/wiki/ResearchPapers
- cl/1 Brian Kernighan. Go's first commit. Jul 19, 1972.
- issue/9 I have already used the name for MY programming language
The document author would like to first thank the TalkGo community creator Mai Yang's champion sponsorship for the golang.design initiative. His creation of the TalkGo significantly changed the Go community in China. He is also a great person that is actively contributing to all kinds of Go related projects.
It is also important to thank the continuing, inspiring discussion and sharing with the TalkGo community core members qcrao, and eddycjy.
The document would not be organized without all of the supports from them.
golang.design/history | CC-BY-NC-ND 4.0 © changkun