doc: update the Origins section of the FAQ

Completely replace the opener, which had become not only stale
but bad, expand the discussion of the gopher, and generally provide
prose more connected to the present than to the programming world
of 2007.

Fixes #26107

Change-Id: I5e72f0c81e71d1237fe142dc26114991329a6996
Reviewed-on: https://go-review.googlesource.com/124616
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Rob Pike 2018-07-18 15:10:04 +10:00
parent 1ff8717aeb
commit 3bb4be79ba

View file

@ -9,103 +9,49 @@
What is the purpose of the project?</h3>
<p>
No major systems language has emerged in over a decade, but over that time
the computing landscape has changed tremendously. There are several trends:
At the time of Go's inception, only a decade ago, the programming world was different from today.
Production software was usually written in C++ or Java,
GitHub did not exist, most computers were not yet multiprocessors,
and other than Visual Studio and Eclipse there were few IDEs or other high-level tools available
at all, let alone for free on the Internet.
</p>
<ul>
<li>
Computers are enormously quicker but software development is not faster.
<li>
Dependency management is a big part of software development today but the
&ldquo;header files&rdquo; of languages in the C tradition are antithetical to clean
dependency analysis&mdash;and fast compilation.
<li>
There is a growing rebellion against cumbersome type systems like those of
Java and C++, pushing people towards dynamically typed languages such as
Python and JavaScript.
<li>
Some fundamental concepts such as garbage collection and parallel computation
are not well supported by popular systems languages.
<li>
The emergence of multicore computers has generated worry and confusion.
</ul>
<p>
We believe it's worth trying again with a new language, a concurrent,
garbage-collected language with fast compilation. Regarding the points above:
Meanwhile, we had become frustrated by the undue complexity required to use
the languages we worked with to develop server software.
Computers had become enormously quicker since languages such as
C, C++ and Java were first developed but the act of programming had not
itself advanced nearly as much.
Also, it was clear that multiprocessors were becoming universal but
most languages offered little help to program them efficiently
and safely.
</p>
<ul>
<li>
It is possible to compile a large Go program in a few seconds on a single computer.
<li>
Go provides a model for software construction that makes dependency
analysis easy and avoids much of the overhead of C-style include files and
libraries.
<li>
Go's type system has no hierarchy, so no time is spent defining the
relationships between types. Also, although Go has static types, the language
attempts to make types feel lighter weight than in typical OO languages.
<li>
Go is fully garbage-collected and provides fundamental support for
concurrent execution and communication.
<li>
By its design, Go proposes an approach for the construction of system
software on multicore machines.
</ul>
<p>
We decided to take a step back and think about what major issues were
going to dominate software engineering in the years ahead as technology
developed, and how a new language might help address them.
For instance, the rise of multicore CPUs argued that a language should
provide first-class support for some sort of concurrency or parallelism.
And to make resource management tractable in a large concurrent program,
garbage collection, or at least some sort of safe automatic memory management was required.
</p>
<p>
A much more expansive answer to this question is available in the article,
These considerations led to
<a href="https://commandcenter.blogspot.com/2017/09/go-ten-years-and-climbing.html">a
series of discussions</a> from which Go arose, first as a set of ideas and
desiderata, then as a language.
An overarching goal was that Go do more to help the working programmer
by enabling tooling, automating mundane tasks such as code formatting,
and removing obstacles to working on large code bases.
</p>
<p>
A much more expansive description of the goals of Go and how
they are met, or at least approached, is available in the article,
<a href="//talks.golang.org/2012/splash.article">Go at Google:
Language Design in the Service of Software Engineering</a>.
<h3 id="What_is_the_status_of_the_project">
What is the status of the project?</h3>
<p>
Go became a public open source project on November 10, 2009.
After a couple of years of very active design and development, stability was called for and
Go 1 was <a href="//blog.golang.org/2012/03/go-version-1-is-released.html">released</a>
on March 28, 2012.
Go 1, which includes a <a href="/ref/spec">language specification</a>,
<a href="/pkg/">standard libraries</a>,
and <a href="/cmd/go/">custom tools</a>,
provides a stable foundation for creating reliable products, projects, and publications.
</p>
<p>
With that stability established, we are using Go to develop programs, products, and tools rather than
actively changing the language and libraries.
In fact, the purpose of Go 1 is to provide <a href="/doc/go1compat.html">long-term stability</a>.
Backwards-incompatible changes will not be made to any Go 1 point release.
We want to use what we have to learn how a future version of Go might look, rather than to play with
the language underfoot.
</p>
<p>
Of course, development will continue on Go itself, but the focus will be on performance, reliability,
portability and the addition of new functionality such as improved support for internationalization.
</p>
<p>
There may well be a Go 2 one day, but not for a few years and it will be influenced by what we learn using Go 1 as it is today.
</p>
<h3 id="Whats_the_origin_of_the_mascot">
What's the origin of the mascot?</h3>
<p>
The mascot and logo were designed by
<a href="https://reneefrench.blogspot.com">Renée French</a>, who also designed
<a href="https://9p.io/plan9/glenda.html">Glenda</a>,
the Plan 9 bunny.
The <a href="https://blog.golang.org/gopher">gopher</a>
is derived from one she used for an <a href="https://wfmu.org/">WFMU</a>
T-shirt design some years ago.
The logo and mascot are covered by the
<a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a>
license.
</p>
<h3 id="history">
@ -126,14 +72,49 @@ and libraries from prototype to reality.
<p>
Go became a public open source project on November 10, 2009.
Many people from the community have contributed ideas, discussions, and code.
Countless people from the community have contributed ideas, discussions, and code.
</p>
<p>
There are now millions of Go programmers—gophers—around the world,
and there are more every day.
Go's success has far exceeded our expectations.
</p>
<h3 id="gopher">
What's the origin of the gopher mascot?</h3>
<p>
The mascot and logo were designed by
<a href="https://reneefrench.blogspot.com">Renée French</a>, who also designed
<a href="https://9p.io/plan9/glenda.html">Glenda</a>,
the Plan 9 bunny.
A <a href="https://blog.golang.org/gopher">blog post</a>
about the gopher explains how it was
derived from one she used for a <a href="https://wfmu.org/">WFMU</a>
T-shirt design some years ago.
The logo and mascot are covered by the
<a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a>
license.
</p>
<p>
The gopher has a
<a href="/doc/gopher/modelsheet.jpg">model sheet</a>
illustrating his characteristics and how to represent them correctly.
The model sheet was first shown in a
<a href="https://www.youtube.com/watch?v=4rw_B4yY69k">talk</a>
by Renée at Gophercon in 2016.
He has unique features; he's the <em>Go gopher</em>, not just any old gopher.
</p>
<h3 id="creating_a_new_language">
Why are you creating a new language?</h3>
Why did you create a new language?</h3>
<p>
Go was born out of frustration with existing languages and
environments for systems programming. Programming had become too
environments for the work we were doing at Google.
Programming had become too
difficult and the choice of languages was partly to blame. One had to
choose either efficient compilation, efficient execution, or ease of
programming; all three were not available in the same mainstream
@ -143,10 +124,18 @@ Python and JavaScript rather than C++ or, to a lesser extent, Java.
</p>
<p>
Go is an attempt to combine the ease of programming of an interpreted,
We were not alone in our concerns.
After many years with a pretty quiet landscape for programming languages,
Go was among the first of several new languages—Rust,
Elixir, Swift, and more—that have made programming language development
an active, almost mainstream field again.
</p>
<p>
Go addressed these issues by attempting to combine the ease of programming of an interpreted,
dynamically typed
language with the efficiency and safety of a statically typed, compiled language.
It also aims to be modern, with support for networked and multicore
It also aimed to be modern, with support for networked and multicore
computing. Finally, working with Go is intended to be <i>fast</i>: it should take
at most a few seconds to build a large executable on a single computer.
To meet these goals required addressing a number of
@ -162,6 +151,7 @@ discusses the background and motivation behind the design of the Go language,
as well as providing more detail about many of the answers presented in this FAQ.
</p>
<h3 id="ancestors">
What are Go's ancestors?</h3>
<p>
@ -179,15 +169,19 @@ kind of programming we do, more effective, which means more fun.
<h3 id="principles">
What are the guiding principles in the design?</h3>
<p>
Programming today involves too much bookkeeping, repetition, and
clerical work. As Dick Gabriel says, &ldquo;Old programs read
like quiet conversations between a well-spoken research worker and a
well-studied mechanical colleague, not as a debate with a compiler.
Who'd have guessed sophistication bought such noise?&rdquo;
The sophistication is worthwhile&mdash;no one wants to go back to
the old languages&mdash;but can it be more quietly achieved?
When Go was designed, Java and C++ were the most commonly
used languages for writing servers, at least at Google.
We felt that these languages required
too much bookkeeping and repetition.
Some programmers reacted by moving towards more dynamic,
fluid languages like Python, at the cost of efficiency and
type safety.
We felt it should be possible to have the efficiency,
the safety, and the fluidity in a single language.
</p>
<p>
Go attempts to reduce the amount of typing in both senses of the word.
Throughout its design, we have tried to reduce clutter and
@ -2408,8 +2402,8 @@ systems.
</p>
<p>
A related issue is that a large part of the difficulty of concurrent
and multi-threaded programming is the object lifetime problem:
Much of the difficulty of concurrent programming
has its roots in the object lifetime problem:
as objects get passed among threads it becomes cumbersome
to guarantee they become freed safely.
Automatic garbage collection makes concurrent code far easier to write.