Panicking on OOM was always a questionable design decision.
It doesn't always mean that your app has no memory, it just means that your chosen allocator has no free memory. That's not always an unrecoverable situation.
The original design had no allocator on collections and no alloc crate. If you cares about allocation, you'd use your own data structures with your own allocator in a no_std binary.
The alloc crate came later, and the custom allocator too and is not even stable yet.
For people that might be confused, setting a custom global allocator is possible in stable, but the Allocator trait isn't yet, so specifying the allocator for a specific instance of a Vec isn't possible in stable.
https://doc.rust-lang.org/std/alloc/index.html#the-global_al...