All mainstream build systems already support incremental builds, and in some cases it's even possible to leverage compiler cache to further shave down the time it takes to rebuild a project.
Breaking down a monolithic project into submodules is all it takes to shave off a big chunk of time from a build.
These kinds of few seconds/minutes shaved add up and can impact one’s productivity.
at the level Rust works, late binding is hard to do but I don't think it's impossible. Name mangling and calling conventions are a couple big obstacles.
That's exactly what Vite is doing for JS. Nearly instantaneous dev build, and slow but thorough prod build which does all the expensive optimizations.
It seems odd that compiled languages have not picked this up yet.
It can compile with typechecking, or, due to the design of the language, without any consideration of types at all.
This later mode is extremely fast, particularly with per file incrementality.
(Unfortunately for reasons I cannot fathom, this is not part of tsc CLI. You have to use something like Babel that uses the TS compiler API.)
The workflow can be adapted to slow compilation, obviously, with some discipline and a less iterative process.
But the ideal "flow" for many coders is attained with zero interruptions and being able to write-compile-test in a seamless fashion.
I think that the success of interpreters in many fields is related to this.
Modern compilers should maybe be split in two, a fast compile/slowish code/loose tests version and a "checks+release" one.
We have incredibly fast computers, instant compilation is feasible.