Skip to content

Commit 511448f

Browse files
authored
Merge pull request #32 from frewsxcv/frewsxcv-the-unstable-book
Replace unstable feature list with link to The Unstable Book.
2 parents fdb0090 + 1e5b1a7 commit 511448f

File tree

1 file changed

+4
-154
lines changed

1 file changed

+4
-154
lines changed

src/attributes.md

+4-154
Original file line numberDiff line numberDiff line change
@@ -472,160 +472,8 @@ This directive informs the compiler that the feature list: `feature1`,
472472
crate-level, not at a module-level. Without this directive, all features are
473473
considered off, and using the features will result in a compiler error.
474474

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].
629477

630478
If a feature is promoted to a language feature, then all existing programs will
631479
start to receive compilation warnings about `#![feature]` directives which enabled
@@ -637,3 +485,5 @@ removed.
637485

638486
If an unknown feature is found in a directive, it results in a compiler error.
639487
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

Comments
 (0)