about summary refs log tree commit diff
path: root/doc/rust.md
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-09-26 10:51:01 -0700
committerGraydon Hoare <graydon@mozilla.com>2012-09-26 16:30:36 -0700
commitfbf362809b89a97512c049ba7e4091ff3d404c58 (patch)
tree0cf5d1088a2b64cf53f44096a0ee93b98cf8e070 /doc/rust.md
parent385c4dfba00411da738aff96592281f0035e05f8 (diff)
downloadrust-fbf362809b89a97512c049ba7e4091ff3d404c58.tar.gz
rust-fbf362809b89a97512c049ba7e4091ff3d404c58.zip
Remove description of export, briefly describe `pub use`.
Diffstat (limited to 'doc/rust.md')
-rw-r--r--doc/rust.md100
1 files changed, 14 insertions, 86 deletions
diff --git a/doc/rust.md b/doc/rust.md
index 62b83a822ba..c56c796dbef 100644
--- a/doc/rust.md
+++ b/doc/rust.md
@@ -783,9 +783,8 @@ link_attrs : link_attr [ ',' link_attrs ] + ;
 link_attr : ident '=' literal ;
 ~~~~~~~~
 
-An _extern mod declaration_ specifies a dependency on an external crate. The
-external crate is then imported into the declaring scope as the `ident`
-provided in the `extern_mod_decl`.
+An _extern mod declaration_ specifies a dependency on an external crate.
+The external crate is then bound into the declaring scope as the `ident` provided in the `extern_mod_decl`.
 
 The external crate is resolved to a specific `soname` at compile time, and a
 runtime linkage requirement to that `soname` is passed to the linker for
@@ -825,16 +824,16 @@ linkage-dependency with external crates. Linkage dependencies are
 independently declared with
 [`extern mod` declarations](#extern-mod-declarations).
 
-Imports support a number of "convenience" notations:
+Use declarations support a number of "convenience" notations:
 
-  * Importing as a different name than the imported name, using the
+  * Rebinding the target name as a new local name, using the
     syntax `use x = p::q::r;`.
-  * Importing a list of paths differing only in final element, using
-    the glob-like brace syntax `use a::b::{c,d,e,f};`
-  * Importing all paths matching a given prefix, using the glob-like
-    asterisk syntax `use a::b::*;`
+  * Simultaneously binding a list of paths differing only in final element,
+    using the glob-like brace syntax `use a::b::{c,d,e,f};`
+  * Binding all paths matching a given prefix,
+    using the glob-like asterisk syntax `use a::b::*;`
 
-An example of imports:
+An example of `use` declarations:
 
 ~~~~
 use foo = core::info;
@@ -855,82 +854,11 @@ fn main() {
 }
 ~~~~
 
-##### Export declarations
-
-~~~~~~~~ {.ebnf .gram}
-export_decl : "export" ident [ ',' ident ] *
-            | "export" ident "::{}"
-            | "export" ident '{' ident [ ',' ident ] * '}' ;
-~~~~~~~~
-
-An _export declaration_ restricts the set of local names within a module that
-can be accessed from code outside the module. By default, all _local items_ in
-a module are exported; imported paths are not automatically re-exported by
-default. If a module contains an explicit `export` declaration, this
-declaration replaces the default export with the export specified.
-
-An example of an export:
-
-~~~~~~~~
-pub mod foo {
-	#[legacy_exports];
-    export primary;
-
-    fn primary() {
-        helper(1, 2);
-        helper(3, 4);
-    }
-
-    fn helper(x: int, y: int) {
-        ...
-    }
-}
-
-fn main() {
-    foo::primary();  // Will compile.
-}
-~~~~~~~~
-
-If, instead of calling `foo::primary` in main, you were to call `foo::helper`
-then it would fail to compile:
-
-~~~~~~~~{.ignore}
-    foo::helper(2,3) // ERROR: will not compile.
-~~~~~~~~
-
-Multiple names may be exported from a single export declaration:
-
-~~~~~~~~
-mod foo {
-    export primary, secondary;
-
-    fn primary() {
-        helper(1, 2);
-        helper(3, 4);
-    }
-
-    fn secondary() {
-        ...
-    }
-
-    fn helper(x: int, y: int) {
-        ...
-    }
-}
-~~~~~~~~
-
-When exporting the name of an `enum` type `t`, by default, the module does
-*not* implicitly export any of `t`'s constructors. For example:
-
-~~~~~~~~
-mod foo {
-    export t;
-
-    enum t {a, b, c}
-}
-~~~~~~~~
-
-Here, `foo` imports `t`, but not `a`, `b`, and `c`.
+Like items, `use` declarations are private to the containing module, by default.
+Also like items, a `use` declaration can be public, if qualified by the `pub` keyword.
+A public `use` declaration can therefore be used to _redirect_ some public name to a different target definition,
+even a definition with a private canonical path, inside a different module.
+If a sequence of such redirections form a cycle or cannot be unambiguously resolved, they represent a compile-time error.
 
 ### Functions