It's true that templates are inherently slow, and there isn't a ton we can do about that. However, almost every time I compile the project (hundreds of times per day), the overwhelming majority of the time, the same templates are being re-instantiated in exactly the same way. I can't help but wonder if there were some way to automatically cache templates instantiations between runs of dmd?

The heavytemplates.d workaround I've used kind of accomplishes this as a total hack job. However...

- It adds complexity to the build process
- It adds a small overhead of linking in an extra .lib (although this is dwarfed by the win from no longer rebuilding expensive templates every build) - It means that when heavytemplates.d changes, my rebuild is significantly longer than before since I'm running dmd twice - It means extra work to implement that we don't want every developer to do themselves

Am I crazy in wondering about caching template instantiations? I understand that an incremental build would kind of accomplish this goal, but that comes with its own set of problems. I can't help but think that there's some way to make dmd smarter about not redoing the exact same work build after build, when the templates and their instantiations only change very rarely.

Reply via email to