String interning pays for itself
Intern every identifier you find at lex time and pass Symbol(u32) around instead
of String.
Name resolution then compares integers instead of bytes, symbol tables have u32 keys, and the AST stops holding thousands of tiny heap allocations.
It’s a relatively cheap win in a compiler front end.