alloc: Split apart the global alloc
feature
This commit is contained in:
parent
c14d86fd3f
commit
c44f5399e4
12 changed files with 54 additions and 36 deletions
|
@ -134,7 +134,7 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Arc<U>> for Arc<T> {}
|
||||||
/// Weak pointers will not keep the data inside of the `Arc` alive, and can be
|
/// Weak pointers will not keep the data inside of the `Arc` alive, and can be
|
||||||
/// used to break cycles between `Arc` pointers.
|
/// used to break cycles between `Arc` pointers.
|
||||||
#[unsafe_no_drop_flag]
|
#[unsafe_no_drop_flag]
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "arc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
pub struct Weak<T: ?Sized> {
|
pub struct Weak<T: ?Sized> {
|
||||||
// FIXME #12808: strange name to try to avoid interfering with
|
// FIXME #12808: strange name to try to avoid interfering with
|
||||||
|
@ -198,7 +198,7 @@ impl<T: ?Sized> Arc<T> {
|
||||||
///
|
///
|
||||||
/// let weak_five = five.downgrade();
|
/// let weak_five = five.downgrade();
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "arc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
pub fn downgrade(&self) -> Weak<T> {
|
pub fn downgrade(&self) -> Weak<T> {
|
||||||
// See the clone() impl for why this is relaxed
|
// See the clone() impl for why this is relaxed
|
||||||
|
@ -236,12 +236,12 @@ impl<T: ?Sized> Arc<T> {
|
||||||
|
|
||||||
/// Get the number of weak references to this value.
|
/// Get the number of weak references to this value.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "arc_extras")]
|
||||||
pub fn weak_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().weak.load(SeqCst) - 1 }
|
pub fn weak_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().weak.load(SeqCst) - 1 }
|
||||||
|
|
||||||
/// Get the number of strong references to this value.
|
/// Get the number of strong references to this value.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "arc_extras")]
|
||||||
pub fn strong_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().strong.load(SeqCst) }
|
pub fn strong_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().strong.load(SeqCst) }
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ pub fn strong_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().strong.loa
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "arc_extras")]
|
||||||
pub unsafe fn get_mut<T: ?Sized>(this: &mut Arc<T>) -> Option<&mut T> {
|
pub unsafe fn get_mut<T: ?Sized>(this: &mut Arc<T>) -> Option<&mut T> {
|
||||||
// FIXME(#24880) potential race with upgraded weak pointers here
|
// FIXME(#24880) potential race with upgraded weak pointers here
|
||||||
if strong_count(this) == 1 && weak_count(this) == 0 {
|
if strong_count(this) == 1 && weak_count(this) == 0 {
|
||||||
|
@ -352,7 +352,7 @@ impl<T: Clone> Arc<T> {
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "arc_extras")]
|
||||||
pub unsafe fn make_unique(&mut self) -> &mut T {
|
pub unsafe fn make_unique(&mut self) -> &mut T {
|
||||||
// FIXME(#24880) potential race with upgraded weak pointers here
|
// FIXME(#24880) potential race with upgraded weak pointers here
|
||||||
//
|
//
|
||||||
|
@ -438,7 +438,7 @@ impl<T: ?Sized> Drop for Arc<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "arc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
impl<T: ?Sized> Weak<T> {
|
impl<T: ?Sized> Weak<T> {
|
||||||
/// Upgrades a weak reference to a strong reference.
|
/// Upgrades a weak reference to a strong reference.
|
||||||
|
@ -479,7 +479,7 @@ impl<T: ?Sized> Weak<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "arc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
impl<T: ?Sized> Clone for Weak<T> {
|
impl<T: ?Sized> Clone for Weak<T> {
|
||||||
/// Makes a clone of the `Weak<T>`.
|
/// Makes a clone of the `Weak<T>`.
|
||||||
|
|
|
@ -81,7 +81,7 @@ use core::raw::{TraitObject};
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[lang = "exchange_heap"]
|
#[lang = "exchange_heap"]
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "box_heap",
|
||||||
reason = "may be renamed; uncertain about custom allocator design")]
|
reason = "may be renamed; uncertain about custom allocator design")]
|
||||||
pub const HEAP: () = ();
|
pub const HEAP: () = ();
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ impl<T : ?Sized> Box<T> {
|
||||||
/// Function is unsafe, because improper use of this function may
|
/// Function is unsafe, because improper use of this function may
|
||||||
/// lead to memory problems like double-free, for example if the
|
/// lead to memory problems like double-free, for example if the
|
||||||
/// function is called twice on the same raw pointer.
|
/// function is called twice on the same raw pointer.
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "box_raw",
|
||||||
reason = "may be renamed or moved out of Box scope")]
|
reason = "may be renamed or moved out of Box scope")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn from_raw(raw: *mut T) -> Self {
|
pub unsafe fn from_raw(raw: *mut T) -> Self {
|
||||||
|
@ -146,7 +146,7 @@ impl<T : ?Sized> Box<T> {
|
||||||
/// let raw = boxed::into_raw(seventeen);
|
/// let raw = boxed::into_raw(seventeen);
|
||||||
/// let boxed_again = unsafe { Box::from_raw(raw) };
|
/// let boxed_again = unsafe { Box::from_raw(raw) };
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "box_raw",
|
||||||
reason = "may be renamed")]
|
reason = "may be renamed")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn into_raw<T : ?Sized>(b: Box<T>) -> *mut T {
|
pub fn into_raw<T : ?Sized>(b: Box<T>) -> *mut T {
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
#![unstable(feature = "heap_api",
|
||||||
|
reason = "the precise API and guarantees it provides may be tweaked \
|
||||||
|
slightly, especially to possibly take into account the \
|
||||||
|
types being stored to make room for a future \
|
||||||
|
tracing garbage collector")]
|
||||||
|
|
||||||
use core::{isize, usize};
|
use core::{isize, usize};
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -94,7 +100,6 @@ pub fn usable_size(size: usize, align: usize) -> usize {
|
||||||
///
|
///
|
||||||
/// These statistics may be inconsistent if other threads use the allocator
|
/// These statistics may be inconsistent if other threads use the allocator
|
||||||
/// during the call.
|
/// during the call.
|
||||||
#[unstable(feature = "alloc")]
|
|
||||||
pub fn stats_print() {
|
pub fn stats_print() {
|
||||||
imp::stats_print();
|
imp::stats_print();
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,9 +59,11 @@
|
||||||
// Do not remove on snapshot creation. Needed for bootstrap. (Issue #22364)
|
// Do not remove on snapshot creation. Needed for bootstrap. (Issue #22364)
|
||||||
#![cfg_attr(stage0, feature(custom_attribute))]
|
#![cfg_attr(stage0, feature(custom_attribute))]
|
||||||
#![crate_name = "alloc"]
|
#![crate_name = "alloc"]
|
||||||
#![unstable(feature = "alloc")]
|
|
||||||
#![staged_api]
|
|
||||||
#![crate_type = "rlib"]
|
#![crate_type = "rlib"]
|
||||||
|
#![staged_api]
|
||||||
|
#![unstable(feature = "alloc",
|
||||||
|
reason = "this library is unlikely to be stabilized in its current \
|
||||||
|
form or name")]
|
||||||
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
||||||
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
||||||
html_root_url = "http://doc.rust-lang.org/nightly/",
|
html_root_url = "http://doc.rust-lang.org/nightly/",
|
||||||
|
@ -86,11 +88,11 @@
|
||||||
#![feature(unique)]
|
#![feature(unique)]
|
||||||
#![feature(unsafe_no_drop_flag, filling_drop)]
|
#![feature(unsafe_no_drop_flag, filling_drop)]
|
||||||
#![feature(unsize)]
|
#![feature(unsize)]
|
||||||
|
|
||||||
#![cfg_attr(test, feature(test, alloc, rustc_private))]
|
#![cfg_attr(test, feature(test, alloc, rustc_private))]
|
||||||
#![cfg_attr(all(not(feature = "external_funcs"), not(feature = "external_crate")),
|
#![cfg_attr(all(not(feature = "external_funcs"), not(feature = "external_crate")),
|
||||||
feature(libc))]
|
feature(libc))]
|
||||||
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate core;
|
extern crate core;
|
||||||
|
|
||||||
|
@ -124,6 +126,7 @@ pub mod rc;
|
||||||
/// Common out-of-memory routine
|
/// Common out-of-memory routine
|
||||||
#[cold]
|
#[cold]
|
||||||
#[inline(never)]
|
#[inline(never)]
|
||||||
|
#[unstable(feature = "oom", reason = "not a scrutinized interface")]
|
||||||
pub fn oom() -> ! {
|
pub fn oom() -> ! {
|
||||||
// FIXME(#14674): This really needs to do something other than just abort
|
// FIXME(#14674): This really needs to do something other than just abort
|
||||||
// here, but any printing done must be *guaranteed* to not
|
// here, but any printing done must be *guaranteed* to not
|
||||||
|
@ -144,4 +147,5 @@ pub fn oom() -> ! {
|
||||||
// to get linked in to libstd successfully (the linker won't
|
// to get linked in to libstd successfully (the linker won't
|
||||||
// optimize it out).
|
// optimize it out).
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
#[unstable(feature = "issue_14344_fixme")]
|
||||||
pub fn fixme_14344_be_sure_to_link_to_collections() {}
|
pub fn fixme_14344_be_sure_to_link_to_collections() {}
|
||||||
|
|
|
@ -236,7 +236,7 @@ impl<T: ?Sized> Rc<T> {
|
||||||
///
|
///
|
||||||
/// let weak_five = five.downgrade();
|
/// let weak_five = five.downgrade();
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "rc_weak",
|
||||||
reason = "Weak pointers may not belong in this module")]
|
reason = "Weak pointers may not belong in this module")]
|
||||||
pub fn downgrade(&self) -> Weak<T> {
|
pub fn downgrade(&self) -> Weak<T> {
|
||||||
self.inc_weak();
|
self.inc_weak();
|
||||||
|
@ -246,12 +246,12 @@ impl<T: ?Sized> Rc<T> {
|
||||||
|
|
||||||
/// Get the number of weak references to this value.
|
/// Get the number of weak references to this value.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "rc_extras")]
|
||||||
pub fn weak_count<T: ?Sized>(this: &Rc<T>) -> usize { this.weak() - 1 }
|
pub fn weak_count<T: ?Sized>(this: &Rc<T>) -> usize { this.weak() - 1 }
|
||||||
|
|
||||||
/// Get the number of strong references to this value.
|
/// Get the number of strong references to this value.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "rc_extras")]
|
||||||
pub fn strong_count<T: ?Sized>(this: &Rc<T>) -> usize { this.strong() }
|
pub fn strong_count<T: ?Sized>(this: &Rc<T>) -> usize { this.strong() }
|
||||||
|
|
||||||
/// Returns true if there are no other `Rc` or `Weak<T>` values that share the
|
/// Returns true if there are no other `Rc` or `Weak<T>` values that share the
|
||||||
|
@ -269,7 +269,7 @@ pub fn strong_count<T: ?Sized>(this: &Rc<T>) -> usize { this.strong() }
|
||||||
/// rc::is_unique(&five);
|
/// rc::is_unique(&five);
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "rc_extras")]
|
||||||
pub fn is_unique<T>(rc: &Rc<T>) -> bool {
|
pub fn is_unique<T>(rc: &Rc<T>) -> bool {
|
||||||
weak_count(rc) == 0 && strong_count(rc) == 1
|
weak_count(rc) == 0 && strong_count(rc) == 1
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ pub fn is_unique<T>(rc: &Rc<T>) -> bool {
|
||||||
/// assert_eq!(rc::try_unwrap(x), Err(Rc::new(4)));
|
/// assert_eq!(rc::try_unwrap(x), Err(Rc::new(4)));
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "rc_extras")]
|
||||||
pub fn try_unwrap<T>(rc: Rc<T>) -> Result<T, Rc<T>> {
|
pub fn try_unwrap<T>(rc: Rc<T>) -> Result<T, Rc<T>> {
|
||||||
if is_unique(&rc) {
|
if is_unique(&rc) {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -327,7 +327,7 @@ pub fn try_unwrap<T>(rc: Rc<T>) -> Result<T, Rc<T>> {
|
||||||
/// assert!(rc::get_mut(&mut x).is_none());
|
/// assert!(rc::get_mut(&mut x).is_none());
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "rc_extras")]
|
||||||
pub fn get_mut<T>(rc: &mut Rc<T>) -> Option<&mut T> {
|
pub fn get_mut<T>(rc: &mut Rc<T>) -> Option<&mut T> {
|
||||||
if is_unique(rc) {
|
if is_unique(rc) {
|
||||||
let inner = unsafe { &mut **rc._ptr };
|
let inner = unsafe { &mut **rc._ptr };
|
||||||
|
@ -354,7 +354,7 @@ impl<T: Clone> Rc<T> {
|
||||||
/// let mut_five = five.make_unique();
|
/// let mut_five = five.make_unique();
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "alloc")]
|
#[unstable(feature = "rc_extras")]
|
||||||
pub fn make_unique(&mut self) -> &mut T {
|
pub fn make_unique(&mut self) -> &mut T {
|
||||||
if !is_unique(self) {
|
if !is_unique(self) {
|
||||||
*self = Rc::new((**self).clone())
|
*self = Rc::new((**self).clone())
|
||||||
|
@ -652,7 +652,7 @@ impl<T> fmt::Pointer for Rc<T> {
|
||||||
///
|
///
|
||||||
/// See the [module level documentation](./index.html) for more.
|
/// See the [module level documentation](./index.html) for more.
|
||||||
#[unsafe_no_drop_flag]
|
#[unsafe_no_drop_flag]
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "rc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
pub struct Weak<T: ?Sized> {
|
pub struct Weak<T: ?Sized> {
|
||||||
// FIXME #12808: strange names to try to avoid interfering with
|
// FIXME #12808: strange names to try to avoid interfering with
|
||||||
|
@ -663,7 +663,7 @@ pub struct Weak<T: ?Sized> {
|
||||||
impl<T: ?Sized> !marker::Send for Weak<T> {}
|
impl<T: ?Sized> !marker::Send for Weak<T> {}
|
||||||
impl<T: ?Sized> !marker::Sync for Weak<T> {}
|
impl<T: ?Sized> !marker::Sync for Weak<T> {}
|
||||||
|
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "rc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
impl<T: ?Sized> Weak<T> {
|
impl<T: ?Sized> Weak<T> {
|
||||||
|
|
||||||
|
@ -741,7 +741,7 @@ impl<T: ?Sized> Drop for Weak<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "alloc",
|
#[unstable(feature = "rc_weak",
|
||||||
reason = "Weak pointers may not belong in this module.")]
|
reason = "Weak pointers may not belong in this module.")]
|
||||||
impl<T: ?Sized> Clone for Weak<T> {
|
impl<T: ?Sized> Clone for Weak<T> {
|
||||||
|
|
||||||
|
|
|
@ -33,10 +33,11 @@
|
||||||
#![feature(alloc)]
|
#![feature(alloc)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
|
#![feature(heap_api)]
|
||||||
|
#![feature(oom)]
|
||||||
#![feature(ptr_as_ref)]
|
#![feature(ptr_as_ref)]
|
||||||
#![feature(raw)]
|
#![feature(raw)]
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
#![feature(unboxed_closures)]
|
|
||||||
#![cfg_attr(test, feature(test))]
|
#![cfg_attr(test, feature(test))]
|
||||||
|
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
#![feature(alloc)]
|
#![feature(alloc)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
|
#![feature(box_raw)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(copy_lifetime)]
|
#![feature(copy_lifetime)]
|
||||||
#![feature(core)]
|
#![feature(core)]
|
||||||
|
@ -36,6 +37,7 @@
|
||||||
#![feature(core_prelude)]
|
#![feature(core_prelude)]
|
||||||
#![feature(core_slice_ext)]
|
#![feature(core_slice_ext)]
|
||||||
#![feature(core_str_ext)]
|
#![feature(core_str_ext)]
|
||||||
|
#![feature(heap_api)]
|
||||||
#![feature(iter_cmp)]
|
#![feature(iter_cmp)]
|
||||||
#![feature(iter_idx)]
|
#![feature(iter_idx)]
|
||||||
#![feature(iter_order)]
|
#![feature(iter_order)]
|
||||||
|
@ -43,6 +45,7 @@
|
||||||
#![feature(iter_sum)]
|
#![feature(iter_sum)]
|
||||||
#![feature(lang_items)]
|
#![feature(lang_items)]
|
||||||
#![feature(num_bits_bytes)]
|
#![feature(num_bits_bytes)]
|
||||||
|
#![feature(oom)]
|
||||||
#![feature(pattern)]
|
#![feature(pattern)]
|
||||||
#![feature(ptr_as_ref)]
|
#![feature(ptr_as_ref)]
|
||||||
#![feature(raw)]
|
#![feature(raw)]
|
||||||
|
|
|
@ -169,10 +169,11 @@
|
||||||
html_playground_url = "http://play.rust-lang.org/")]
|
html_playground_url = "http://play.rust-lang.org/")]
|
||||||
#![deny(missing_docs)]
|
#![deny(missing_docs)]
|
||||||
|
|
||||||
#![feature(alloc)]
|
#![feature(box_raw)]
|
||||||
#![feature(staged_api)]
|
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
|
#![feature(const_fn)]
|
||||||
#![feature(iter_cmp)]
|
#![feature(iter_cmp)]
|
||||||
|
#![feature(staged_api)]
|
||||||
#![feature(std_misc)]
|
#![feature(std_misc)]
|
||||||
|
|
||||||
use std::boxed;
|
use std::boxed;
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
||||||
html_root_url = "http://doc.rust-lang.org/nightly/")]
|
html_root_url = "http://doc.rust-lang.org/nightly/")]
|
||||||
|
|
||||||
#![feature(alloc)]
|
|
||||||
#![feature(associated_consts)]
|
#![feature(associated_consts)]
|
||||||
#![feature(collections)]
|
#![feature(collections)]
|
||||||
|
#![feature(rc_weak)]
|
||||||
#![feature(rustc_diagnostic_macros)]
|
#![feature(rustc_diagnostic_macros)]
|
||||||
#![feature(rustc_private)]
|
#![feature(rustc_private)]
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
||||||
html_root_url = "http://doc.rust-lang.org/nightly/")]
|
html_root_url = "http://doc.rust-lang.org/nightly/")]
|
||||||
|
|
||||||
#![feature(alloc)]
|
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(collections)]
|
#![feature(collections)]
|
||||||
|
@ -40,6 +39,7 @@
|
||||||
#![feature(path_relative_from)]
|
#![feature(path_relative_from)]
|
||||||
#![feature(path_relative_from)]
|
#![feature(path_relative_from)]
|
||||||
#![feature(quote)]
|
#![feature(quote)]
|
||||||
|
#![feature(rc_weak)]
|
||||||
#![feature(rustc_diagnostic_macros)]
|
#![feature(rustc_diagnostic_macros)]
|
||||||
#![feature(rustc_private)]
|
#![feature(rustc_private)]
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
|
|
|
@ -107,6 +107,7 @@
|
||||||
#![feature(allow_internal_unstable)]
|
#![feature(allow_internal_unstable)]
|
||||||
#![feature(associated_consts)]
|
#![feature(associated_consts)]
|
||||||
#![feature(borrow_state)]
|
#![feature(borrow_state)]
|
||||||
|
#![feature(box_raw)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(char_internals)]
|
#![feature(char_internals)]
|
||||||
#![feature(collections)]
|
#![feature(collections)]
|
||||||
|
@ -117,6 +118,7 @@
|
||||||
#![feature(core_prelude)]
|
#![feature(core_prelude)]
|
||||||
#![feature(core_simd)]
|
#![feature(core_simd)]
|
||||||
#![feature(fnbox)]
|
#![feature(fnbox)]
|
||||||
|
#![feature(heap_api)]
|
||||||
#![feature(int_error_internals)]
|
#![feature(int_error_internals)]
|
||||||
#![feature(into_cow)]
|
#![feature(into_cow)]
|
||||||
#![feature(iter_order)]
|
#![feature(iter_order)]
|
||||||
|
@ -126,6 +128,7 @@
|
||||||
#![feature(macro_reexport)]
|
#![feature(macro_reexport)]
|
||||||
#![feature(no_std)]
|
#![feature(no_std)]
|
||||||
#![feature(num_bits_bytes)]
|
#![feature(num_bits_bytes)]
|
||||||
|
#![feature(oom)]
|
||||||
#![feature(optin_builtin_traits)]
|
#![feature(optin_builtin_traits)]
|
||||||
#![feature(rand)]
|
#![feature(rand)]
|
||||||
#![feature(raw)]
|
#![feature(raw)]
|
||||||
|
|
|
@ -37,14 +37,15 @@
|
||||||
#![feature(asm)]
|
#![feature(asm)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(collections)]
|
#![feature(collections)]
|
||||||
#![feature(core)]
|
|
||||||
#![feature(rustc_private)]
|
|
||||||
#![feature(staged_api)]
|
|
||||||
#![feature(std_misc)]
|
|
||||||
#![feature(libc)]
|
|
||||||
#![feature(set_stdio)]
|
|
||||||
#![feature(duration)]
|
#![feature(duration)]
|
||||||
#![feature(duration_span)]
|
#![feature(duration_span)]
|
||||||
|
#![feature(fnbox)]
|
||||||
|
#![feature(iter_cmp)]
|
||||||
|
#![feature(libc)]
|
||||||
|
#![feature(rustc_private)]
|
||||||
|
#![feature(set_stdio)]
|
||||||
|
#![feature(staged_api)]
|
||||||
|
#![feature(std_misc)]
|
||||||
|
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate serialize;
|
extern crate serialize;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue