2 ms·
Sure, they wanted a safe language. What they actually did, they created a language where data is a second-class citizen. The strategy “find a safe abstraction
by Const-me 10y ago
Sure, they wanted a safe language. What they actually did, they created a language where data is a second-class citizen.
The strategy “find a safe abstraction boundary for you low level data structure, and stick to it” works well for a scripting language. Or for high-level code that’s not performance-critical, like business logic.
It doesn’t work well for a general-purpose language that’s used for algorithms-heavy performance critical tasks.
There’s no “low level data structures”, because data structures are all the way down, and composed all the way down. Very often I need unsafe things at my API boundaries, because performance or because interop. I can’t implement my data structures once and stick to them, because as I work on the project I change both code and data structures (the main input here is profiler).
That safety thing makes data structures impractical. As you see from my linked list example, they are hard to create, use, and compose.
BTW, graphs (including trees and lists) are just one example how pointers are useful in data structures. Here’s another one.
In C++, I can add an index to a collection using unordered_map<tKey, Value*>. This index allows constant-time lookups, and if the tKey is something small like an int, the RAM cost is very low, because only keys + pointers are stored in the hash map, not the values themselves.
If I’ll want to do same in Rust, I suppose you’ll tell me I need to copy-paste the collection source code and add index there, because what’s in stdlib ain’t composable the way I want :-)