play around with benchmarking and Rc in types vs. Box.
The results are... not worth it, to say the least. Rc'ing
vs Box'ing in types does indeed save a bit of time, about 10%,
in various passes since we probably avoid a lot of copying of types.
However, what takes the most time apart from executing rustc of course
is actually the parser!
Given my propensity for saying "parsing isn't slow, don't worry about
it" to new PL devs, all I can say is... lol. lmao.
But it's still 60k lines a second or whatever, so it's fine even if
I expected it to be like 3x that. But attempting to profile garnetfmt
(while commenting out anything it does besides parsing) results in
`perf` saying that 93% of the time is spent in
`__memmove_avx_unaligned_erms`. And if that isn't a sign from on high
to shrug and get on with life then idk what is. XD
If we wanna optimize types then really they should be interned and/or
flattened into a vec instead of a tree, I suspect. Then the AST and
HIR should be flattened into a vec as well, though honestly they tend
to be allocated all together so I bet data locality is pretty
ok anyway. But none of that matters compared to the parser!
Well this was a weird Learning Experience, I guess.