The standard library has a number of unstable features. I had a feeling that some of them have been there for a long time without really being blocked on anything. To find out, I went through all of them and checked.
for i in $(rg 'issue *= *"[^"]*"' -o --no-filename|cut -d'"' -f2|sort -un);
echo "#$i $(curl -s https://api.github.com/repos/rust-lang/rust/issues/$i|jq .title -r)"
This script finds #[unstable] attributes in the repository
and fetches the title of each tracking issue.
As of Rust commit a7170b0412d1baa4e30cb31d1ea326617021f086 (2018-03-16),
there are about a hundred of them.
Classification from there is manual, I may have missed or misjudged some things.
Status unclear based on only a quick look at tracking issues
If you know what needs to happen next for any of these, please write a summary comment in the corresponding issue.
- #27779 Tracking issue for placement new
-
#29625 Tracking issue for Fn traits (
unboxed_closuresfeature) - #30172 Implement placement-in protocol for relevant data structures
- #33577 Tracking issue for std::sync::Once poisoning
-
#42327 Tracking issue for
ops::Try(try_traitfeature) - #48711 Tracking issue for std::process::ExitCode (feature process_exitcode_placeholder)
Stabilization FCP complete, needs a PR
Help wanted!
-
#27726 Tracking issue for access to Formatter alignment
-
#35118 Tracking issue for 128-bit integer support (RFC 1504)
mark-i-m volunteered to make a PR
-
#40895 Tracking issue for the FromUtf8Error::as_bytes
-
#42781 Tracking issue for std::io::Take::set_limit (take_set_limit)
-
#43874 Tracking issue for
String::retain -
#44643 Tracking issue for String::splice
FCP now proposed to stabilize
These did seem not to be blocked on anything. FCP all the things!
- #13226 Tracking Issue: fetch_nand
-
#27741 Tracking issue for
step_bystabilization - #27745 Tracking issue for type_id stabilization
- #31100 BufReader should provide a way to seek without dumping the buffer
- #39480 Tracking issue for (DoubleEnded)?Iterator::rfind
- #40062 Tracking issue for Vec::remove_item
-
#41020 Add methods
[T]::rsplitand[T]::rsplit_mut -
#41263 Tracking issue for
ToOwned::clone_into(toowned_clone_into) - #42818 Tracking issue for ptr::swap_nonoverlapping (library feature swap_nonoverlapping)
- #43570 Tracking issue for RefCell::{replace, swap}
-
#43751 Tracking issue for
mem::unreachable - #44030 Tracking issue for [T]::swap_with_slice feature
- #44324 Entry APIs should have or_default for V: Default
-
#44400 Consider adding a from_micros for
std::time::Duration -
#44608 Tracking issue for Rc::downcast (
rc_downcastfeature) -
#44705 Tracking issue for DoubleEndedIterator::rfold (feature
iter_rfold) - #44971 getpid function
- #45323 BufReader should have an is_empty() method
- #45594 Tracking issue for Iterator::try_fold and try_rfold (feature iterator_try_fold)
-
#45703 Tracking issue for
slice::from_refandslice::from_ref_mut -
#45860 Tracking issue for Option::filter (feature
option_filter) - #46104 Tracking issue for process::parent_id
- #46344 Tracking issue for HashMap::remove_entry
- #46507 Duration should have consistent methods for all units
Looks good to me to stabilize after some more time in Nightly
- #47336 Tracking issue for Box::into_raw_non_null
- #47338 Tracking Issue for Result and Option Conversion
- #47653 Tracking issue for std::ptr::NonNull::cast
- #47960 CondVar wait functions accepting a closure
- #48043 Tracking issue for RFC #2116: fallible collection allocation
- #48111 Tracking issue for Range[Inclusive]::is_empty (feature range_is_empty)
- #48169 Tracking issue for std::iter::repeat_with
- #48213 Tracking issue for Iterator::flatten
- #48320 Tracking issue for non-panicking pow
- #48581 Tracking issue for std::path::Path::ancestors
- #48763 Tracking issue for reversing the bit pattern in an integer
Making progress
-
#27730 Tracking issue for
NonZero/Unique/Sharedstabilization -
#33417 Tracking issue for TryFrom/TryInto traits
Seems close to stabilization-ready, needs some more work
-
#27709 Tracking issue for Ipv{4,6}Addr convenience methods
Needs audit of IETF RFCs and IANA publications to double-check semantics
-
#27747 Tracking issue for
slice_concat_extstabilizationReplace with inherent methods?
-
#30877 Tracking issue for RangeArgument
Move it and
Boundsto libcore: https://github.com/rust-lang/rust/issues/30877#issuecomment-330014651 -
#35729 Tracking issue for the
SliceIndextraitTry to replace range impls with one generic impl on
T: RangeArgument? -
#41758 Tracking issue for Vec::resize_default
Team decision replace with
resize_withtaking a callback. Docs should include a.resize_with(n, Default::default)example. -
#44286 Allow a
HashMapandBTreeMapentry to be replaced.I don’t quite understand the need for this, waiting on reply from author
Needs design decision
-
#27791 Tracking issue for str escaping
API of the returned types. (
Display?Iterator? Both?) -
#35428 Add
is_emptyfunction toExactSizeIteratorWhat trait, if any (v.s. inherent methods), should this be on?
-
#37572 Tracking issue for TrustedLen (
trusted_len)Rename?
-
#41079 Tracking issue for ptr::offset_to
What to do on non-multiple of
size_of -
#43244 Tracking issue for Vec::drain_filter and LinkedList::drain_filter
Taking a range? Naming?
-
#44582 Tracking issue for IP constructors
Changing to associated
constitems requires a bunch of things to beconst fn -
#46588 Tracking issue for std::fs::read, read_string, and write
Naming
-
#47115 Tracking issue for exact_chunks/_mut; slice chunks with exact size
Ignore extra items, or panic if any?
-
#49022 Tracking issue for RFC 1980,
startandendfields of RangeInclusivePublic fields v.s. getter methods
To deprecate?
-
#27800 Tracking issue for channel selection
De-facto deprecated. Servo might be the last user. Can hopefully move to crossbeam-channel soon.
-
#27802 Tracking issue for Read::chars
Design / trade-off space is large. Maybe better served outside of std?
-
#33906 Tracking issue: UTF-8 decoder in libcore
core::str::from_utf8may be sufficient and sometimes better
Likely needs non-trivial implementation or design work
-
#27721 Tracking issue for string patterns
https://github.com/rust-lang/rfcs/pull/2295 “Extend Pattern API to OsStr” proposes changes
-
#27794 Tracking issue for extra linked list methods
A full cursor API is preferred
-
#27812 Tracking issue for crates that are compiler dependencies
Perma-unstable, but may want some mechanism other than
#[unstable]to make unavailable to users. -
#28796 Tracking issue for FnBox()
Desire to stabilize and later deprecated when Box can be made to work, but concern that this would cause trait coherence issues.
-
#32311 Tracking issue for Range*::contains
https://github.com/rust-lang/rust/issues/32311#issuecomment-312388435
-
#32837 Pluggable panic implementations (tracking issue for RFC 1513)
-
#32838 Allocator traits and std::heap
-
#38356 Tracking issue for RFC 1566: Procedural macros
-
#42168 Tracking issue for
step_traitstabilization -
#42788 Tracking issue for
Read::initializerAlex “not sold” on the current design. I tend to agree but don’t have a proposal at the moment
-
#43122 Tracking issue for RFC 2033: Experimentally add coroutines to Rust
-
#43301 Tracking issue for RFC 1937:
?inmain -
#44488 Tracking issue for RFC 2043: Add
align_offsetintrinsic and[T]::align_tofunctionalign_tois not implemented yet -
#44489 Tracking issue for RFC 2070: stable mechanism to specify the behavior of panic! in no-std applications
-
#46316 API convention for blocking-, timeout-, and/or deadline-related functions
Only one new method out of many discussed (proposed?) is implemented.
-
#48556 Tracking issue for stable SIMD in Rust
Waiting on other work
-
#27778 Tracking issue for FixedSizeArray trait
Unnecessary with const generics, to be deprecated
-
#27751 Tracking issue for
rawstabilization (raw::TraitObject)Only
pub struct TraitObject { pub data: *mut (), pub vtable: *mut () }Likely better as conversion APIs Design likely affected by a potential “Custom DST” RFC -
#27732 Tracking issue for DST coercions (coerce_unsized, unsize) stabilization
Awaiting a “Custom DST” RFC?
-
#27783 Tracking issue for location of facade crates
A vision for portability in Rust proposes undoing the facade
-
#29599 Tracking issue for
concat_identsUseless without eager macro expansion (which needs an RFC)
-
#32110 Tracking issue for libcore prelude traits
A vision for portability in Rust proposes undoing the facade
-
#32976 Tracking issue for adding more atomic integer types
Portability lint?
Deprecated + unstable (to remove)
-
#27700 Tracking issue for allocation APIs
Removal PR: https://github.com/rust-lang/rust/pull/49082
-
#27705 Tracking issue for DNS in std::net
Deprecated since 1.25.0, let’s wait a bit more.
-
#34767 Tracking issue for SipHash13/SipHash24
Removal PR: https://github.com/rust-lang/rust/pull/49108
-
#39658 <ctype.h> functions for AsciiExt
Deprecation PR: https://github.com/rust-lang/rust/pull/49109 Unstable methods to remove later
My motivation for doing this is having had my own proposals be accepted, and then stay in unstable limbo for many months for no particular reason.