# Internal Language features
## auto_traits
... complicated, but will probably never be stabilized.
## box_patterns
We currently have them because they are convenient. I don't think they are intended for stabilization and are expected to be subsumed by general deref patterns.
## box_syntax
All usage has been removed from the compiler and standard library. `#[rustc_box] Box::new()` is the new equivalent.
**We should throw it out!**
## doc_notable_trait
Currently used in rustdoc for standard library types. There's some effort to make a more stable version of it: 94909
## dropck_eyepatch
Not very nice solution to the parametric dropck being too strict sometimes. There's an RFC now: https://github.com/rust-lang/rfcs/pull/3390
## fundamental
Something from the most recent balancing of coherence that makes some things work that should work, I don't think it's ever intended to be stabilized?
## link_llvm_intrinsics
> Allows using `#[link_name="llvm.*"]`.
Needed for things like stdarch.
## linkage
The `#[linkage]` attribute. Includes things like weak linking. We should probably stabilize this at some point but there are design concerns.
## needs_panic_runtime
Perma unstable internal thing for panic=abort/unwind.
## packed_bundled_libs
Very recent, though I don't think it belongs under internal feature gates?
## panic_runtime
Again, internal for panic=abort/unwind.
## rustc_allow_const_fn_unstable
standard library `const fn` implementation detail.
## rustc_private
Using the compiler is inherently unstable, nothing to stabilize here (although project stable MIR does go into that direction).
## rustdoc_internals
Implementation detail of rustdoc
## rustdoc_missing_doc_code_examples
rustdoc lint about missing examples, probably doesn't belong in internal features.
## start
Using a custom entry point for a program.
> We'd like to stabilize this, but we need to evaluate the function signature and what commitments we make for which parts of the standard library work.
Comment by Josh Triplett in 2021.
## structural_match
> Subsumed by `StructuralPartialEq`, cannot move to removed until a library feature with the same name exists.
**We should probably do that?**
## unboxed_closures
As an aside: this is about the worst feature name ever
Allows using the `"rust-call"` ABI, needed for the fn traits. There is probably quite some design work to do on those if we plan to stabilize them.
# Target features
T-lang is confused what the status of these is. Needs some organizational cleanup and can probably be pushed towards stabilization afterwards.
# Normal Features
## abi_amdgpu_kernel 51575
From the author:
> In upstream Rust, not likely: I have absolutely no interest in upstreaming anything anymore. I'm (relatively) actively developing my Rust fork which supports AMDGPU however
**Looks like this can be closed.**
## abi_avr_interrupt,abi_msp430_interrupt,abi_x86_interrupt 69664
There's an in-progress RFC for interrupt calling conventions: https://github.com/rust-lang/rfcs/pull/3246. The last activity there was almost a year ago.
## abi_c_cmse_nonsecure_call 81391
No activity for two years. There's an open issue about rustc checking ABI compliance (there are limits) instead of LLVM. No updates on that issue either.
## abi_ptx 38788
There are design concerns and many unresolved questions. Last activity was a year ago.
## adt_const_params 95174
almost ready for stabilization, basically juts needs the `ConstParamTy` trait implemented and to figure out sizedness of const args. see also [pcg-50](https://github.com/rust-lang/project-const-generics/issues/50)
## alloc_error_handler 51540
> The consensus was to not stabilize #[alloc_error_handler] for now and instead make it panic by default as proposed in #66741.
Ongoing design concerns from July 2021.
## arbitrary_self_types 44874
Needs an RFC. There as been an awesome summary in 2022, but not much progress.
## asm_const 93332
Waiting for `inline_const`.
## asm_experimental_arch 93335
Support for more arches in inline assembly. Not much progress, but something we clearly want.
## asm_unwind 93334
Waiting for `extern "C-unwind"`.
## associated_const_equality 92827
Fairly recent without too much progress.
## associated_type_bounds 52662
The implementation is incomplete.
> We might want to add this to the types team agenda.
by Josh Triplett.
## associated_type_defaults 29661
T-lang is unsure about the status and there seems to be a lot of work to do.
## async_closure 62290
The status seems unclear.
## async_fn_in_trait 91611
Recent feature with design left to do around `Send` bounds.
## c_unwind 74990
About to be stabilized.
## c_variadic 44930
> Tagging as ready-to-stabilize based on previous lang discussion.
by Josh Triplett in March 2022.
## capture_disjoint_fields 53488
This is marked as incomplete, so there's still lots of work to d- it's stabilized. Why is there still a language feature open??????????????
**The feature can be marked as accepted.**
## cfg_sanitize 39699
No one knows about the status of this. But since `-Zsanitize` is still unstable, it's probably at least blocked on that
## cfg_target_abi 80970
There don't seem to be any blockers. Last activity in July 2022.
## cfg_target_compact 96901
Like `cfg_target_abi` but better! Except part of the RFC that added this was withdrawn! I have no idea! This badly needs a summary.
## cfg_target_has_atomic 94039
Added in Feburary 2022, no updates.
## cfg_target_has_atomic_equal_alignment
Added for `Atomic*::from_mut`. No updates since Februrary 2022.
## cfg_target_thread_local 29594
For `#[thread_local]`. Seems weird to have a dedicated feature for the cfg part.
## cfg_version 64796
There is a lot of discussion. Last comment:
> It looks like cfg(accessible(...)) may be at a state where we could stabilize enough of it to be generally useful, and what's available is enough that I'd consider it to unblock this. #64797
by Josh Triplett in June 2022.
## closure_lifetime_binder 97362
Less than a year old, there still seems to be some work to do.
## closure_track_caller 87417
Basically needs the `stmt_expr_attributes` feature to work.
## cmse_nonsecure_entry 75835
> We discussed this in today's @rust-lang/lang meeting. We felt like an extern "ABI" does make sense for most of the functionality of this. What's left sounds like the generation of a special symbol, and it's not clear if we should have that as a built-in attribute, a library attribute, or something in a crate.
by Josh Triplett in July 2022
## collapse_debuginfo 100758
No acticity since August 2022. Maybe wg-debugging knows more, since they started that feature.
## const_async_blocks 85368
A major blocker is being removed in #104826.
## const_closures 106003
Very recent.
## const_eval_limit 67217
There has been recent discussion on this in #93481.
## const_extern_fn 64926
``"Rust"`` and `"C"` are stable - no blockers for the rest.
**This should be stabilized**
## const_fn_floating_point_arithmetic 57241
This feature... has had quite a journey so far and will continue on that journey. The cool RFC https://github.com/rust-lang/rfcs/pull/3352 will be very relevant here, the author of that RFC should get more active there instead of doing backlog bonanzas >:(
## const_for 87575
Blocked on `const_trait_impl`
## const_mut_refs 57349
People are currently working on fixing the last blocker.
## const_precise_live_drops 73255
There are still concerns around drop elaboration and optimizations, FCP was cancelled.
## const_refs_to_cell 80384
Same as `const_mut_refs`.
## const_trait_impl 67792
The tracking issue was locked because of too many off-topic comments, work is slowly but steadily progressing.
## const_try 74935
Probably needs `const_trait_impl`.
## custom_inner_attributes 54726
There are open questions around the scope of the macro. Not much recent activity but tons of backreferences from random projects (thank you GitHub).
## custom_test_frameworks 50297
The tracking issue was closed in April 2022 due to lack of activity on the experiment. Someone expressed interested in drafting a T-lang MCP but no activity since then.
## debugger_visualizer 95939
Needs an implementation, someone claimed it in February 2023.
## decl_macro 39412
...yeah, that feature. Not much relevant activity since forever, but everyone would love to get it. It needs some serious design work.
## default_type_parameter_fallback
> this issue has been stalled on disagreements about how to handle a nasty problem found during implementation. https://internals.rust-lang.org/t/interaction-of-user-defined-and-integral-fallbacks-with-inference/2496
## deprecated_safe 94978
Mostly for `env::set_var`, which is unsound in some circumstances. The author of the tracking issue deleted their Github account. There's some work to do for designing all of this.
## deprecated_suggestion 94785
Already part of `rustc_deprecated`, added in March 2022 with no activity since then.
**Seems ready for stabilization**
## do_not_recommend 51992
There has been lots of work happening in that space with the `diagnostics` namespace, this will probably become part of that work.
## doc_auto_cfg 43781
There's still discussion on whether it should be on by default, but the last activity on that was in late 2022. An RFC has started to be written.
## doc_cfg 43781
See `doc_auto_cfg`.
## doc_cfg_hide 43781
See `doc_auto_cfg`.
## doc_masked 44027
The tracking issue doesn't follow the tracking issue label and I don't even know what this feature does.
Looking a bit more, it seems like it exists to avoid showing impls linked via `extern crate` in docs? And it was mostly implemented for `std`.
## dyn_star 102425
Recent feature, part of the effort towards dyn async fn in trait.
## exclusive_range_pattern 37854
There has been some recent confusion on what's needed for stabilization. It seems like all the questions about syntax have been resolved, except for some people wanting to bikeshed Rusts range syntax again.
**This deserves a closer lang look**
## exhaustive_patterns 51085
> I do feel we need the never patterns feature -- or some equivalent thing. This is probably just blocked on never being stabilized.
by Niko Matsakis in May 2021
## extended_varargs_abi_support 100189
No activity since when it was opened in August 2022.
## extern_types 43467
> The conclusion from a previous lang team meeting was that the correct answers to a bunch of the hard questions here is tied to custom DSTs and we should attempt to find the minimum possible thing to stabilise. However the alignment issues makes deciding what that minimum thing is difficult. Especially as custom DSTs may never land.
From a great summary in August 2022
## ffi_const 58328
> Is this fully implemented and ready for potential stabilization, or is there any blocker?
by Josh Triplett in June 2022. No response.
## ffi_pure 58329
Same as `ffi_const`.
## ffi_returns_twice 58314
Looks like this is actually a horrible bad not good hack and the tracking issue and RFC was closed in June 2022. The ffi-unwind project is looking at this.
**The feature can be removed**
## fn_align 82232
No real activity since August 2021. It should be extended to also support methods, no blockers otherwise.
## generator_clone 95360
There's an unsoundness together with box_syntax: https://github.com/rust-lang/rust/issues/105084. Otherwise, no activity on the tracking issue since when it was opened in March 2022. Probably blocked on generators anyways. The possible interactions with async blocks are not mentioned.
## generators 43122
Some activity 2022, without many updates. It still needs lots of design work.
## generic_arg_infer 85077
No progress in 2022, but seems to be ready.
note: not actually ready, the impl is error prone and we need refactorings in the compiler to be more sure that the current impl is maintainable - boxy
## generic_associated_types_extended 95451
No activity since GAT stabilization, but T-types is probably tracking this.
## generic_const_exprs 76560
not fully implemented and the things that are implemented are broken in hard/impossible to fix ways. likely to be removed and replaced by a not-yet implemented `min_generic_const_exprs` (see also [pcg-50](https://github.com/rust-lang/project-const-generics/issues/50))
## half_open_range_patterns_in_slices 67264
The main part was stabilized, only the in_slices part remains unstable. The status is unclear.
## if_let_guard 51114
The implementation was pretty broken recently. It seems to have been mostly fixed and tests were added, but some semantics are still unclear.
## impl_trait_in_fn_trait_return 99697
Was added in July 2022, no activity since then. There are unresolved questions.
## impl_trait_projections 103532
Was added in October 2022, no activity since then. Also no unresolved questions listed.
## imported_main 28937
Implemented in 2021 (that took a while :D), no concerns known. Seems to be ready to stabilize!
**Stabilize it**
## inherent_associated_types 8995
A four-digit issue number, wooow. After only 10 years (basically nothing), work on implementing it has finally started and is currently happening (as we speak).
## inline_const 76001
On its way towards stabilization, but there are concerns around post-mono errors.
## inline_const_pat 76001
Blocked on `inline_const`.
## intra_doc_pointers 80896
rustdoc, no activity since May 2021.
## large_assignments 83518
There are some remaining design questions and work to do.
## let_chains 53667
Almost stabilized, then ripped out of beta because they were broken. They should be fixed now, but more testing is needed.
## link_cfg 37406
That linked issue is wrong. It's https://github.com/rust-lang/rust/issues/72059 now which mentions that this should be perma-unstable.
**Fix the issue number**
## lint_reasons 54503
Lang team design meeting proposed: https://github.com/rust-lang/lang-team/issues/191
## macro_metavar_expr 83527
Part of it (`$$`) was about to be stabilized but then reverted due to `$$crate`. There seems to be plenty of discussion, altough it seems that `${ignore()}` is almost uncontroversial and may be stabilized soon.
## marker_trait_attr 29864
> @SamPruden I'd also like to see this stabilize. It looks like there's at least one open issue that probably blocks it, though: F-marker_trait_attr
By scottmcm in May 2022. Requires a little more attention but seems to be close now?
## min_specialization 31844
> 499 hidden items
No comment on specialization, other than GitHub issues being really bad to navigate the precise state of the feature.
## more_qualified_paths 86935
> This seems like it may be ready to stabilize. Could we get a stabilization report and documentation PR?
by Josh Triplett in July 2022. Spoiler: we could not. Needs a stabilization report.
## must_not_suspend 83310
No comments since 2021, but tmandry did add it to a wg-async work project, so there seems to be some attention now.
## naked_functions 32408
The linked issue was closed, we now have a different one, 90957, which was FCP-merged in July 2022 but then there was some more discussion and things and it seems to be stuck now since then.
**Update the issue**
## native_link_modifiers_as_needed 81490
The linked tracking issue was closed in favor of 99424 for this.
> AFAIK, it's still not implemented on some tier 1 platforms (Apple targets).
by petrochenkov in Nov 2022.
## negative_impls 68318
Another one of those old major complicated features, plenty of those out there.
## never_type 35121
The tragedy. We basically must implement type inference fallback to be `!` instead of `()` but can't because that makes code sad.
## never_type_fallback 65992
See `never_type`
## no_core 29639
The one benefit is that `cfg-if` could use it and become a normal cargo dep of `core`. But there isn't much benefit otherwise.
## no_coverage 84605
> We talked about this in today's @rust-lang/lang meeting.
We do think it makes sense to make this coverage(off) and leave room for other coverage arguments in the future.
Apart from that, if someone wants to write a stabilization report, we'd be happy to stabilize this.
by Josh Triplett in July 2022
## no_sanitize 39699
Part of sanitizers. Not much to say about this specifically.
## non_exhaustive_omitted_patterns_lint 89554
The status of it seems unclear, there's been some name bikeshedding in 2022.
## non_lifetime_binders 108185
Very recent.
## object_safe_for_dispatch 43561
No activity since 2019 except
> Paging @nikomatsakis, it would help to have a summary of this to know what state it's in and whether it's on a path to stabilization.
by Josh Triplett in February 2022.
## optimize_attribute 54882
There are some unresolved questions about propagation of the attribute and similar attributes in June 2022.
## platform_intrinsics 27731
Part of core SIMD. I have no idea whether this is ever intended to be stabilized or just an implementation detail.
## plugin 29597
The plugin infrastructure is kinda deprecated, but servo and rmc still use it.
## precise_pointer_size_matching 56354
Not much activity since 2021, seems to need an RFC and better motivation.
## proc_macro_hygiene 54727
Needs a summary on the tracking issue and possibly splitting it, but the def_site hygiene requires more detailed hygiene work (which decl_macro also needs).
## raw_dylib 58713
Stabilized on all platforms but x86 (32) now.
## raw_ref_op 64490
Implementation detail of `addr_of{_mut}` for now. There are some small unresolved questions, but can probably pushed towards stabilization with some work.
## register_tool 66079
Needs an RFC as there are plenty of questions.
## repr128 56071
Enums with `#[repr(u128)]`.
There were problems with LLVM debuginfo. These are now fixed for fieldless enums, but not for enums with fields.
## repr_simd 27731
As with all SIMD things, the linked tracking issues aren't helpful :/.
## return_position_impl_trait_in_trait 91611
Fairly new. There were a few issues with default bodies that seem to be fixed now.
## rust_cold_cc 97544
This was added in May 2022. Apparently there's a bug in it that was found recently.
## simd_ffi 27731
I can't comment on SIMD issues.
**Clean up SIMD tracking issues and features**
## specialization 31844
`min_specialization` but worse.
## stmt_expr_attributes 15701
Everyone is saying that it would be cool but noe response to Niko's request for a summary all the way back in November 2021.
**Needs a summary**
## strict_provenance 95228
There was an attempt to stabilize the "memory model uncontroversial" part but it was rejected and is mostly waiting on the memory model now (or at least at the subset of the memory model that says how int2ptr casts work).
## string_deref_patterns 87121
There are still many design concerns around deref patterns, this feature implements a small subset for `String` only.
## target_feature_11 69098
Stabilization PR FCP was completed and the RFC has just been approved while I was writing this.
## thread_local 29594
There may be soundness issues with this feature.
## trait_alias 41517
Should be in the backlog for T-types now.
## trait_upcasting 65991
Was turned into an RFC and approved in December 2022, so there seems to be work going on.
## transparent_unions 60405
There are design concerns about how it interacts with the initness requirements for unions.
## trivial_bounds 48214
> I'm trying to figure out the current state of this feature. What's the current status of trivial_bounds? Are there still blocking issues that would prevent this from being stabilized? Or does this just need a stabilization report and FCP?
The last update I found about blocking concerns, across the several issues about this, seems to be from 2019 talking about limitations in chalk.
by Josh Triplett in February 2023
## try_blocks 31436
There is still some design work to do around `?`. The most recent update was the experimental addition of `do yeet`.
## type_alias_impl_trait 63063
Was getting very close to stabilization, now there are a few questions about the possible ways where the hidden type can be defined.
## type_ascription 23416
Was de-RFCed. It's about to be removed from the frontend of the compiler, but the rest will stay for now as future better syntax may make it relevant again.
## type_changing_struct_update 86555
There's a type inference failure regression from it and no clear consensus on how it should be resolved.
## unix_sigpipe 97889
Added in June 2022, some unresolved questions remaining.
## unsized_fn_params 48055
There are some questions but the status seeems unclear to me.
## unsized_locals 48055
Needed for `<Box<dyn FnOnce> as FnOnce>` for now, but it's not clear whether we ever want to stabilize it.
## unsized_tuple_coercion 42877
T-lang noted some concerns in January 2022.
## used_with_arg 93798
Added in February 2022. There are some unresolved questions.
## wasm_abi 83788
The status seems unclear, but there's some question about whether we should wait for C to do this.
## yeet_expr 96373
I did it, yeet! Part of of the `?` effort.