diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-12-21 00:04:22 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-12-21 09:27:36 -0800 |
| commit | b187ae55aa0b950eac17342a2ceddbc8408c5583 (patch) | |
| tree | fed7cda87041e485779a35550eeacc88a5f38860 /src | |
| parent | f6a7388210e40741e9e5d50ef376ceba3cb34e61 (diff) | |
| parent | e473e700ccb94177cdc8e799b9f08bceb1c75601 (diff) | |
| download | rust-b187ae55aa0b950eac17342a2ceddbc8408c5583.tar.gz rust-b187ae55aa0b950eac17342a2ceddbc8408c5583.zip | |
rollup merge of #20066: aturon/stab-2-cell
This patch finalizes stabilization for the `cell` module, settling on the current names `Cell`, `RefCell`, `UnsafeCell`, `Ref` and `RefMut`. While we had considered improving these names, no one was able to produce a truly compelling alternative. There is one substantive change here: the `get` method of `UnsafeSell` is now marked `unsafe`. Merely getting a raw pointer to the contents is not, by itself, an unsafe operation. (Consider that you can always safely turn a reference into a raw pointer, and that raw pointer may then be aliased by subsequent references.) r? @alexcrichton
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/cell.rs | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index 01979e97577..03eb4504448 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -164,7 +164,7 @@ use option::Option; use option::Option::{None, Some}; /// A mutable memory location that admits only `Copy` data. -#[unstable = "likely to be renamed; otherwise stable"] +#[stable] pub struct Cell<T> { value: UnsafeCell<T>, noshare: marker::NoSync, @@ -231,7 +231,7 @@ impl<T:PartialEq + Copy> PartialEq for Cell<T> { } /// A mutable memory location with dynamically checked borrow rules -#[unstable = "likely to be renamed; otherwise stable"] +#[stable] pub struct RefCell<T> { value: UnsafeCell<T>, borrow: Cell<BorrowFlag>, @@ -256,7 +256,7 @@ impl<T> RefCell<T> { } /// Consumes the `RefCell`, returning the wrapped value. - #[unstable = "recently renamed per RFC 430"] + #[stable] pub fn into_inner(self) -> T { // Since this function takes `self` (the `RefCell`) by value, the // compiler statically verifies that it is not currently borrowed. @@ -275,7 +275,7 @@ impl<T> RefCell<T> { /// immutable borrows can be taken out at the same time. /// /// Returns `None` if the value is currently mutably borrowed. - #[unstable = "may be renamed, depending on global conventions"] + #[unstable = "may be renamed or removed"] pub fn try_borrow<'a>(&'a self) -> Option<Ref<'a, T>> { match BorrowRef::new(&self.borrow) { Some(b) => Some(Ref { _value: unsafe { &*self.value.get() }, _borrow: b }), @@ -291,7 +291,7 @@ impl<T> RefCell<T> { /// # Panics /// /// Panics if the value is currently mutably borrowed. - #[unstable] + #[stable] pub fn borrow<'a>(&'a self) -> Ref<'a, T> { match self.try_borrow() { Some(ptr) => ptr, @@ -305,7 +305,7 @@ impl<T> RefCell<T> { /// cannot be borrowed while this borrow is active. /// /// Returns `None` if the value is currently borrowed. - #[unstable = "may be renamed, depending on global conventions"] + #[unstable = "may be renamed or removed"] pub fn try_borrow_mut<'a>(&'a self) -> Option<RefMut<'a, T>> { match BorrowRefMut::new(&self.borrow) { Some(b) => Some(RefMut { _value: unsafe { &mut *self.value.get() }, _borrow: b }), @@ -321,7 +321,7 @@ impl<T> RefCell<T> { /// # Panics /// /// Panics if the value is currently borrowed. - #[unstable] + #[stable] pub fn borrow_mut<'a>(&'a self) -> RefMut<'a, T> { match self.try_borrow_mut() { Some(ptr) => ptr, @@ -400,7 +400,7 @@ impl<'b> Clone for BorrowRef<'b> { } /// Wraps a borrowed reference to a value in a `RefCell` box. -#[unstable] +#[stable] pub struct Ref<'b, T:'b> { // FIXME #12808: strange name to try to avoid interfering with // field accesses of the contained type via Deref @@ -456,7 +456,7 @@ impl<'b> BorrowRefMut<'b> { } /// Wraps a mutable borrowed reference to a value in a `RefCell` box. -#[unstable] +#[stable] pub struct RefMut<'b, T:'b> { // FIXME #12808: strange name to try to avoid interfering with // field accesses of the contained type via Deref @@ -517,7 +517,7 @@ impl<'b, T> DerefMut<T> for RefMut<'b, T> { /// is not recommended to access its fields directly, `get` should be used /// instead. #[lang="unsafe"] -#[unstable = "this type may be renamed in the future"] +#[stable] pub struct UnsafeCell<T> { /// Wrapped value /// @@ -539,22 +539,16 @@ impl<T> UnsafeCell<T> { } /// Gets a mutable pointer to the wrapped value. - /// - /// This function is unsafe as the pointer returned is an unsafe pointer and - /// no guarantees are made about the aliasing of the pointers being handed - /// out in this or other tasks. #[inline] - #[unstable = "conventions around acquiring an inner reference are still \ - under development"] - pub unsafe fn get(&self) -> *mut T { &self.value as *const T as *mut T } + #[stable] + pub fn get(&self) -> *mut T { &self.value as *const T as *mut T } /// Unwraps the value /// /// This function is unsafe because there is no guarantee that this or other /// tasks are currently inspecting the inner value. #[inline] - #[unstable = "conventions around the name `unwrap` are still under \ - development"] + #[stable] pub unsafe fn into_inner(self) -> T { self.value } /// Deprecated, use into_inner() instead |
