Explain surprising new syntax appearing in example code

In a straight-through read of "Syntax and Semantics," the first time we
meet a generic, and the first time we meet a vector, is when a Vec<T> shows
up in this example. I'm not sure that I could argue that the whole section
should appear later in the book than the ones on vectors and generics, so
instead just give the reader a brief introduction to both and a promise to
follow up later.
This commit is contained in:
Michael F. Lamb 2016-01-06 15:46:58 -08:00
parent 5daa75373d
commit e22ceea1a7

View File

@ -51,15 +51,24 @@ fn foo() {
}
```
When `v` comes into scope, a new [`Vec<T>`][vect] is created. In this case, the
vector also allocates space on [the heap][heap], for the three elements. When
`v` goes out of scope at the end of `foo()`, Rust will clean up everything
related to the vector, even the heap-allocated memory. This happens
deterministically, at the end of the scope.
When `v` comes into scope, a new [vector][] is created, and it allocates space
on the heap for each of its elements. When `v` goes out of scope at the end of
`foo()`, Rust will clean up everything related to the vector, even the
heap-allocated memory. This happens deterministically, at the end of the scope.
[vect]: ../std/vec/struct.Vec.html
We'll cover [vectors][vector] in detail later in this chapter; we only use them
here as an example of a type that allocates space on the heap at runtime. They
behave like [arrays][], except their size may change by `push()`ing more
elements onto them.
Vectors have a [generic type][generics] `Vec<T>`, so in this example `v` will have type
`Vec<i32>`. We'll cover generics in detail later in this chapter.
[arrays]: primitive-types.html#arrays
[vector]: vectors.html
[heap]: the-stack-and-the-heap.html
[bindings]: variable-bindings.html
[generics]: generics.html
# Move semantics