about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-04-01 16:03:47 -0700
committerbors <bors@rust-lang.org>2013-04-01 16:03:47 -0700
commitd1935898ed4af0cb3512f0fd5fbe7a9f1b68a519 (patch)
tree4790b66536f31b499d96c34e794b5c7d539d0f0c
parentdc60788215afc61b3f5b5e57cf786478218b919e (diff)
parentce096455918920012c4fb3dcd48b1688e571b759 (diff)
downloadrust-d1935898ed4af0cb3512f0fd5fbe7a9f1b68a519.tar.gz
rust-d1935898ed4af0cb3512f0fd5fbe7a9f1b68a519.zip
auto merge of #5662 : catamorphism/rust/docs, r=catamorphism
r? @brson
-rw-r--r--doc/rust.md100
1 files changed, 99 insertions, 1 deletions
diff --git a/doc/rust.md b/doc/rust.md
index 24200459d90..c6dba962676 100644
--- a/doc/rust.md
+++ b/doc/rust.md
@@ -1420,13 +1420,111 @@ names are effectively reserved. Some significant attributes include:
 
 * The `doc` attribute, for documenting code in-place.
 * The `cfg` attribute, for conditional-compilation by build-configuration.
+* The `lang` attribute, for custom definitions of traits and functions that are known to the Rust compiler (see [Language items](#language-items)).
 * The `link` attribute, for describing linkage metadata for a crate.
 * The `test` attribute, for marking functions as unit tests.
-* The `allow`, `warn`, `forbid`, and `deny` attributes, for controling lint checks. Lint checks supported
+* The `allow`, `warn`, `forbid`, and `deny` attributes, for controlling lint checks. Lint checks supported
 by the compiler can be found via `rustc -W help`.
 
 Other attributes may be added or removed during development of the language.
 
+### Language items
+
+Some primitive Rust operations are defined in Rust code,
+rather than being implemented directly in C or assembly language.
+The definitions of these operations have to be easy for the compiler to find.
+The `lang` attribute makes it possible to declare these operations.
+For example, the `str` module in the Rust core library defines the string equality function:
+
+~~~ {.xfail-test}
+#[lang="str_eq"]
+pub fn eq_slice(a: &str, b: &str) -> bool {
+    // details elided
+}
+~~~
+
+The name `str_eq` has a special meaning to the Rust compiler,
+and the presence of this definition means that it will use this definition
+when generating calls to the string equality function.
+
+A complete list of the built-in language items follows:
+
+#### Traits
+
+`const`
+  : Cannot be mutated.
+`copy`
+  : Can be implicitly copied.
+`owned`
+  : Are uniquely owned.
+`durable`
+  : Contain borrowed pointers.
+`drop`
+  : Have finalizers.
+`add`
+  : Elements can be added (for example, integers and floats).
+`sub`
+  : Elements can be subtracted.
+`mul`
+  : Elements can be multiplied.
+`div`
+  : Elements can be divided.
+`mod`
+  : Elements have a modulo operation.
+`neg`
+  : Elements can be negated arithmetically.
+`not`
+  : Elements can be negated logically.
+`bitxor`
+  : Elements have an exclusive-or operation.
+`bitand`
+  : Elements have a bitwise `and` operation.
+`bitor`
+  : Elements have a bitwise `or` operation.
+`shl`
+  : Elements have a left shift operation.
+`shr`
+  : Elements have a right shift operation.
+`index`
+  : Elements can be indexed.
+`eq`
+  : Elements can be compared for equality.
+`ord`
+  : Elements have a partial ordering.
+
+#### Operations
+
+`str_eq`
+  : Compare two strings for equality.
+`uniq_str_eq`
+  : Compare two owned strings for equality.
+`annihilate`
+  : Destroy a box before freeing it.
+`log_type`
+  : Generically print a string representation of any type.
+`fail_`
+  : Abort the program with an error.
+`fail_bounds_check`
+  : Abort the program with a bounds check error.
+`exchange_malloc`
+  : Allocate memory on the exchange heap.
+`exchange_free`
+  : Free memory that was allocated on the exchange heap.
+`malloc`
+  : Allocate memory on the managed heap.
+`free`
+  : Free memory that was allocated on the managed heap.
+`borrow_as_imm`
+  : Create an immutable borrowed pointer to a mutable value.
+`return_to_mut`
+  : Release a borrowed pointer created with `return_to_mut`
+`check_not_borrowed`
+  : Fail if a value has existing borrowed pointers to it.
+`strdup_uniq`
+  : Return a new unique string containing a copy of the contents of a unique string.
+
+> **Note:** This list is likely to become out of date. We should auto-generate it
+> from `librustc/middle/lang_items.rs`.
 
 # Statements and expressions