Commit 56c4d0a5 authored by Rob Pike's avatar Rob Pike

doc/faq: update for 1.4

LGTM=iant
R=golang-codereviews, bradfitz, iant
CC=golang-codereviews
https://golang.org/cl/150190043
parent 4a8cb4a4
...@@ -889,6 +889,11 @@ type is generic; if you care about how many bits an integer holds, Go ...@@ -889,6 +889,11 @@ type is generic; if you care about how many bits an integer holds, Go
encourages you to be explicit. encourages you to be explicit.
</p> </p>
<p>
A blog post, title <a href="http://blog.golang.org/constants">Constants</a>,
explores this topic in more detail.
</p>
<h3 id="builtin_maps"> <h3 id="builtin_maps">
Why are maps built in?</h3> Why are maps built in?</h3>
<p> <p>
...@@ -971,7 +976,7 @@ It is a handy reference for people doing code reviews for Go projects. ...@@ -971,7 +976,7 @@ It is a handy reference for people doing code reviews for Go projects.
How do I submit patches to the Go libraries?</h3> How do I submit patches to the Go libraries?</h3>
<p> <p>
The library sources are in <code>go/src</code>. The library sources are in the <code>src</code> directory of the repository.
If you want to make a significant change, please discuss on the mailing list before embarking. If you want to make a significant change, please discuss on the mailing list before embarking.
</p> </p>
...@@ -1590,30 +1595,40 @@ and uses a variant of the Plan 9 loader to generate ELF/Mach-O/PE binaries. ...@@ -1590,30 +1595,40 @@ and uses a variant of the Plan 9 loader to generate ELF/Mach-O/PE binaries.
</p> </p>
<p> <p>
We considered writing <code>gc</code>, the original Go compiler, in Go itself but We considered using LLVM for <code>gc</code> but we felt it was too large and
slow to meet our performance goals.
</p>
<p>
We also considered writing <code>gc</code>, the original Go compiler, in Go itself but
elected not to do so because of the difficulties of bootstrapping and elected not to do so because of the difficulties of bootstrapping and
especially of open source distribution&mdash;you'd need a Go compiler to especially of open source distribution&mdash;you'd need a Go compiler to
set up a Go environment. <code>Gccgo</code>, which came later, makes it possible to set up a Go environment. <code>Gccgo</code>, which came later, makes it possible to
consider writing a compiler in Go, which might well happen. consider writing a compiler in Go.
(Go would be a A plan to do that by machine translation of the existing compiler is under development.
fine language in which to implement a compiler; a native lexer and <a href="http://golang.org/s/go13compiler">A separate document</a>
parser are already available in the <a href="/pkg/go/"><code>go</code></a> package explains the reason for this approach.
and a type checker is in the works.)
</p> </p>
<p> <p>
We also considered using LLVM for <code>gc</code> but we felt it was too large and That plan aside,
slow to meet our performance goals. Go is a
fine language in which to implement a self-hosting compiler: a native lexer and
parser are already available in the <a href="/pkg/go/"><code>go</code></a> package
and a separate type checking
<a href="http://godoc.org/code.google.com/p/go.tools/go/types">package</a>
has also been written.
</p> </p>
<h3 id="How_is_the_run_time_support_implemented"> <h3 id="How_is_the_run_time_support_implemented">
How is the run-time support implemented?</h3> How is the run-time support implemented?</h3>
<p> <p>
Again due to bootstrapping issues, the run-time code is mostly in C (with a Again due to bootstrapping issues, the run-time code was originally written mostly in C (with a
tiny bit of assembler) although Go is capable of implementing most of tiny bit of assembler) although much of it has been translated to Go since then
it now. <code>Gccgo</code>'s run-time support uses <code>glibc</code>. and one day all of it might be (except for the assembler bits).
<code>Gc</code> uses a custom library to keep the footprint under <code>Gccgo</code>'s run-time support uses <code>glibc</code>.
<code>Gc</code> uses a custom C library to keep the footprint under
control; it is control; it is
compiled with a version of the Plan 9 C compiler that supports compiled with a version of the Plan 9 C compiler that supports
resizable stacks for goroutines. resizable stacks for goroutines.
...@@ -1637,8 +1652,8 @@ A simple C "hello, world" program compiled and linked statically using gcc ...@@ -1637,8 +1652,8 @@ A simple C "hello, world" program compiled and linked statically using gcc
on Linux is around 750 kB, on Linux is around 750 kB,
including an implementation of <code>printf</code>. including an implementation of <code>printf</code>.
An equivalent Go program using <code>fmt.Printf</code> An equivalent Go program using <code>fmt.Printf</code>
is around 1.2 MB, but is around 1.9 MB, but
that includes more powerful run-time support. that includes more powerful run-time support and type information.
</p> </p>
<h3 id="unused_variables_and_imports"> <h3 id="unused_variables_and_imports">
...@@ -1695,6 +1710,14 @@ func main() { ...@@ -1695,6 +1710,14 @@ func main() {
} }
</pre> </pre>
<p>
Nowadays, most Go programmers use a tool,
<a href="http://godoc.org/code.google.com/p/go.tools/cmd/goimports">goimports</a>,
which automatically rewrites a Go source file to have the correct imports,
eliminating the unused imports issue in practice.
This program is easily connected to most editors to run automatically when a Go source file is written.
</p>
<h2 id="Performance">Performance</h2> <h2 id="Performance">Performance</h2>
<h3 id="Why_does_Go_perform_badly_on_benchmark_x"> <h3 id="Why_does_Go_perform_badly_on_benchmark_x">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment