From: Ralf Jung Date: Tue, 21 Jul 2015 09:56:39 +0000 (+0200) Subject: link to drop RFC X-Git-Url: https://git.ralfj.de/rust-101.git/commitdiff_plain/501b20b712b2e5c176ca581232970e1e74d62ab0?ds=sidebyside;hp=--cc link to drop RFC --- 501b20b712b2e5c176ca581232970e1e74d62ab0 diff --git a/src/part16.rs b/src/part16.rs index eef6f0b..c02959d 100644 --- a/src/part16.rs +++ b/src/part16.rs @@ -45,17 +45,17 @@ type NodePtr = *mut Node; //@ Rust will consider a `T` to be present. In this case, Rust knows that data of type `T` may be dropped //@ whenever a `LinkedList` is dropped. Dropping has a lot of subtle checks to it, making sure that things can't go //@ wrong. For this to work, Rust needs to know which types could potentially be dropped. In safe Rust, this can all be inferred -//@ automatically, but here, we just have a `*mut Node`, and we need to tell Rust that we actually own such data. +//@ automatically, but here, we just have a `*mut Node`, and we need to tell Rust that we actually own such data and will drop it. +//@ (For more of the glory details, see [this RFC](https://github.com/rust-lang/rfcs/blob/master/text/0769-sound-generic-drop.md).) pub struct LinkedList { first: NodePtr, last: NodePtr, _marker: PhantomData, } -//@ Before we get to the actual linked-list methods, we write two short helper functions converting between -//@ mutable raw pointers, and owned pointers (aka `Box`). Both employ `mem::transmute`, which is Rust's -//@ `reinterpret_cast`: It can convert anything to anything, by just re-interpreting the bytes. Clearly, -//@ that's an unsafe operation and must only be used with great care. If at all possible, its use should be avoided.
+//@ Before we get to the actual linked-list methods, we write two short helper functions converting between mutable raw pointers, +//@ and boxed data. Both employ `mem::transmute`, which can convert anything to anything, by just re-interpreting the bytes. +//@ Clearly, that's an unsafe operation and must only be used with great care - or even better, not at all.
//@ We are making the assumption here that a `Box` and a raw pointer have the same representation in memory. In the future, //@ Rust will [provide](http://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#method.from_raw) such [operations](http://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#method.into_raw) in the standard library, but the exact API is still being fleshed out.