https://datastation.multiprocess.io/blog/2022-05-12-sqlite-i...
https://datastation.multiprocess.io/blog/2022-05-12-sqlite-i...
Linters and IDEs get slow when they check for errors, tests run slow, feedback drags, and all your workflows that took advantage of Go's fast compile times are now long enough that your flow and mental context disappear.
I'm way more lenient with other languages since the tooling and ecosystem are built around long build times. Your workflows compensate. But Go's tooling and ecosystem assume it compiles fast and treat things more like a scripting language. When that expectation is violated it hurts and everything feels like it's broken.
I guess you just need to compile the .a once and then just reuse it?
If you're rebuilding it every single time, your build is set up wrong.
On one hand it makes you wonder how much could be squeezed out of Go and how many basic things they're still leaving out of the compiler. On the other it tells part of the story of why Go compiles fast with the backdrop that despite this lack of work by the compiler people use Go productively all day and deliver services they are happy with from a performance perspective.
[0] - https://go.dev/doc/go1.17#compiler (2021-08)
If you get high-level language constructs right, you'll get great performance by default, even with a simple compiler:
- structs instead of objects
- value types
- exposed pointers
- straightforward allocation semantics
Most compilers out there are busy fighting bad language designs. There's only so much a compiler can do when faced with fat objects hidden behind a spider web of pointers. So they have to do these microoptimizations to claw back at least some performance.
There’ll more opportunities for more optimizations since they move to SSA ir since 1.5 and in turn compile time will definitely go down