3 ms·
I can understand why Rust didn't implement an IO monad (even though I'd love it), but linear types seem like they would fit right in with the rest of Rust. Not
by yccs27 1y ago
I can understand why Rust didn't implement an IO monad (even though I'd love it), but linear types seem like they would fit right in with the rest of Rust. Not sure why they didn't include them.
There's actually two different ways that Rust types can always be discarded: mem::forget and mem::drop. Making mem::forget unsafe for some types would be very useful, but difficult to implement without breaking existing code [1].
Btw, you are correct with linear types - Affine types allow discarding (like Rust already does).
[1] https://without.boats/blog/changing-the-rules-of-rust/ https://without.boats/blog/changing-the-rules-of-rust/
- bonzini 1y agoI think if one implemented linear types in Rust they could still be forgotten, but not. Basically you would have constraints like: * creating type &T or &mut T is forbidden; therefore also applying & and &mut to a value of linear type, or using ref and ref mut at the top level of patterns that match a value with linear type * field access is forbidden, except through pattern matching (either match or let) because pattern matching consumes the matched value * implementing Copy or Drop is not allowed (Copy makes no sense, with Drop using destructuring patterns would not be possible). Well, Drop would not be implementable anyway, together with many other traits, because it takes &mut self (which is not creatable). I would have no idea how to express it in the syntax.