5 ms·
I love rust, but C does make it a lot easier to make certain kinds of container types. Eg, intrusive lists are trivial in C but very awkward in rust. Even if yo
by josephg 10mo ago
I love rust, but C does make it a lot easier to make certain kinds of container types. Eg, intrusive lists are trivial in C but very awkward in rust. Even if you use unsafe, rust’s noalias requirement can make a lot of code much harder to implement correctly. I’ve concluded for myself (after a writing a lot of code and a lot of soul searching) that the best way to implement certain data structures is quite different in rust from how you would do the same thing in C. I don’t think this is a bad thing - they’re different languages. Of course the best way to solve a problem in languages X and Y are different.
And safe abstractions mean this stuff usually only matters if you’re implementing new, complex collection types. Like an ECS, b-tree, or Fenwick tree. Most code can just use the standard collection types. (Vec, HashMap, etc). And then you don’t have to think about any of this.
- Ygg2 10mo ago> I love rust, but C does make it a lot easier to make certain kinds of container types. Ok. But making it easier or harder isn't the same as making it impossible. To quote GP: > 2) I believe the problem was related to the fact that Rust can't implement a doubly-linked list in safe code. Rust can implement doubly linked list in safe code. It can. It wraps the unsafe parts in an abstract manner.
- josephg 10mo ago> Rust can implement doubly linked list in safe code. It can. It wraps the unsafe parts in an abstract manner. As far as I know, only with Rc / RefCell. But that has a significant performance cost. Am I wrong? I'd love to see an example / benchmarks.