Thread:SamwiseFilmore/@comment-25841881-20171204023045/@comment-25101690-20171208172656

I don't know too much about how compilation works in detail, but I guess a good IDE could use unused background resources to permanently rebuild the project as you change it, dividing the project in as many small subcomponents as possible, to show you errors a few seconds after you typed them. A good compiler that supports this behavior could also play along by staying alive, keeping the intermediate resources of compilation, holding up a connection to the IDE, and only redoing the steps that need to be redone for the changes. Ofc some of the later steps (such as linking) likely still have to be redone completely, but until then you can get the errors back immediately.

Some kinds of metaprogramming are just optimisations, which are completely optional and could as well be done at runtime. In a dev (but not test) environment these should be done at runtime to compile faster. This is similar to how in web development it's common practice to disable things like JSMin or some caching for dev, to test the actual changes faster.