@thestinger that box means heap in Rust doesn't help newcomers understand it. They need to find that out from the docs or elsewhere, so it is not self-explanatory.

I argue that pointers (including smart pointers) are different from data structures because they are a pointer, rather than containing a pointer.

I'm not saying `~` is easy to understand, I'm saying it is not much more difficult than `Box<T>` to understand. C++ uses `*` and `&` as pointer sigils and we add another one. What is more difficult to explain is the semantics of `~` and that remains unchanged with `Box`.

rustc may well have more recursive data structures than other compilers. But it still conforms to well known patterns of compiler implementation that are not often found elsewhere. Designing language which are ideal for writing their own bootstrap compiler and awkward for other tasks is a well-known phenomenon and we should be careful to avoid it (which I think we are, but we need to continue to be careful).

Your point about allocating only in collections to the point of refactoring is extreme. Pretty much any C or C++ code base is full of `new`/`malloc`s.