@@ -2377,21 +2377,33 @@ considered off, and using the features will result in a compiler error.
23772377
23782378The currently implemented features of the reference compiler are:
23792379
2380+ * ` advanced_slice_patterns ` - see the [ match expressions] ( #match-expressions )
2381+ section for discussion; the exact semantics of
2382+ slice patterns are subject to change.
2383+
23802384* ` asm ` - The ` asm! ` macro provides a means for inline assembly. This is often
23812385 useful, but the exact syntax for this feature along with its
23822386 semantics are likely to change, so this macro usage must be opted
23832387 into.
23842388
2389+ * ` associated_types ` - Allows type aliases in traits. Experimental.
2390+
2391+ * ` box_patterns ` - Allows ` box ` patterns, the exact semantics of which
2392+ is subject to change.
2393+
2394+ * ` box_syntax ` - Allows use of ` box ` expressions, the exact semantics of which
2395+ is subject to change.
2396+
23852397* ` concat_idents ` - Allows use of the ` concat_idents ` macro, which is in many
23862398 ways insufficient for concatenating identifiers, and may be
23872399 removed entirely for something more wholesome.
23882400
2389- * ` default_type_params ` - Allows use of default type parameters. The future of
2390- this feature is uncertain.
2391-
23922401* ` intrinsics ` - Allows use of the "rust-intrinsics" ABI. Compiler intrinsics
23932402 are inherently unstable and no promise about them is made.
23942403
2404+ * ` int_uint ` - Allows the use of the ` int ` and ` uint ` types, which are deprecated.
2405+ Use ` isize ` and ` usize ` instead.
2406+
23952407* ` lang_items ` - Allows use of the ` #[lang] ` attribute. Like ` intrinsics ` ,
23962408 lang items are inherently unstable and no promise about them
23972409 is made.
@@ -2410,12 +2422,33 @@ The currently implemented features of the reference compiler are:
24102422* ` log_syntax ` - Allows use of the ` log_syntax ` macro attribute, which is a
24112423 nasty hack that will certainly be removed.
24122424
2425+ * ` main ` - Allows use of the ` #[main] ` attribute, which changes the entry point
2426+ into a Rust program. This capabiilty is subject to change.
2427+
2428+ * ` macro_reexport ` - Allows macros to be re-exported from one crate after being imported
2429+ from another. This feature was originally designed with the sole
2430+ use case of the Rust standard library in mind, and is subject to
2431+ change.
2432+
24132433* ` non_ascii_idents ` - The compiler supports the use of non-ascii identifiers,
24142434 but the implementation is a little rough around the
24152435 edges, so this can be seen as an experimental feature
24162436 for now until the specification of identifiers is fully
24172437 fleshed out.
24182438
2439+ * ` no_std ` - Allows the ` #![no_std] ` crate attribute, which disables the implicit
2440+ ` extern crate std ` . This typically requires use of the unstable APIs
2441+ behind the libstd "facade", such as libcore and libcollections. It
2442+ may also cause problems when using syntax extensions, including
2443+ ` #[derive] ` .
2444+
2445+ * ` on_unimplemented ` - Allows the ` #[rustc_on_unimplemented] ` attribute, which allows
2446+ trait definitions to add specialized notes to error messages
2447+ when an implementation was expected but not found.
2448+
2449+ * ` optin_builtin_traits ` - Allows the definition of default and negative trait
2450+ implementations. Experimental.
2451+
24192452* ` plugin ` - Usage of [ compiler plugins] [ plugin ] for custom lints or syntax extensions.
24202453 These depend on compiler internals and are subject to change.
24212454
@@ -2431,8 +2464,15 @@ The currently implemented features of the reference compiler are:
24312464* ` simd ` - Allows use of the ` #[simd] ` attribute, which is overly simple and
24322465 not the SIMD interface we want to expose in the long term.
24332466
2467+ * ` simd_ffi ` - Allows use of SIMD vectors in signatures for foreign functions.
2468+ The SIMD interface is subject to change.
2469+
24342470* ` staged_api ` - Allows usage of stability markers and ` #![staged_api] ` in a crate
24352471
2472+ * ` start ` - Allows use of the ` #[start] ` attribute, which changes the entry point
2473+ into a Rust program. This capabiilty, especially the signature for the
2474+ annotated function, is subject to change.
2475+
24362476* ` struct_inherit ` - Allows using struct inheritance, which is barely
24372477 implemented and will probably be removed. Don't use this.
24382478
@@ -2460,18 +2500,20 @@ The currently implemented features of the reference compiler are:
24602500 which is considered wildly unsafe and will be
24612501 obsoleted by language improvements.
24622502
2503+ * ` unsafe_no_drop_flag ` - Allows use of the ` #[unsafe_no_drop_flag] ` attribute,
2504+ which removes hidden flag added to a type that
2505+ implements the ` Drop ` trait. The design for the
2506+ ` Drop ` flag is subject to change, and this feature
2507+ may be removed in the future.
2508+
24632509* ` unmarked_api ` - Allows use of items within a ` #![staged_api] ` crate
24642510 which have not been marked with a stability marker.
24652511 Such items should not be allowed by the compiler to exist,
24662512 so if you need this there probably is a compiler bug.
24672513
2468- * ` associated_types ` - Allows type aliases in traits. Experimental.
2469-
2470- * ` no_std ` - Allows the ` #![no_std] ` crate attribute, which disables the implicit
2471- ` extern crate std ` . This typically requires use of the unstable APIs
2472- behind the libstd "facade", such as libcore and libcollections. It
2473- may also cause problems when using syntax extensions, including
2474- ` #[derive] ` .
2514+ * ` visible_private_types ` - Allows public APIs to expose otherwise private
2515+ types, e.g. as the return type of a public function.
2516+ This capability may be removed in the future.
24752517
24762518If a feature is promoted to a language feature, then all existing programs will
24772519start to receive compilation warnings about #[ feature] directives which enabled
0 commit comments