Description
This is a tracking metabug for stabilization of both APIs and gated features.
API stabilization for libstd
First pass stabilization/reform
For simpler/mostly stable APIs (core types, iterators), stabilization is mostly a matter of aligning with conventions and deprecating marginal methods and takes place directly under the supervision of the core team. For deeper redesign, RFCs are needed. Where applicable, the list below points to the relevant RFC.
Most APIs with a chechmark are still #unstable
, either due to developing conventions, lack of language features (e.g. unboxed closures), or some other problem. We plan to do a rapid second pass closer to the 1.0.0 beta.
(You can track the following list quantitatively, though the fact that trait impls count exaggerates the amount of #[experimental]
items.)
Items are marked complete when a PR/RFC has been posted -- this is just tracking the design work.
-
any
- std: Stabilize unit, bool, ty, tuple, arc, any #15936 -
ascii
(see RFC) -
bitflags
(see RFC) -
bool
- std: Stabilize unit, bool, ty, tuple, arc, any #15936 -
borrow
(see RFC) -
boxed
- Stabilization forowned
(nowboxed
) andcell
#15591 -
c_str
(see RFC) -
c_vec
(see RFC) -
cell
- Stabilization forowned
(nowboxed
) andcell
#15591 -
char
- Some stabilization and conventions changes to std::char #18603 -
clone
- core: Add stability attributes to Clone #15135 -
cmp
- Stability for core::cmp, core::default, alloc::rc, std::task #15797 (see RFC) -
collections
(see RFC) -
comm
- Apply stability attributes to std::comm #15286 -
default
- Stability for core::cmp, core::default, alloc::rc, std::task #15797 -
dynamic_lib
(#[unstable]
) -
error
(see RFC) -
f32
,f64
(see RFC) -
finally
(#[unstable]
) -
fmt
(see RFC) -
hash
- std: Stabilize the std::hash module #19673 -
i8
,i16
,i32
,i64
,int
(see RFC) -
intrinsics
(#[unstable]
) -
io
(see RFC) -
iter
- libs: stabilize iter module #19176 -
kinds
(punted to second pass) -
thread_local
(see RFC) -
macros
(punted to second pass) -
mem
- core: Finish stabilizing themem
module. #14392 -
num
(see RFC) -
ops
(see RFC) -
option
- stabilize core::{option, result} #16664 -
os
(see RFC) -
path
(see RFC) -
prelude
(see RFC) -
rand
(#[unstable]
) -
raw
(#[unstable]
) -
rc
- Stability for core::cmp, core::default, alloc::rc, std::task #15797 -
result
- stabilize core::{option, result} #16664 -
rt
(#[unstable]
) -
simd
(#[unstable]
) -
slice
- Cleanup and stability for core::slice #16332 -
str
- std: Stabilize the std::str module #19741, (see RFC) -
string
- collections: Stabilize String #17438 -
sync
- std: Rewrite thesync
module #19274 -
task
(see RFC) -
time
(punted to third pass) -
tuple
- (likely to be deprecated before 1.0), std: Stabilize unit, bool, ty, tuple, arc, any #15936 -
u8
,u16
,u32
,u64
,uint
(see RFC) -
unit
- std: Stabilize unit, bool, ty, tuple, arc, any #15936 -
vec
- collections: Stabilize Vec #17029
Second pass stabilization: for alpha
The second pass is about actually moving APIs to #[stable]
status; it may involve a bit of minor shuffling, but any major design work should have already taken place. In many cases APIs were blocked on language features (like unboxed closures) before moving to this status.
-
(any
#[unstable
for alpha) -
(ascii
#[unstable]
for alpha) -
(see RFC)bitflags
-
bool
- acrichto std: Remove public bool,tuple,unit modules #20006 -
(borrow
#[unstable]
for alpha) -
boxed
- acrichto std: Second pass stabilization forboxed
#20420 -
c_str
- acrichto std: Redesign c_str and c_vec #20507 -
c_vec
- acrichto std: Redesign c_str and c_vec #20507 -
cell
- aturon Stabilize cell #20066 --std
module mistakenly left experimental -
char
- huonw Second stabilisation pass of*::char
#20395 -
clone
- aturon Stabilize clone #20070 -
cmp
- aturon Stabilize cmp #20065 -
collections
- aturon / @gankro stabilize more of collections #20356 -
comm
- acrichto std: Second pass stabilization forcomm
#20273 -
default
- acrichto std: Second-pass stabilization ofmem
/default
#19902 -
(dynamic_lib
#[unstable]
) -
error
- aturon Stabilize std::error #20647 -
f32
,f64
- aturon (note: already stable; thenum::Float
/FloatMath
traits are the problem point) -
(finally
#[unstable]
) -
fmt
- acrichto -
hash
- acrichto std: Stabilize the std::hash module #20654 -
i8
,i16
,i32
,i64
,int
- aturon Stabilize integer modules #20062 -
(intrinsics
#[unstable]
for alpha) -
(io
#[unstable]
for alpha) -
iter
- aturon Final pre-alpha stabilization of: iter, ops, slice, collections #20560 -
kinds
- aturon/nrc, flatten tomarkers
Changestd::kinds
tostd::markers
; flattenstd::kinds::marker
#20607 -
macros
- acrichto std: Stablize the macros module #20657 -
mem
- acrichto std: Second-pass stabilization ofmem
/default
#19902 -
num
- aturon/huonw Second stabilisation pass of*::num
#20573 -
ops
- aturon Final pre-alpha stabilization of: iter, ops, slice, collections #20560 -
option
- acrichto std: Fully stabilize Option<T> #19849 -
(os
#[unstable]
for alpha) -
(path
#[unstable]
for alpha) -
prelude
- acrichto std: Stabilize the prelude module #20157 -
ptr
- acrichto std: Second pass stabilization forptr
#20042 -
(rand
#[unstable]
for alpha) -
(raw
#[unstable]
for alpha) -
rc
- aturon (complete from pass 1) -
result
- acrichto std: Second pass stabilization of Result<T, E> #19961 -
(rt
#[unstable]
) -
(simd
#[unstable]
) -
slice
- aturon Second pass stabilization: slice and vec #20061, Final pre-alpha stabilization of: iter, ops, slice, collections #20560 -
str
- acrichto std: Stabilize the std::str module #19741 / kimundi WIP Partially stabilizeStrExt
for pattern-using methods #20058 -
string
- acrichto std: Second pass stabilization forstring
#20306 -
sync
- acrichto std: Return Result from RWLock/Mutex methods #19661, std: Second pass stabilization of sync #20315 -
task
(#[deprecated]
) -
thread
- aturon Stabilize std::thread #20615 -
thread_local
- acrichto std: Second pass stabilization for thread_local #20354 -
(thunk
#[unstable]
) -
tuple
- acrichto std: Remove public bool,tuple,unit modules #20006 -
u8
,u16
,u32
,u64
,uint
- aturon Stabilize integer modules #20062 -
unit
- acrichto std: Remove public bool,tuple,unit modules #20006 -
vec
- aturon Second pass stabilization: slice and vec #20061
RFCs for reform
The following RFCs tackle deeper API redesigns:
Accepted
- Error interoperation
- Runtime reform
- Collections reform
- Numerics reform
- Formatting stabilization
- cmp/ops reform
- Path reform
- Thread-local storage reform
- Split
Show
- Prelude stabilization
- Collections reform part 2
- Macro reform
- c_str, c_vec reform
Pending
Non-std
crates
See #18585 (comment)
Just need #[experimental]
We will ship these crates, but will they will participate in #![staged_api]
and will not be accessible in the stable channel.
- alloc
- arena
- collections
- core
- flate
- fmt_macros
- graphviz
- rand
- rbml
- rustc
- rustc_back
- rustc_llvm
- rustc_trans
- rustdoc
- syntax
- unicode
Need Cargo.toml
and a publishing strategy
These crates will all be distributed, but participate in #![staged_api]
. This
means they will not be accessible in the stable channel's standard
distribution, but they will all be available through crates.io.
- getopts - https://github.com/rust-lang/getopts
- libc - libc: Prepare for movement to crates.io #20606
- log - https://github.com/rust-lang/log
- regex - https://github.com/rust-lang/regex
- regex_macros - https://github.com/rust-lang/regex
- term - https://github.com/rust-lang/term
Need cooperation with the standard library due to compiler internals
- serialize - rustc: Start the deprecation of libserialize #19755, https://github.com/rust-lang/rustc-serialize
- test - Finalize story for libtest #20603
Removed or to remove
- green - Finish runtime removal #18967
- native - Finish runtime removal #18967
- rustrt - Replace
std::task
withstd::thread
, remove librustrt, make final "runtime" features lazily initialize #19654 - sync - Merge libsync into libstd #19255
- time - time: Deprecate the library in the distribution #18858
Feature stabilization
Ungating
- Globs
- Tuple indexing (RFC), Remove feature gates for
if let
,while let
, and tuple indexing #19472 - Struct variants (RFC), Un-feature gate struct variants #18994
-
if let
/while let
(RFC), Remove feature gates forif let
,while let
, and tuple indexing #19472 - Macros
- Associated types
- Default type parameters
Removal
- Slicing syntax: should be removed in favor of
ops
reform
CLI Tooling
- command line flags - Stability story of compiler flags #19051, rustc: Start "stabilizing" some flags #19900