The Evolution of [Go] Generics Design

nrr1 pts0 comments

Go: A Documentary

English<br>简体中文

Dark Mode

Go: A Documentary

by Changkun Ou changkun.de> (and many inputs from contributors)

This document collects many interesting (publicly observable) issues,<br>discussions, proposals, CLs, and talks from the Go development process,<br>which intends to offer a comprehensive reference of the Go history.

Table of Contents

Go: A Documentary

Disclaimer

Sources

Origin

Committers

Core Authors

Compiler/Runtime Team

Library/Tools/Release/Security/Community

Group Interviews

Timeline

Language Design

General

Slice (1.2)

Package Management (1.4, 1.5, 1.7)

Type alias (1.9)

Defer (1.14)

Error values

Channel/Select

Generics

Iterator

Compatibility

Compiler Toolchain

Office Hours

Compiler

Linker

Debugger

Race Detector

Tracer

Lock Analysis

Builder

Modules

gopls

Testing, x/perf

Runtime Core

Scheduler

Execution Stack

Memory Management

Allocator

Collector

Statistics

Memory model

ABI

Misc

Standard Library

syscall

os, io, io/fs, embed

go/*

sync

Map

Pool

Mutex, RWMutex

Groups

atomic

time

context

encoding

image, x/image

math

Mobile

log

misc

Unclassified But Relevant Links

Fun Facts

Acknowledgements

License

Disclaimer

Most of the texts are written as subjective understanding based on public sources

Factual and typo errors may occur.<br>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

Sources

There are many sources for digging the documents that relate to Go's<br>historical design, and here are some of the official sources:

go.dev/blog

dev.golang.org

build.golang.org

farmer.golang.org

go.dev/talks

go.dev/doc

go.dev/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

Origin

Go is a big project driven by a tiny group of people and the crowd of<br>wisdom from the language user community. Here are some core committers<br>to the project if you are interested in following their excellent work.

Go's origin is attractive without doubts. By listening to the talks held<br>by these people, you could learn more about their oral history and fun<br>stories behind the great work.

For instance, here are some exciting talks regarding the historical feats<br>in Go might be your starting points (as a subjective recommendation):<br>talk/rob2007, talk/rob2009, talk/rob2010b, talk/rob2010d,<br>talk/rob2011a, talk/rob2013a, talk/rob2019, talk/robert2015,<br>talk/russ2014, steve2019b, etc.

Committers

Core Authors

The Go language was created by Rob, Robert, and Ken initially because<br>Rob was bothered by slow C++ compiling times, talked to Robert, and luckily<br>Ken was in the next office.<br>Later, Ian joined the project after showing interest, and<br>wrote the gccgo.<br>Rob and Ken are retired. Robert and Ian currently work on adding generics<br>to Go. Russ is also one of the core authors of the project in the early stage.<br>Back then, he was a newcomer at Google, and Rob invited Russ for joining<br>the Go team since he knew Russ from way back because of the<br>Plan 9 project. Russ worked on the early Go compiler, runtime, as well as the leap of<br>Go 1.5 bootstrap.<br>Now, Russ is the tech leader of the Go team.

Rob Pike. (Robert C. Pike, M. Sc.) Website, Blog, GitHub, Twitter, Reddit. (Retired)

Alma mater: University of Toronto (BS), California Institute of Technology

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,...

talk golang google concurrency design from

Related Articles