@Araq: As far as I can tell, when a macro has side-effects (e.g. echo), its invocations get re-evaluated, even if the macro itself and the modules containing the invocations remain unchanged. Is the compiler smart enough to only do that with macros that have side-effects? What happens if the macro breaks referential transparency in a trickier way (e.g. it generates code based on the contents of a file)?
@Stefan_Salewski: I hope you're wrong, because that would defeat the purpose of having a cache in the first place.