It is much more memory-efficient than thrashing a single graph over and over again. Rewriting and compacting trees is good for cache locality.<p>Also, for the trivial rewrites (e.g., variable renaming) your compiler can safely choose to replace a cooying rewrite with a destructive update.