The last thing I'm curious about is compilation time, especially since that's taken a hit or two recently. I know it's easily a net win with numbers like that, but one of my favorite parts of Go is the quick build times, and thus quick iteration times.
Also, since Go is self-compiled, does that mean we'll have to wait until 1.7.1 for the speed improvements to hit the compiler? :-P
> "Tip compiler (with SSA internal checks off) is about 7% slower than go1.6 to compile net/http (go test -a -c -gcflags=-d=ssa/check/off net/http)"
... though we may wonder wether the mesured compiler itself was compiled with or without SSA (with 7% being in the ballpark of the expected SSA gains).
The compiler always compiles itself as part of the bootstrap process. The final compiler is built with itself and thus uses its own SSA code generation.
Yep. A while ago I found myself needing to recompile the Linux kernel for Android, and I was amazed at how fast the build was (I think I last built a kernel in the 90s). It took a lot less time than it takes Android to start up!
Despite the attractive nuisance of "go build", if you're in a fast save-compile-test cycle, you really want "go install". Both do pretty much the same thing (ignoring where the result goes), but install keeps the intermediate package compilations around and does the minimum, whereas build seems to discard them. Put "-v" on both of them and you can see the differences.
I think this is only true if you're building outside your GOPATH. In my case, build -v, build -v -i, and install all have very similar compile times and only show an edited file being compiled when executed from inside my GOPATH.
Each of those averaged 3.5s in my codebase, for example, on a freshly changed file. go install's second run is 250ms, but I assume that's because it knows the file hasn't changed.
go build -a shows roughly 60 packages and takes 16s, so I would notice if build or install were accidentally recompiling all of them.
I just posted some results there on our own codebase.
Server load time dropped from 25.5s or so to 22.2s; a really nice win on a large and varied codebase for these improvements. I can't imagine not wanting them.
26 comments
[ 6.3 ms ] story [ 54.2 ms ] threadAlso, since Go is self-compiled, does that mean we'll have to wait until 1.7.1 for the speed improvements to hit the compiler? :-P
"Tip compiler (with SSA internal checks off) is about 7% slower than go1.6 to compile net/http (go test -a -c -gcflags=-d=ssa/check/off net/http)"
[1] https://www.reddit.com/r/golang/comments/48ivj0/devssa_branc...
> "Tip compiler (with SSA internal checks off) is about 7% slower than go1.6 to compile net/http (go test -a -c -gcflags=-d=ssa/check/off net/http)"
... though we may wonder wether the mesured compiler itself was compiled with or without SSA (with 7% being in the ballpark of the expected SSA gains).
Doing a full build across HP-UX, Aix, Solaris, Red-Hat Linux and Windows for 32 and 64 bits took almost a full day.
EDIT: It was a mix of C and TCL
No. The compiler compiles itself during the bootstrap phase.
One of my favourite parts of Go was the quick build times. It used to feel like 'go build' was as fast as 'python'; sadly, that's no longer the case.
Each of those averaged 3.5s in my codebase, for example, on a freshly changed file. go install's second run is 250ms, but I assume that's because it knows the file hasn't changed.
go build -a shows roughly 60 packages and takes 16s, so I would notice if build or install were accidentally recompiling all of them.
(It's still much faster than something like C++ though, and feels about the same to me as the (snappy) Objective-C.)
Server load time dropped from 25.5s or so to 22.2s; a really nice win on a large and varied codebase for these improvements. I can't imagine not wanting them.