5 ms·
Aren't unique pointer also scheduled for decommission?
by Ygg2 13y ago
Aren't unique pointer also scheduled for decommission?
- kibwen 13y agoNo, not at all. Unique pointers are awesome and are the foundation for lots of other features. Now, some of the syntax for using them might still change. That's yet to be decided. But it wouldn't be Rust without unique pointers.
- pcwalton 13y agoUndecided. They will always be somewhat magical in that the "box" operator creates them by default. But the syntax for them may change, or be moved into the library.
- dded 13y agoYou can put a pointer type into a library?
- lucian1900 13y agoRc and Gc are now libraries you can import. A nice advantage is that Arc, MutexArc and any other reference types look and work the same way.
- dbaupp 13y agoEverything except the two reference types (& and &mut) can be trivially implemented in libraries: Rust is a low level language. E.g. the following is almost exactly identical to `~T` #[unsafe_no_drop_flag] struct Uniq<T> { priv ptr: *mut T } impl<T> Uniq<T> { fn new(value: T) -> Uniq<T> { unsafe { let ptr = malloc(size_of::<T>()) as *mut T; if ptr.is_null() { fail!("malloc failed"); } move_val_init(&mut *ptr, value); Uniq { ptr: ptr } } } fn borrow<'a>(&'a self) -> &'a T { unsafe {&*self.ptr} } fn borrow_mut<'a>(&'a mut self) -> &'a mut T { unsafe {&mut *self.ptr} } fn move(mut self) -> T { unsafe { let v = ptr::read_ptr(self.ptr as *T); free(self.ptr); self.ptr = 0; v } } } #[unsafe_destructor] impl<T> Drop for Uniq<T> { fn drop(&mut self) { unsafe { // this will free the pointer and run the // destructor of the inner type replace(self, transmute(0)).move(); } } }