5 ms·
> the GC and runtime make it impossible to leak, double-free, or access out-of-bounds This is false. Neither C# nor Rust protect from memory leaks. There are
by loonyphoenix 7y ago
> the GC and runtime make it impossible to leak, double-free, or access out-of-bounds
This is false.
Neither C# nor Rust protect from memory leaks. There are actually some gotchas in C# that can cause memory leaks - for example, you have to be very careful about events. Memory leaks are not memory unsafe, though.
On the topic of actual memory safety - C# has unsafe blocks just like Rust does. Safe Rust is just as safe from memory safety problems as safe C#, even more so, because C# doesn't require unsafe for FFI, where all bets are off. And unsafe C# is just as unsafe as unsafe Rust can be.
- brighteyes 7y agoYes, leaks are possible in all languages. In Rust you can leak due to reference cycles for example: https://doc.rust-lang.org/book/ch15-06-reference-cycles.html https://doc.rust-lang.org/book/ch15-06-reference-cycles.html C# will clean up reference cycles, but an unintended reference can cause leaks (if you forget to remove it). In both languages such leaks are not good, but at least they aren't memory safety issues.
- zamalek 7y ago> you have to be very careful about events The only gotcha that can cause memory leaks in C# is a GC root, i.e. referencing something on a stack, that is static or that is pinned. Events/delegates are not special in any way, they are simply a reference footgun because it's non-obvious that they contain a reference to the object that contains the handler.