# 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.