docs: update to avoid mention of const.

This commit is contained in:
Graydon Hoare 2013-03-22 16:45:54 -07:00
parent 62c1f049f8
commit b481829306
3 changed files with 22 additions and 21 deletions

View file

@ -617,8 +617,8 @@ each of which may have some number of [attributes](#attributes) attached to it.
## Items ## Items
~~~~~~~~ {.ebnf .gram} ~~~~~~~~ {.ebnf .gram}
item : mod_item | fn_item | type_item | enum_item item : mod_item | fn_item | type_item | struct_item | enum_item
| const_item | trait_item | impl_item | foreign_mod_item ; | static_item | trait_item | impl_item | foreign_mod_item ;
~~~~~~~~ ~~~~~~~~
An _item_ is a component of a crate; some module items can be defined in crate An _item_ is a component of a crate; some module items can be defined in crate
@ -627,7 +627,7 @@ crate by a nested set of [modules](#modules). Every crate has a single
"outermost" anonymous module; all further items within the crate have "outermost" anonymous module; all further items within the crate have
[paths](#paths) within the module tree of the crate. [paths](#paths) within the module tree of the crate.
Items are entirely determined at compile-time, remain constant during Items are entirely determined at compile-time, generally remain fixed during
execution, and may reside in read-only memory. execution, and may reside in read-only memory.
There are several kinds of item: There are several kinds of item:
@ -637,7 +637,7 @@ There are several kinds of item:
* [type definitions](#type-definitions) * [type definitions](#type-definitions)
* [structures](#structures) * [structures](#structures)
* [enumerations](#enumerations) * [enumerations](#enumerations)
* [constants](#constants) * [static items](#static-items)
* [traits](#traits) * [traits](#traits)
* [implementations](#implementations) * [implementations](#implementations)
@ -1091,21 +1091,23 @@ a = Cat{ name: ~"Spotty", weight: 2.7 };
In this example, `Cat` is a _struct-like enum variant_, In this example, `Cat` is a _struct-like enum variant_,
whereas `Dog` is simply called an enum variant. whereas `Dog` is simply called an enum variant.
### Constants ### Static items
~~~~~~~~ {.ebnf .gram} ~~~~~~~~ {.ebnf .gram}
const_item : "const" ident ':' type '=' expr ';' ; static_item : "static" ident ':' type '=' expr ';' ;
~~~~~~~~ ~~~~~~~~
A *constant* is a named value stored in read-only memory in a crate. A *static item* is a named _constant value_ stored in the global data section of a crate.
The value bound to a constant is evaluated at compile time. Immutable static items are stored in the read-only data section.
Constants are declared with the `static` keyword. The constant value bound to a static item is, like all constant values, evaluated at compile time.
A constant item must have an expression giving its definition. Static items have the `static` lifetime, which outlives all other lifetimes in a Rust program.
The definition expression of a constant is limited to expression forms that can be evaluated at compile time. Static items are declared with the `static` keyword.
A static item must have a _constant expression_ giving its definition.
Constants must be explicitly typed. The type may be ```bool```, ```char```, a number, or a type derived from those primitive types. Static items must be explicitly typed.
The derived types are borrowed pointers, static arrays, tuples, and structs. The type may be ```bool```, ```char```, a number, or a type derived from those primitive types.
Borrowed pointers must be have the `'static` lifetime. The derived types are borrowed pointers with the `'static` lifetime,
fixed-size arrays, tuples, and structs.
~~~~ ~~~~
static bit1: uint = 1 << 0; static bit1: uint = 1 << 0;
@ -1456,7 +1458,7 @@ The declared names may denote new slots or new items.
An _item declaration statement_ has a syntactic form identical to an An _item declaration statement_ has a syntactic form identical to an
[item](#items) declaration within a module. Declaring an item -- a function, [item](#items) declaration within a module. Declaring an item -- a function,
enumeration, type, constant, trait, implementation or module -- locally enumeration, structure, type, static, trait, implementation or module -- locally
within a statement block is simply a way of restricting its scope to a narrow within a statement block is simply a way of restricting its scope to a narrow
region containing all of its uses; it is otherwise identical in meaning to region containing all of its uses; it is otherwise identical in meaning to
declaring the item outside the statement block. declaring the item outside the statement block.

View file

@ -468,11 +468,10 @@ overwritten for the duration of the borrow. In fact, the compiler
would accept the example we gave earlier. The example is safe because would accept the example we gave earlier. The example is safe because
the shape pointer has type `&Shape`, which means "borrowed pointer to the shape pointer has type `&Shape`, which means "borrowed pointer to
immutable memory containing a `shape`". If, however, the type of that immutable memory containing a `shape`". If, however, the type of that
pointer were `&const Shape` or `&mut Shape`, then the ref binding pointer were `&mut Shape`, then the ref binding would be ill-typed.
would be ill-typed. Just as with unique boxes, the compiler will Just as with unique boxes, the compiler will permit `ref` bindings
permit `ref` bindings into data owned by the stack frame even if the into data owned by the stack frame even if the data are mutable,
data are mutable, but otherwise it requires that the data reside in but otherwise it requires that the data reside in immutable memory.
immutable memory.
# Returning borrowed pointers # Returning borrowed pointers

View file

@ -234,7 +234,7 @@ while count < 10 {
Although Rust can almost always infer the types of local variables, you Although Rust can almost always infer the types of local variables, you
can specify a variable's type by following it with a colon, then the type can specify a variable's type by following it with a colon, then the type
name. Constants, on the other hand, always require a type annotation. name. Static items, on the other hand, always require a type annotation.
~~~~ ~~~~
static monster_factor: float = 57.8; static monster_factor: float = 57.8;