@@ -472,160 +472,8 @@ This directive informs the compiler that the feature list: `feature1`,
472
472
crate-level, not at a module-level. Without this directive, all features are
473
473
considered off, and using the features will result in a compiler error.
474
474
475
- The currently implemented features of the reference compiler are:
476
-
477
- * ` advanced_slice_patterns ` - See the [ match
478
- expressions] ( expressions.html#match-expressions )
479
- section for discussion; the exact semantics of
480
- slice patterns are subject to change, so some types are still unstable.
481
-
482
- * ` slice_patterns ` - OK, actually, slice patterns are just scary and
483
- completely unstable.
484
-
485
- * ` asm ` - The ` asm! ` macro provides a means for inline assembly. This is often
486
- useful, but the exact syntax for this feature along with its
487
- semantics are likely to change, so this macro usage must be opted
488
- into.
489
-
490
- * ` associated_consts ` - Allows constants to be defined in ` impl ` and ` trait `
491
- blocks, so that they can be associated with a type or
492
- trait in a similar manner to methods and associated
493
- types.
494
-
495
- * ` box_patterns ` - Allows ` box ` patterns, the exact semantics of which
496
- is subject to change.
497
-
498
- * ` box_syntax ` - Allows use of ` box ` expressions, the exact semantics of which
499
- is subject to change.
500
-
501
- * ` cfg_target_vendor ` - Allows conditional compilation using the ` target_vendor `
502
- matcher which is subject to change.
503
-
504
- * ` cfg_target_has_atomic ` - Allows conditional compilation using the ` target_has_atomic `
505
- matcher which is subject to change.
506
-
507
- * ` concat_idents ` - Allows use of the ` concat_idents ` macro, which is in many
508
- ways insufficient for concatenating identifiers, and may be
509
- removed entirely for something more wholesome.
510
-
511
- * ` custom_attribute ` - Allows the usage of attributes unknown to the compiler
512
- so that new attributes can be added in a backwards compatible
513
- manner (RFC 572).
514
-
515
- * ` custom_derive ` - Allows the use of ` #[derive(Foo,Bar)] ` as sugar for
516
- ` #[derive_Foo] #[derive_Bar] ` , which can be user-defined syntax
517
- extensions.
518
-
519
- * ` inclusive_range_syntax ` - Allows use of the ` a...b ` and ` ...b ` syntax for inclusive ranges.
520
-
521
- * ` inclusive_range ` - Allows use of the types that represent desugared inclusive ranges.
522
-
523
- * ` intrinsics ` - Allows use of the "rust-intrinsics" ABI. Compiler intrinsics
524
- are inherently unstable and no promise about them is made.
525
-
526
- * ` lang_items ` - Allows use of the ` #[lang] ` attribute. Like ` intrinsics ` ,
527
- lang items are inherently unstable and no promise about them
528
- is made.
529
-
530
- * ` link_args ` - This attribute is used to specify custom flags to the linker,
531
- but usage is strongly discouraged. The compiler's usage of the
532
- system linker is not guaranteed to continue in the future, and
533
- if the system linker is not used then specifying custom flags
534
- doesn't have much meaning.
535
-
536
- * ` link_llvm_intrinsics ` - Allows linking to LLVM intrinsics via
537
- ` #[link_name="llvm.*"] ` .
538
-
539
- * ` linkage ` - Allows use of the ` linkage ` attribute, which is not portable.
540
-
541
- * ` log_syntax ` - Allows use of the ` log_syntax ` macro attribute, which is a
542
- nasty hack that will certainly be removed.
543
-
544
- * ` main ` - Allows use of the ` #[main] ` attribute, which changes the entry point
545
- into a Rust program. This capability is subject to change.
546
-
547
- * ` macro_reexport ` - Allows macros to be re-exported from one crate after being imported
548
- from another. This feature was originally designed with the sole
549
- use case of the Rust standard library in mind, and is subject to
550
- change.
551
-
552
- * ` non_ascii_idents ` - The compiler supports the use of non-ascii identifiers,
553
- but the implementation is a little rough around the
554
- edges, so this can be seen as an experimental feature
555
- for now until the specification of identifiers is fully
556
- fleshed out.
557
-
558
- * ` no_std ` - Allows the ` #![no_std] ` crate attribute, which disables the implicit
559
- ` extern crate std ` . This typically requires use of the unstable APIs
560
- behind the libstd "facade", such as libcore and libcollections. It
561
- may also cause problems when using syntax extensions, including
562
- ` #[derive] ` .
563
-
564
- * ` on_unimplemented ` - Allows the ` #[rustc_on_unimplemented] ` attribute, which allows
565
- trait definitions to add specialized notes to error messages
566
- when an implementation was expected but not found.
567
-
568
- * ` optin_builtin_traits ` - Allows the definition of default and negative trait
569
- implementations. Experimental.
570
-
571
- * ` plugin ` - Usage of [ compiler plugins] [ plugin ] for custom lints or syntax extensions.
572
- These depend on compiler internals and are subject to change.
573
-
574
- * ` plugin_registrar ` - Indicates that a crate provides [ compiler plugins] [ plugin ] .
575
-
576
- * ` quote ` - Allows use of the ` quote_*! ` family of macros, which are
577
- implemented very poorly and will likely change significantly
578
- with a proper implementation.
579
-
580
- * ` rustc_attrs ` - Gates internal ` #[rustc_*] ` attributes which may be
581
- for internal use only or have meaning added to them in the future.
582
-
583
- * ` rustc_diagnostic_macros ` - A mysterious feature, used in the implementation
584
- of rustc, not meant for mortals.
585
-
586
- * ` simd ` - Allows use of the ` #[simd] ` attribute, which is overly simple and
587
- not the SIMD interface we want to expose in the long term.
588
-
589
- * ` simd_ffi ` - Allows use of SIMD vectors in signatures for foreign functions.
590
- The SIMD interface is subject to change.
591
-
592
- * ` start ` - Allows use of the ` #[start] ` attribute, which changes the entry point
593
- into a Rust program. This capability, especially the signature for the
594
- annotated function, is subject to change.
595
-
596
- * ` thread_local ` - The usage of the ` #[thread_local] ` attribute is experimental
597
- and should be seen as unstable. This attribute is used to
598
- declare a ` static ` as being unique per-thread leveraging
599
- LLVM's implementation which works in concert with the kernel
600
- loader and dynamic linker. This is not necessarily available
601
- on all platforms, and usage of it is discouraged.
602
-
603
- * ` trace_macros ` - Allows use of the ` trace_macros ` macro, which is a nasty
604
- hack that will certainly be removed.
605
-
606
- * ` unboxed_closures ` - Rust's new closure design, which is currently a work in
607
- progress feature with many known bugs.
608
-
609
- * ` allow_internal_unstable ` - Allows ` macro_rules! ` macros to be tagged with the
610
- ` #[allow_internal_unstable] ` attribute, designed
611
- to allow ` std ` macros to call
612
- ` #[unstable] ` /feature-gated functionality
613
- internally without imposing on callers
614
- (i.e. making them behave like function calls in
615
- terms of encapsulation).
616
-
617
- * ` default_type_parameter_fallback ` - Allows type parameter defaults to
618
- influence type inference.
619
-
620
- * ` stmt_expr_attributes ` - Allows attributes on expressions.
621
-
622
- * ` type_ascription ` - Allows type ascription expressions ` expr: Type ` .
623
-
624
- * ` abi_vectorcall ` - Allows the usage of the vectorcall calling convention
625
- (e.g. ` extern "vectorcall" func fn_(); ` )
626
-
627
- * ` abi_sysv64 ` - Allows the usage of the system V AMD64 calling convention
628
- (e.g. ` extern "sysv64" func fn_(); ` )
475
+ The currently implemented features of the reference compiler are documented in
476
+ [ The Unstable Book] .
629
477
630
478
If a feature is promoted to a language feature, then all existing programs will
631
479
start to receive compilation warnings about ` #![feature] ` directives which enabled
@@ -637,3 +485,5 @@ removed.
637
485
638
486
If an unknown feature is found in a directive, it results in a compiler error.
639
487
An unknown feature is one which has never been recognized by the compiler.
488
+
489
+ [ The Unstable Book ] : https://doc.rust-lang.org/nightly/unstable-book/
0 commit comments