Skip to content

Commit 23782b2

Browse files
committed
---
yaml --- r: 38583 b: refs/heads/incoming c: 39c0d35 h: refs/heads/master i: 38581: 2153ea7 38579: 6835707 38575: 133c083 v: v3
1 parent 0c4ec35 commit 23782b2

File tree

2 files changed

+40
-58
lines changed

2 files changed

+40
-58
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: 3d5418789064fdb463e872a4e651af1c628a3650
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278
9-
refs/heads/incoming: c33bff955707d496d675126433627297487daa25
9+
refs/heads/incoming: 39c0d3591e0326874b7263a621ce09ecd64f0eb2
1010
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/incoming/doc/rust.md

Lines changed: 39 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -388,11 +388,10 @@ Examples of floating-point literals of various forms:
388388
12E+99_f64; // type f64
389389
~~~~
390390

391-
##### Nil and boolean literals
391+
##### Unit and boolean literals
392392

393-
The _nil value_, the only value of the type by the same name, is
394-
written as `()`. The two values of the boolean type are written `true`
395-
and `false`.
393+
The _unit value_, the only value of the type that has the same name, is written as `()`.
394+
The two values of the boolean type are written `true` and `false`.
396395

397396
### Symbols
398397

@@ -501,14 +500,13 @@ only be invoked in expression position.
501500
any token other than a delimiter or `$`.)
502501

503502
Macro invocations are looked up by name, and each macro rule is tried in turn;
504-
the first successful match is transcribed. The matching and transcribing
503+
the first successful match is transcribed. The matching and transcription
505504
processes are closely related, and will be described together:
506505

507506
### Macro By Example
508507

509-
Everything that does not begin with a `$` is matched and transcirbed
510-
literally, including delimiters. For parsing reasons, they must be matched,
511-
but they are otherwise not special.
508+
The macro expander matches and transcribes every token that does not begin with a `$` literally, including delimiters.
509+
For parsing reasons, delimiters must be balanced, but they are otherwise not special.
512510

513511
In the matcher, `$` _name_ `:` _designator_ matches the nonterminal in the
514512
Rust syntax named by _designator_. Valid designators are `item`, `block`,
@@ -517,11 +515,11 @@ are the right-hand side and the left-hand side respectively of the `=>` in
517515
macro rules. In the transcriber, the designator is already known, and so only
518516
the name of a matched nonterminal comes after the dollar sign.
519517

520-
In bothe the matcher and transcriber, the Kleene star-like operator,
521-
consisting of `$` and parens, optionally followed by a separator token,
522-
followed by `*` or `+`, indicates repetition. (`*` means zero or more
523-
repetitions, `+` means at least one repetition. The parens are not matched or
524-
transcribed). On the matcher side, a name is bound to _all_ of the names it
518+
In both the matcher and transcriber, the Kleene star-like operator indicates repetition.
519+
The Kleene star operator consists of `$` and parens, optionally followed by a separator token, followed by `*` or `+`.
520+
`*` means zero or more repetitions, `+` means at least one repetition.
521+
The parens are not matched or transcribed.
522+
On the matcher side, a name is bound to _all_ of the names it
525523
matches, in a structure that mimics the structure of the repetition
526524
encountered on a successful match. The job of the transcriber is to sort that
527525
structure out.
@@ -550,41 +548,34 @@ Rust syntax is restricted in two ways:
550548
1. The parser will always parse as much as possible. If it attempts to match
551549
`$i:expr [ , ]` against `8 [ , ]`, it will attempt to parse `i` as an array
552550
index operation and fail. Adding a separator can solve this problem.
553-
2. The parser must have eliminated all ambiguity by the time it reaches a
554-
`$` _name_ `:` _designator_. This most often affects them when they occur in
555-
the beginning of, or immediately after, a `$(...)*`; requiring a distinctive
556-
token in front can solve the problem.
551+
2. The parser must have eliminated all ambiguity by the time it reaches a `$` _name_ `:` _designator_.
552+
This requirement most often affects name-designator pairs when they occur at the beginning of, or immediately after, a `$(...)*`; requiring a distinctive token in front can solve the problem.
557553

558554

559555
## Syntax extensions useful for the macro author
560556

561557
* `log_syntax!` : print out the arguments at compile time
562-
* `trace_macros!` : supply `true` or `false` to enable or disable printing
563-
of the macro expansion process.
564-
* `ident_to_str!` : turns the identifier argument into a string literal
565-
* `concat_idents!` : creates a new identifier by concatenating its arguments
558+
* `trace_macros!` : supply `true` or `false` to enable or disable printing of the macro expansion process.
559+
* `ident_to_str!` : turn the identifier argument into a string literal
560+
* `concat_idents!` : create a new identifier by concatenating the arguments
566561

567562

568563

569564
# Crates and source files
570565

571-
Rust is a *compiled* language. Its semantics are divided along a
572-
*phase distinction* between compile-time and run-time. Those semantic
573-
rules that have a *static interpretation* govern the success or failure
574-
of compilation. A program that fails to compile due to violation of a
575-
compile-time rule has no defined semantics at run-time; the compiler should
576-
halt with an error report, and produce no executable artifact.
566+
Rust is a *compiled* language.
567+
Its semantics obey a *phase distinction* between compile-time and run-time.
568+
Those semantic rules that have a *static interpretation* govern the success or failure of compilation.
569+
We refer to these rules as "static semantics".
570+
Semantic rules called "dynamic semantics" govern the behavior of programs at run-time.
571+
A program that fails to compile due to violation of a compile-time rule has no defined dynamic semantics; the compiler should halt with an error report, and produce no executable artifact.
577572

578-
The compilation model centres on artifacts called _crates_. Each compilation
579-
is directed towards a single crate in source form, and if successful,
580-
produces a single crate in binary form: either an executable or a library.
573+
The compilation model centres on artifacts called _crates_.
574+
Each compilation processes a single crate in source form, and if successful, produces a single crate in binary form: either an executable or a library.
581575

582-
A _crate_ is a unit of compilation and linking, as well as versioning,
583-
distribution and runtime loading. A crate contains a _tree_ of nested
584-
[module](#modules) scopes. The top level of this tree is a module that is
585-
anonymous -- from the point of view of paths within the module -- and any item
586-
within a crate has a canonical [module path](#paths) denoting its location
587-
within the crate's module tree.
576+
A _crate_ is a unit of compilation and linking, as well as versioning, distribution and runtime loading.
577+
A crate contains a _tree_ of nested [module](#modules) scopes.
578+
The top level of this tree is a module that is anonymous (from the point of view of paths within the module) and any item within a crate has a canonical [module path](#paths) denoting its location within the crate's module tree.
588579

589580
Crates are provided to the Rust compiler through two kinds of file:
590581

@@ -594,18 +585,15 @@ Crates are provided to the Rust compiler through two kinds of file:
594585
> **Note:** The functionality of crate files will be merged into source files in future versions of Rust.
595586
> The separate processing of crate files, both their grammar and file extension, will be removed.
596587
597-
The Rust compiler is always invoked with a single input file, and always
598-
produces a single output crate.
588+
The Rust compiler is always invoked with a single crate file as input, and always produces a single output crate.
599589

600590
When the Rust compiler is invoked with a crate file, it reads the _explicit_
601591
definition of the crate it's compiling from that file, and populates the
602592
crate with modules derived from all the source files referenced by the
603593
crate, reading and processing all the referenced modules at once.
604594

605-
When the Rust compiler is invoked with a source file, it creates an
606-
_implicit_ crate and treats the source file as though it was referenced as
607-
the sole module populating this implicit crate. The module name is derived
608-
from the source file name, with the `.rs` extension removed.
595+
When the Rust compiler is invoked with a source file, it creates an _implicit_ crate and treats the source file as if it is the sole module populating this explicit crate.
596+
The module name is derived from the source file name, with the `.rs` extension removed.
609597

610598
## Crate files
611599

@@ -662,10 +650,8 @@ containing source files and/or further subdirectories. The filesystem
662650
directory associated with a `dir_directive` module can either be explicit,
663651
or if omitted, is implicitly the same name as the module.
664652

665-
A `source_directive` references a source file, either explicitly or
666-
implicitly by combining the module name with the file extension `.rs`. The
667-
module contained in that source file is bound to the module path formed by
668-
the `dir_directive` modules containing the `source_directive`.
653+
A `source_directive` references a source file, either explicitly or implicitly, by combining the module name with the file extension `.rs`.
654+
The module contained in that source file is bound to the module path formed by the `dir_directive` modules containing the `source_directive`.
669655

670656
## Source files
671657

@@ -675,9 +661,8 @@ location of which -- in the module tree of the current crate -- is defined
675661
from outside the source file: either by an explicit `source_directive` in
676662
a referencing crate file, or by the filename of the source file itself.
677663

678-
A source file that contains a `main` function can be compiled to an
679-
executable. If a `main` function is present,
680-
its return type must be [`nil`](#primitive-types) and it must take no arguments.
664+
A source file that contains a `main` function can be compiled to an executable.
665+
If a `main` function is present, its return type must be [`unit`](#primitive-types) and it must take no arguments.
681666

682667
# Items and attributes
683668

@@ -1498,10 +1483,10 @@ A temporary's lifetime equals the largest lifetime of any borrowed pointer that
14981483

14991484
A _literal expression_ consists of one of the [literal](#literals)
15001485
forms described earlier. It directly describes a number, character,
1501-
string, boolean value, or the nil value.
1486+
string, boolean value, or the unit value.
15021487

15031488
~~~~~~~~ {.literals}
1504-
(); // nil type
1489+
(); // unit type
15051490
"hello"; // string type
15061491
'5'; // character type
15071492
5; // integer type
@@ -1866,7 +1851,7 @@ operators may be composed with the `=` operator. The expression `lval
18661851
OP= val` is equivalent to `lval = lval OP val`. For example, `x = x +
18671852
1` may be written as `x += 1`.
18681853

1869-
Any such expression always has the [`nil`](#primitive-types) type.
1854+
Any such expression always has the [`unit`](#primitive-types) type.
18701855

18711856
#### Operator precedence
18721857

@@ -2418,11 +2403,8 @@ types. User-defined types have limited capabilities.
24182403

24192404
The primitive types are the following:
24202405

2421-
* The "nil" type `()`, having the single "nil" value `()`.^[The "nil" value
2422-
`()` is *not* a sentinel "null pointer" value for reference slots; the "nil"
2423-
type is the implicit return type from functions otherwise lacking a return
2424-
type, and can be used in other contexts (such as message-sending or
2425-
type-parametric code) as a zero-size type.]
2406+
* The "unit" type `()`, having the single "unit" value `()` (occasionally called "nil").
2407+
^[The "unit" value `()` is *not* a sentinel "null pointer" value for reference slots; the "unit" type is the implicit return type from functions otherwise lacking a return type, and can be used in other contexts (such as message-sending or type-parametric code) as a zero-size type.]
24262408
* The boolean type `bool` with values `true` and `false`.
24272409
* The machine types.
24282410
* The machine-dependent integer and floating-point types.

0 commit comments

Comments
 (0)