about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCorey Richardson <corey@octayn.net>2014-04-04 00:50:36 -0400
committerCorey Richardson <corey@octayn.net>2014-04-04 02:09:49 -0400
commitd2648cc23f34da72be41701d50bc956e4244c77c (patch)
tree93e68f1e7a62d79098a22078e80c63f9cce81a14
parenta86d6b4cc9f19a8ad8fe34a627d5543cdd29230c (diff)
downloadrust-d2648cc23f34da72be41701d50bc956e4244c77c.tar.gz
rust-d2648cc23f34da72be41701d50bc956e4244c77c.zip
manual: further attribute clarifications
- Sort attributes lexicographically
- Use new attribute syntax consistently
- Fix wording describing new attribute syntax
- Expand section on `repr`
-rw-r--r--src/doc/rust.md53
1 files changed, 29 insertions, 24 deletions
diff --git a/src/doc/rust.md b/src/doc/rust.md
index 02acd0acbb5..1ff0d92d19b 100644
--- a/src/doc/rust.md
+++ b/src/doc/rust.md
@@ -610,7 +610,7 @@ and may optionally begin with any number of `attributes` that apply to the conta
 Attributes on the anonymous crate module define important metadata that influences
 the behavior of the compiler.
 
-~~~~
+~~~~ {.rust}
 // Crate ID
 #![crate_id = "projx#2.5"]
 
@@ -1697,7 +1697,7 @@ as any of:
 
 Attributes with a bang ("!") after the hash ("#") apply to the item that the
 attribute is declared within. Attributes that do not have a bang after the
-hash by a semi-colon apply to the next item.
+hash apply to the item that follows the attribute.
 
 An example of attributes:
 
@@ -1729,53 +1729,54 @@ pub type int8_t = i8;
 
 ### Crate-only attributes
 
+- `crate_id` - specify the this crate's crate ID.
 - `crate_type` - see [linkage](#linkage).
 - `feature` - see [compiler features](#compiler-features).
+- `no_main` - disable emitting the `main` symbol. Useful when some other
+  object being linked to defines `main`.
 - `no_start` - disable linking to the `native` crate, which specifies the
   "start" language item.
-- `no_main` - disable emitting the `main` symbol. Useful when some
-  other object being linked to defines `main`.
 - `no_std` - disable linking to the `std` crate.
-- `crate_id` - specify the this crate's crate ID.
 
 ### Module-only attributes
 
-- `path` - specifies the file to load the module from. `#[path="foo.rs"] mod
-  bar;` is equivalent to `mod bar { /* contents of foo.rs */ }`
 - `macro_escape` - macros defined in this module will be visible in the
   module's parent, after this module has been included.
 - `no_implicit_prelude` - disable injecting `use std::prelude::*` in this
   module.
+- `path` - specifies the file to load the module from. `#[path="foo.rs"] mod
+  bar;` is equivalent to `mod bar { /* contents of foo.rs */ }`. The path is
+  taken relative to the directory that the current module is in.
 
 ### Function-only attributes
 
-- `start` - indicates that this function should be used as the entry point,
-  overriding the "start" language item.  See the "start" [language
-  item](#language-items) for more details.
-- `main` - indicates that this function should be passed to the entry point,
-  rather than the function in the crate root named `main`.
 - `macro_registrar` - when using loadable syntax extensions, mark this
   function as the registration point for the current crate's syntax
   extensions.
+- `main` - indicates that this function should be passed to the entry point,
+  rather than the function in the crate root named `main`.
+- `start` - indicates that this function should be used as the entry point,
+  overriding the "start" language item.  See the "start" [language
+  item](#language-items) for more details.
 
 ### Static-only attributes
 
+- `address_insignificant` - references to this static may alias with
+  references to other statics, potentially of unrelated type.
 - `thread_local` - on a `static mut`, this signals that the value of this
   static may change depending on the current thread. The exact consequences of
   this are implementation-defined.
-- `address_insignificant` - references to this static may alias with
-  references to other statics, potentially of unrelated type.
 
 ### FFI attributes
 
 On an `extern` block, the following attributes are interpreted:
 
-- `link` - indicate that a native library should be linked to for the
-  declarations in this block to be linked correctly. See [external
-  blocks](#external-blocks)
 - `link_args` - specify arguments to the linker, rather than just the library
   name and type. This is feature gated and the exact behavior is
   implementation-defined (due to variety of linker invocation syntax).
+- `link` - indicate that a native library should be linked to for the
+  declarations in this block to be linked correctly. See [external
+  blocks](#external-blocks)
 
 On declarations inside an `extern` block, the following attributes are
 interpreted:
@@ -1787,25 +1788,29 @@ interpreted:
 
 ### Miscellaneous attributes
 
-- `simd` - on certain tuple structs, derive the arithmetic operators, which
-  lower to the target's SIMD instructions, if any.
 - `link_section` - on statics and functions, this specifies the section of the
   object file that this item's contents will be placed into.
-- `static_assert` - on statics whose type is `bool`, terminates compilation
-  with an error if it is not initialized to `true`.
-- `repr` - on C-like enums, this sets the underlying type used for
-  representation. Useful for FFI.
+- `macro_export` - export a macro for cross-crate usage.
 - `no_mangle` - on any item, do not apply the standard name mangling. Set the
   symbol for this item to its identifier.
 - `packed` - on structs or enums, eliminate any padding that would be used to
   align fields.
+- `repr` - on C-like enums, this sets the underlying type used for
+  representation. Useful for FFI. Takes one argument, which is the primitive
+  type this enum should be represented for, or `C`, which specifies that it
+  should be the default `enum` size of the C ABI for that platform. Note that
+  enum representation in C is undefined, and this may be incorrect when the C
+  code is compiled with certain flags.
+- `simd` - on certain tuple structs, derive the arithmetic operators, which
+  lower to the target's SIMD instructions, if any.
+- `static_assert` - on statics whose type is `bool`, terminates compilation
+  with an error if it is not initialized to `true`.
 - `unsafe_destructor` - allow implementations of the "drop" language item
   where the type it is implemented for does not implement the "send" language
   item.
 - `unsafe_no_drop_flag` - on structs, remove the flag that prevents
   destructors from being run twice. Destructors might be run multiple times on
   the same object with this attribute.
-- `macro_export` - export a macro for cross-crate usage.
 
 ### Conditional compilation