And the fact that the first people working on Go have a good knowledge of the Plan9 toolchain probably gave them a head start. But that benefit has probably eroded long ago.
And I completely disagree with the Go team's emphasis on compile times. Fast result programs are far more important than fast compile times. Fast compile times are nice to have, but not much more than that. But this is just my opinion, it's as good as anyone else's.
Fast compile times also let you run your test suite every time you hit ctrl + s.
Fast compile times also let you run tools like gomft without feeling like it is slowing you down.
I agree that fast programs are essential and (ideally) not mutually exclusive with fast compile times.
They are. It is always a tradeoff.
You can configure the optimization level to 0, then only constant folding is performed when the IR is built, and nothing else is done.
- ease of iteration and freedom to make huge breaking changes (and they did make use of it, see e.g. various generations of the GC, or the SSA work);
- thorough knowledge of the internals of the compiler they used (given they were it's authors; also this is linked to the reason I listed above);
- one of the explicit goals for the Go toolchain was that it must compile very fast (which I believe is also somewhat at odds with advanced optimizations, like those used in LLVM) - they even quipped something like "we designed Go while waiting for C++ to compile";
- additionally, though I'm not sure if it was ever spelled explicitly, I suppose they wouldn't want to get tied to the LLVM as a huge dependency, including having to adjust to each and every change in LLVM API, regardless if sensible or not (I seem to recall from so me articles that LLVM does introduce breaking changes in API from time to time?);
[1] https://golang.org/doc/faq#What_compiler_technology_is_used_...