From 76ed83d2c3bbcd1dcc13733b4be896964a6de002 Mon Sep 17 00:00:00 2001 From: Igor Taranenko Date: Sat, 10 Mar 2018 20:26:26 +0200 Subject: [PATCH 001/749] Fix incorrect dependencies declaration The appendix declares packages creation using hyphens in the packages' names (`cargo new hello-world` and `cargo new hello-world-derive`). Since that the correct import in the `pancakes` project have to be as provided in this commit. --- second-edition/src/appendix-04-macros.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/second-edition/src/appendix-04-macros.md b/second-edition/src/appendix-04-macros.md index d75ea71aff..834aac9ca2 100644 --- a/second-edition/src/appendix-04-macros.md +++ b/second-edition/src/appendix-04-macros.md @@ -465,8 +465,8 @@ if not, you can specify them as `path` dependencies as follows: ```toml [dependencies] -hello_world = { path = "../hello-world" } -hello_world_derive = { path = "../hello-world/hello-world-derive" } +hello-world = { path = "../hello-world" } +hello-world-derive = { path = "../hello-world/hello-world-derive" } ``` Put the code from Listing A4-1 into *src/main.rs*, and executing `cargo run` From eab99c7e45f3adb82659c8ded05b6b8b52d62615 Mon Sep 17 00:00:00 2001 From: Igor Taranenko Date: Sat, 17 Mar 2018 18:11:37 +0200 Subject: [PATCH 002/749] Replace Hello World with Hello Macro Replace all `world` word occurrences with `macro` in order to coincide with the appendix's subject. --- second-edition/src/appendix-04-macros.md | 140 +++++++++++------------ 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/second-edition/src/appendix-04-macros.md b/second-edition/src/appendix-04-macros.md index 834aac9ca2..f16673a132 100644 --- a/second-edition/src/appendix-04-macros.md +++ b/second-edition/src/appendix-04-macros.md @@ -176,13 +176,13 @@ code as declarative macros do. Today, the only thing you can define procedural macros for is to allow your traits to be implemented on a type by specifying the trait name in a `derive` annotation. -Let’s create a crate named `hello-world` that defines a trait named -`HelloWorld` with one associated function named `hello_world`. Rather than -making users of our crate implement the `HelloWorld` trait for each of their +Let’s create a crate named `hello_macro` that defines a trait named +`HelloMacro` with one associated function named `hello_macro`. Rather than +making users of our crate implement the `HelloMacro` trait for each of their types, we’d like users to be able to annotate their type with -`#[derive(HelloWorld)]` to get a default implementation of the `hello_world` +`#[derive(HelloMacro)]` to get a default implementation of the `hello_macro` function associated with their type. The default implementation will print -`Hello world, my name is TypeName!` where `TypeName` is the name of the type on +`Hello, Macro! My name is TypeName!` where `TypeName` is the name of the type on which this trait has been defined. In other words, we’re going to write a crate that enables another programmer to @@ -191,39 +191,39 @@ write code that looks like Listing A4-1 using our crate: Filename: src/main.rs ```rust,ignore -extern crate hello_world; +extern crate hello_macro; #[macro_use] -extern crate hello_world_derive; +extern crate hello_macro_derive; -use hello_world::HelloWorld; +use hello_macro::HelloMacro; -#[derive(HelloWorld)] +#[derive(HelloMacro)] struct Pancakes; fn main() { - Pancakes::hello_world(); + Pancakes::hello_macro(); } ``` Listing A4-1: The code a user of our crate will be able to write when we’ve written the procedural macro -This code will print `Hello world, my name is Pancakes!` when we’re done. Let’s +This code will print `Hello, Macro! My name is Pancakes!` when we’re done. Let’s get started! Let’s make a new library crate: ```text -$ cargo new hello-world +$ cargo new hello_macro ``` -First, we’ll define the `HelloWorld` trait and associated function: +First, we’ll define the `HelloMacro` trait and associated function: Filename: src/lib.rs ```rust -pub trait HelloWorld { - fn hello_world(); +pub trait HelloMacro { + fn hello_macro(); } ``` @@ -231,28 +231,28 @@ At this point, a user of our crate could implement the trait themselves to achieve the functionality we wanted to enable, like so: ```rust,ignore -extern crate hello_world; +extern crate hello_macro; -use hello_world::HelloWorld; +use hello_macro::HelloMacro; struct Pancakes; -impl HelloWorld for Pancakes { - fn hello_world() { - println!("Hello world, my name is Pancakes!"); +impl HelloMacro for Pancakes { + fn hello_macro() { + println!("Hello, Macro! My name is Pancakes!"); } } fn main() { - Pancakes::hello_world(); + Pancakes::hello_macro(); } ``` However, they would need to write out the implementation block for each type -they wanted to be able to use with `hello_world`; we’d like to make using our +they wanted to be able to use with `hello_macro`; we’d like to make using our trait more convenient for other programmers by saving them this work. -Additionally, we can’t provide a default implementation for the `hello_world` +Additionally, we can’t provide a default implementation for the `hello_macro` function that has the behavior we want of printing out the name of the type the trait is implemented on: Rust doesn’t have reflection capabilities, so we can’t look up the type’s name at runtime. We need a macro to generate code at compile @@ -264,30 +264,30 @@ The next step is to define the procedural macro. At the moment, procedural macros need to be in their own crate. Eventually, this restriction may be lifted, but for now, it’s required. As such, there’s a convention: for a crate named `foo`, a custom derive procedural macro crate is called `foo-derive`. -Let’s start a new crate called `hello-world-derive` inside our `hello-world` +Let’s start a new crate called `hello_macro_derive` inside our `hello_macro` project: ```text -$ cargo new hello-world-derive +$ cargo new hello_macro_derive ``` We’ve chosen to create the procedural macro crate within the directory of our -`hello-world` crate because the two crates are tightly related: if we change -the trait definition in `hello-world`, we’ll have to change the implementation -of the procedural macro in `hello-world-derive` as well. The two crates will +`hello_macro` crate because the two crates are tightly related: if we change +the trait definition in `hello_macro`, we’ll have to change the implementation +of the procedural macro in `hello_macro_derive` as well. The two crates will need to be published separately, and programmers using these crates will need to add both as dependencies and bring them both into scope. It’s possible to -have the `hello-world` crate use `hello-world-derive` as a dependency and +have the `hello_macro` crate use `hello_macro_derive` as a dependency and re-export the procedural macro code, but structuring the project this way makes it possible for programmers to easily decide they only want to use -`hello-world` if they don’t want the `derive` functionality. +`hello_macro` if they don’t want the `derive` functionality. -We need to declare that the `hello-world-derive` crate is a procedural macro +We need to declare that the `hello_macro_derive` crate is a procedural macro crate. We also need to add dependencies on the `syn` and `quote` crates to get useful functionality for operating on Rust code. To do these two things, add -the following to the *Cargo.toml* for `hello-world-derive`: +the following to the *Cargo.toml* for `hello_macro_derive`: -Filename: hello-world-derive/Cargo.toml +Filename: hello_macro_derive/Cargo.toml ```toml [lib] @@ -299,15 +299,15 @@ quote = "0.3.15" ``` To start defining the procedural macro, place the code from Listing A4-2 in -*src/lib.rs* for the `hello-world-derive` crate. Note that this won’t compile -until we add a definition for the `impl_hello_world` function. We’ve split the +*src/lib.rs* for the `hello_macro_derive` crate. Note that this won’t compile +until we add a definition for the `impl_hello_macro` function. We’ve split the code into functions in this way because the code in Listing A4-2 will be the same for almost every procedural macro crate; it’s code that makes writing a procedural macro more convenient. What you choose to do in the place where the -`impl_hello_world` function is called will be different and depend on the +`impl_hello_macro` function is called will be different and depend on the purpose of your procedural macro. -Filename: hello-world-derive/src/lib.rs +Filename: hello_macro_derive/src/lib.rs ```rust,ignore extern crate proc_macro; @@ -317,8 +317,8 @@ extern crate quote; use proc_macro::TokenStream; -#[proc_macro_derive(HelloWorld)] -pub fn hello_world_derive(input: TokenStream) -> TokenStream { +#[proc_macro_derive(HelloMacro)] +pub fn hello_macro_derive(input: TokenStream) -> TokenStream { // Construct a string representation of the type definition let s = input.to_string(); @@ -326,7 +326,7 @@ pub fn hello_world_derive(input: TokenStream) -> TokenStream { let ast = syn::parse_derive_input(&s).unwrap(); // Build the impl - let gen = impl_hello_world(&ast); + let gen = impl_hello_macro(&ast); // Return the generated impl gen.parse().unwrap() @@ -348,18 +348,18 @@ to handle: writing a full parser for Rust code is no simple task. [`syn`]: https://crates.io/crates/syn [`quote`]: https://crates.io/crates/quote -The `hello_world_derive` function is the code that will get called when a user -of our library specifies the `#[derive(HelloWorld)]` annotation on a type -because we’ve annotated the `hello_world_derive` function here with -`proc_macro_derive` and specified the same name, `HelloWorld`. This name -matches our trait named `HelloWorld`; that’s the convention most procedural +The `hello_macro_derive` function is the code that will get called when a user +of our library specifies the `#[derive(HelloMacro)]` annotation on a type +because we’ve annotated the `hello_macro_derive` function here with +`proc_macro_derive` and specified the same name, `HelloMacro`. This name +matches our trait named `HelloMacro`; that’s the convention most procedural macros follow. The first thing this function does is convert the `input` from a `TokenStream` to a `String` by calling `to_string`. This `String` is a string representation -of the Rust code for which we are deriving `HelloWorld`. In the example in +of the Rust code for which we are deriving `HelloMacro`. In the example in Listing A4-1, `s` will have the `String` value `struct Pancakes;` because -that’s the Rust code we added the `#[derive(HelloWorld)]` annotation to. +that’s the Rust code we added the `#[derive(HelloMacro)]` annotation to. At the moment, the only thing you can do with a `TokenStream` is convert it to a string. A richer API will exist in the future. @@ -391,10 +391,10 @@ API docs for `DeriveInput`][syn-docs] for more information. [syn-docs]: https://docs.rs/syn/0.11.11/syn/struct.DeriveInput.html -We haven’t defined the `impl_hello_world` function; that’s where we’ll build +We haven’t defined the `impl_hello_macro` function; that’s where we’ll build the new Rust code we want to include. Before we get to that, the last part of -this `hello_world_derive` function is using the `quote` crate’s `parse` -function to turn the output of the `impl_hello_world` function back into a +this `hello_macro_derive` function is using the `quote` crate’s `parse` +function to turn the output of the `impl_hello_macro` function back into a `TokenStream`. The returned `TokenStream` is added to the code that users of our crate write so that when they compile their crate, they get extra functionality we provide. @@ -410,18 +410,18 @@ using `expect` or `panic!`. Now that we have the code to turn the annotated Rust code from a `TokenStream` into a `String` and into a `DeriveInput` instance, let’s write the code that -will generate the code implementing the `HelloWorld` trait on the annotated +will generate the code implementing the `HelloMacro` trait on the annotated type: -Filename: hello-world-derive/src/lib.rs +Filename: hello_macro_derive/src/lib.rs ```rust,ignore -fn impl_hello_world(ast: &syn::DeriveInput) -> quote::Tokens { +fn impl_hello_macro(ast: &syn::DeriveInput) -> quote::Tokens { let name = &ast.ident; quote! { - impl HelloWorld for #name { - fn hello_world() { - println!("Hello, World! My name is {}", stringify!(#name)); + impl HelloMacro for #name { + fn hello_macro() { + println!("Hello, Macro! My name is {}", stringify!(#name)); } } } @@ -442,10 +442,10 @@ crate’s docs][quote-docs] for a thorough introduction. [quote-docs]: https://docs.rs/quote What we want to do for our procedural macro is generate an implementation of -our `HelloWorld` trait for the type the user of our crate has annotated, which +our `HelloMacro` trait for the type the user of our crate has annotated, which we can get by using `#name`. The trait implementation has one function, -`hello_world`, and the function body contains the functionality we want to -provide: printing `Hello, World! My name is` and then the name of the type the +`hello_macro`, and the function body contains the functionality we want to +provide: printing `Hello, Macro! My name is` and then the name of the type the user of our crate has annotated. The `stringify!` macro used here is built into Rust. It takes a Rust expression, such as `1 + 2`, and at compile time turns the expression into a string literal, such as `"1 + 2"`. This is different than @@ -454,25 +454,25 @@ into a `String`. There’s a possibility that `#name` would be an expression tha we would want to print out literally, and `stringify!` also saves an allocation by converting `#name` to a string literal at compile time. -At this point, `cargo build` should complete successfully in both `hello-world` -and `hello-world-derive`. Let’s hook these crates up to the code in Listing +At this point, `cargo build` should complete successfully in both `hello_macro` +and `hello_macro_derive`. Let’s hook these crates up to the code in Listing A4-1 to see it in action! Create a new binary project in your `projects` -directory with `cargo new --bin pancakes`. We need to add both `hello-world` -and `hello-world-derive` as dependencies in the `pancakes` crate’s -*Cargo.toml*. If you’ve chosen to publish your versions of `hello-world` and -`hello-world-derive` to *https://crates.io* they would be regular dependencies; +directory with `cargo new --bin pancakes`. We need to add both `hello_macro` +and `hello_macro_derive` as dependencies in the `pancakes` crate’s +*Cargo.toml*. If you’ve chosen to publish your versions of `hello_macro` and +`hello_macro_derive` to *https://crates.io* they would be regular dependencies; if not, you can specify them as `path` dependencies as follows: ```toml [dependencies] -hello-world = { path = "../hello-world" } -hello-world-derive = { path = "../hello-world/hello-world-derive" } +hello_macro = { path = "../hello_macro" } +hello_macro_derive = { path = "../hello_macro/hello_macro_derive" } ``` Put the code from Listing A4-1 into *src/main.rs*, and executing `cargo run` -should print `Hello, World! My name is Pancakes`! The implementation of the -`HelloWorld` trait from the procedural macro was included without the -`pancakes` crate needing to implement it; the `#[derive(HelloWorld)]` took care +should print `Hello, Macro! My name is Pancakes`! The implementation of the +`HelloMacro` trait from the procedural macro was included without the +`pancakes` crate needing to implement it; the `#[derive(HelloMacro)]` took care of adding the trait implementation. ## The Future of Macros From 36080bfe3eb7fd9a08ade71f7121b9644f7cd234 Mon Sep 17 00:00:00 2001 From: Igor Taranenko Date: Tue, 20 Mar 2018 10:32:18 +0200 Subject: [PATCH 003/749] Add HelloMacro word to dictionary --- second-edition/dictionary.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/second-edition/dictionary.txt b/second-edition/dictionary.txt index 6147d8f7b2..bc3e551605 100644 --- a/second-edition/dictionary.txt +++ b/second-edition/dictionary.txt @@ -171,6 +171,7 @@ HashMap HashSet Haskell hasn +HelloMacro helloworld HelloWorld HelloWorldName From 53184cc673aa07c06ebd5686032e30062989c81f Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 11:25:42 -0400 Subject: [PATCH 004/749] Chapter 18 as received from nostarch after copyediting --- second-edition/nostarch/odt/chapter18.docx | Bin 0 -> 107705 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 second-edition/nostarch/odt/chapter18.docx diff --git a/second-edition/nostarch/odt/chapter18.docx b/second-edition/nostarch/odt/chapter18.docx new file mode 100644 index 0000000000000000000000000000000000000000..fd0df4ce69aba043b81221ccf5bfd9b7309cb72c GIT binary patch literal 107705 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

! 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%0DG8R8)`C9870k=MroT)eF`U74J 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 Date: Thu, 22 Mar 2018 12:21:00 -0400 Subject: [PATCH 005/749] Remove review comments --- second-edition/nostarch/chapter18.md | 172 ------------------ second-edition/src/ch18-00-patterns.md | 6 - .../ch18-01-all-the-places-for-patterns.md | 28 --- second-edition/src/ch18-02-refutability.md | 6 - second-edition/src/ch18-03-pattern-syntax.md | 134 +------------- 5 files changed, 1 insertion(+), 345 deletions(-) diff --git a/second-edition/nostarch/chapter18.md b/second-edition/nostarch/chapter18.md index 20ff293307..d59c0406f4 100644 --- a/second-edition/nostarch/chapter18.md +++ b/second-edition/nostarch/chapter18.md @@ -18,12 +18,6 @@ These pieces describe the shape of the data we’re working with, which we then match against values to determine whether our program has the correct data to continue running a particular bit of code. - - - To use a pattern we compare it to some value. If the pattern matches our value, we use the value parts in our code. Recall our `match` expressions from Chapter 6 that used patterns like a coin sorting machine. If the value fits the shape @@ -75,12 +69,6 @@ way to write the equivalent of a `match` that only cares about matching one case. Optionally,`if let` can have a corresponding `else` with code to run if the pattern in the `if let` doesn’t match. - - - Listing 18-1 shows that it’s also possible to mix and match `if let`, `else if`, and `else if let` expressions. This gives us more flexibility than a `match` expression where we can only express one value to compare with the @@ -141,10 +129,6 @@ is not checked by the compiler, whereas with `match` expressions it is. If we left off the last `else` block and so missed handling some cases, the compiler would not alert us of the possible logic bug. - - - ### `while let` Conditional Loops Similar in construction to `if let`, the `while let` conditional loop allows @@ -168,8 +152,6 @@ while let Some(top) = stack.pop() { Listing 18-2: Using a `while let` loop to print out values for as long as `stack.pop()` returns `Some` - - This example will print 3, 2, then 1. The `pop` method takes the last element out of the vector and returns `Some(value)`. If the vector is empty, it returns `None`. The `while` loop will continue running the code in its block as long as @@ -183,20 +165,9 @@ construction in Rust code, but we haven’t yet discussed the pattern that `for` takes. In a `for` loop, the pattern is the value that directly follows the keyword `for`, so the `x` in `for x in y`. - - - Listing 18-3 demonstrates how to use a pattern in a `for` loop to destructure, or break apart, a tuple as part of the `for` loop: - - ``` let v = vec![1, 2, 3]; @@ -262,11 +233,6 @@ to the pattern `(x, y, z)` and sees that the value matches the pattern, so will bind `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple pattern as nesting three individual variable patterns inside of it. - - - If the number of elements in the pattern don’t match the number of elements in the tuple, the overall type won’t match and we’ll get a compiler error. For example, Listing 18-5 shows an attempt to destructure into two variables a @@ -408,12 +374,6 @@ if let Some(x) = some_option_value { Listing 18-9: Using `if let` and a block with refutable patterns instead of `let` - - - We’ve given the code an out! This code is perfectly valid, though does now of course mean we cannot use an irrefutable pattern without receiving an error. If we give `if let` a pattern that will always match, such as `x` as shown in @@ -453,12 +413,6 @@ We’ve seen examples of many different kinds of patterns throughout the book, s we’ll gather all the syntax valid in patterns in one place here, and why you might want to use each of them. - - ### Matching Literals As we saw in Chapter 6, you can match patterns against literals directly. This @@ -480,10 +434,6 @@ take some action if you get a concrete value in particular. ### Matching Named Variables - - - Named variables are irrefutable patterns that match any value, which we have used many times before. There is a complication, however, when used in `match` expressions. Because `match` starts a new scope, variables declared as part of @@ -526,13 +476,6 @@ inside a `Some`, which is what we have in `x`. Therefore this `y` binds to the inner value of the `Some` in `x`. That value is 5, and so the expression for that arm executes and prints `Matched, y = 5`. - - - If `x` had been a `None` value instead of `Some(5)`, the patterns in the first two arms would not have matched, so we would have matched to the underscore. We did not introduce the `x` variable in the pattern of that arm, so the `x` in @@ -554,9 +497,6 @@ which means *or*. For example, the following code matches the value of `x` against the match arms, the first of which has an *or* option, meaning if the value of `x` matches either of the values in that arm, it will run: - - - ``` let x = 1; @@ -569,25 +509,12 @@ match x { This code will print `one or two`. - - - ### Matching Ranges of Values with `...` The `...` syntax allows you to match to an inclusive range of values. In the following code, when a pattern matches any of the values within the range, that arm will execute: - - - ``` let x = 5; @@ -608,9 +535,6 @@ compiler checks that the range isn’t empty at compile time. `char` and numeric values are the only types that Rust knows how to tell if a range is empty or not. - - - Here’s an example using ranges of `char` values: ``` @@ -628,18 +552,9 @@ Rust can tell that `c` is within the first pattern’s range, and this will prin ### Destructuring to Break Apart Values - - - We can also use patterns to destructure structs, enums, tuples, and references in order to use different parts of these values. Let’s go through each of those! - - - #### Destructuring Structs Listing 18-12 shows a `Point` struct with two fields, `x` and `y`, that we can @@ -664,14 +579,6 @@ fn main() { Listing 18-12: Destructuring a struct’s fields into separate variables - - - This code creates the variables `a` and `b` that match the values of the `x` and `y` fields of the `p` variable. @@ -718,10 +625,6 @@ Listing 18-14 shows a `match` statement that separates `Point` values into three cases: points that lie directly on the `x` axis (which is true when `y = 0`), on the `y` axis (`x = 0`), or neither: - - - Filename: src/main.rs ``` @@ -822,12 +725,6 @@ destructure the reference from the value, which we can do can by specifying a `&` in the pattern. This lets us get a variable holding the value that the reference points to rather than getting a variable that holds the reference. - - - This is especially useful in closures where we have iterators that iterate over references, but we want to use the values in the closure rather than the references. @@ -851,9 +748,6 @@ let sum_of_squares: i32 = points Listing 18-16: Destructuring a reference to a struct into the struct field values - - - This code results in the value 135 in the variable `sum_of_squares`, which is the result from squaring the `x` value and the `y` value, adding those together, and then adding the result for each `Point` in the `points` vector to @@ -890,10 +784,6 @@ let ((feet, inches), Point {x, y}) = ((3, 10), Point { x: 3, y: -10 }); This lets us break complex types into their component parts so that we can use the values we’re interested in separately. - - - Destructuring with patterns is a convenient way to use pieces of values, such as the value from each field in a struct, separately from each other. @@ -928,11 +818,6 @@ fn main() { Listing 18-17: Using `_` in a function signature - - - This code will completely ignore the value passed as the first argument, 3, and will print out `This code only uses the y parameter: 4`. In most cases when you no longer need a particular function parameter, you would change the signature @@ -946,10 +831,6 @@ used a name instead. #### Ignoring Parts of a Value with a Nested `_` - - - We can also use `_` inside of another pattern to ignore just part of a value, when we only want to test for part of a value but have no use for the other parts in the corresponding code we want to run. Listing 18-18 shows code @@ -988,10 +869,6 @@ In all other cases (if either `setting_value` or `new_setting_value` are `None`), which is expressed by the `_` pattern in the second arm, we do want to allow `new_setting_value` to become `setting_value`. - - - We can also use underscores in multiple places within one pattern to ignore particular values, as shown in Listing 18-19 where we’re ignoring the second and fourth values in a tuple of five items: @@ -1172,10 +1049,6 @@ a pattern with a variable, and then another usage of the entire value after the `robot_name` value is transferred to the `name` variable in the pattern of the first `match` arm: - - - ``` let robot_name = Some(String::from("Bors")); @@ -1196,13 +1069,6 @@ part of `robot_name` has been moved to `name`, we can no longer use `robot_name` in the `println!` after the `match` because `robot_name` no longer has ownership. - - - - - - In order to fix this code, we want to have the `Some(name)` pattern borrow that part of `robot_name` rather than taking ownership. Outside of patterns, we’ve seen that the way to borrow a value is to create a reference using `&`, so you @@ -1260,9 +1126,6 @@ arm code using the `*` operator in order to be able to mutate the value. ### Extra Conditionals with Match Guards - - A *match guard* is an additional `if` condition specified after the pattern in a `match` arm that also must match if the pattern matches in order for that arm to be chosen. Match guards are useful for expressing more complex ideas than a @@ -1297,20 +1160,12 @@ therefore matches any `Some` variant. There’s no way to express the `if x < 5` condition within a pattern, so the match guard has given us the ability to express this logic. - - - In Listing 18-11, we mentioned that we could use match guards to solve our pattern shadowing problem, where a new variable was created inside the pattern in the `match` expression instead of using the variable outside the `match`. That new variable meant we couldn’t test against the value that the outer variable had. Listing 18-30 shows how we can use a match guard to fix this: - - - ``` fn main() { let x = Some(5); @@ -1340,12 +1195,6 @@ introduce new variables. This `y` *is* the outer `y` rather than a new shadowed `y`, and we can express the idea that we’re looking for a value that has the same value as the outer `y` by comparing `n` to `y`. - - - You can also use the or operator `|` in a match guard to specify multiple patterns, and the match guard condition will apply to all of the patterns. Listing 18-31 shows the precedence of combining a match guard with a pattern @@ -1353,14 +1202,6 @@ that uses `|`. The important part of this example is that the `if y` match guard applies to 4, 5, *and* 6, even though it might look like `if y` only applies to 6: - - - ``` let x = 4; let y = false; @@ -1379,12 +1220,6 @@ that the pattern of the first arm matches because `x` is 4, but the match guard `if y` is false, so the first arm is not chosen. The code moves on to the second arm, which does match, and this program prints `no`. - - - This is because the `if` condition applies to the whole pattern `4 | 5 | 6`, and not only to the last value `6`. In other words, the precedence of a match guard in relation to a pattern behaves like this: @@ -1406,13 +1241,6 @@ was only applied to the final value in the list of values specified using the ### `@` Bindings - - - The at operator, `@`, lets us create a variable that holds a value at the same time we’re testing that value to see if it matches a pattern. Listing 18-32 shows an example where we want to test that a `Message::Hello` `id` field is diff --git a/second-edition/src/ch18-00-patterns.md b/second-edition/src/ch18-00-patterns.md index b04b253228..391d541ddc 100644 --- a/second-edition/src/ch18-00-patterns.md +++ b/second-edition/src/ch18-00-patterns.md @@ -15,12 +15,6 @@ These pieces describe the shape of the data we’re working with, which we then match against values to determine whether our program has the correct data to continue running a particular bit of code. - - - To use a pattern we compare it to some value. If the pattern matches our value, we use the value parts in our code. Recall our `match` expressions from Chapter 6 that used patterns like a coin sorting machine. If the value fits the shape diff --git a/second-edition/src/ch18-01-all-the-places-for-patterns.md b/second-edition/src/ch18-01-all-the-places-for-patterns.md index f5ea87e1a7..5e8dc411b7 100644 --- a/second-edition/src/ch18-01-all-the-places-for-patterns.md +++ b/second-edition/src/ch18-01-all-the-places-for-patterns.md @@ -37,12 +37,6 @@ way to write the equivalent of a `match` that only cares about matching one case. Optionally,`if let` can have a corresponding `else` with code to run if the pattern in the `if let` doesn’t match. - - - Listing 18-1 shows that it’s also possible to mix and match `if let`, `else if`, and `else if let` expressions. This gives us more flexibility than a `match` expression where we can only express one value to compare with the @@ -104,10 +98,6 @@ is not checked by the compiler, whereas with `match` expressions it is. If we left off the last `else` block and so missed handling some cases, the compiler would not alert us of the possible logic bug. - - - ### `while let` Conditional Loops Similar in construction to `if let`, the `while let` conditional loop allows @@ -131,8 +121,6 @@ while let Some(top) = stack.pop() { Listing 18-2: Using a `while let` loop to print out values for as long as `stack.pop()` returns `Some` - - This example will print 3, 2, then 1. The `pop` method takes the last element out of the vector and returns `Some(value)`. If the vector is empty, it returns `None`. The `while` loop will continue running the code in its block as long as @@ -146,20 +134,9 @@ construction in Rust code, but we haven’t yet discussed the pattern that `for` takes. In a `for` loop, the pattern is the value that directly follows the keyword `for`, so the `x` in `for x in y`. - - - Listing 18-3 demonstrates how to use a pattern in a `for` loop to destructure, or break apart, a tuple as part of the `for` loop: - - ```rust let v = vec!['a', 'b', 'c']; @@ -226,11 +203,6 @@ to the pattern `(x, y, z)` and sees that the value matches the pattern, so will bind `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple pattern as nesting three individual variable patterns inside of it. - - - If the number of elements in the pattern don’t match the number of elements in the tuple, the overall type won’t match and we’ll get a compiler error. For example, Listing 18-5 shows an attempt to destructure into two variables a diff --git a/second-edition/src/ch18-02-refutability.md b/second-edition/src/ch18-02-refutability.md index 18b636c4e0..f1f8ee425a 100644 --- a/second-edition/src/ch18-02-refutability.md +++ b/second-edition/src/ch18-02-refutability.md @@ -66,12 +66,6 @@ if let Some(x) = some_option_value { Listing 18-9: Using `if let` and a block with refutable patterns instead of `let` - - - We’ve given the code an out! This code is perfectly valid, though does now of course mean we cannot use an irrefutable pattern without receiving an error. If we give `if let` a pattern that will always match, such as `x` as shown in diff --git a/second-edition/src/ch18-03-pattern-syntax.md b/second-edition/src/ch18-03-pattern-syntax.md index 43f6deeebe..944e22165d 100644 --- a/second-edition/src/ch18-03-pattern-syntax.md +++ b/second-edition/src/ch18-03-pattern-syntax.md @@ -4,12 +4,6 @@ We’ve seen examples of many different kinds of patterns throughout the book, s we’ll gather all the syntax valid in patterns in one place here, and why you might want to use each of them. - - ### Matching Literals As we saw in Chapter 6, you can match patterns against literals directly. This @@ -31,10 +25,6 @@ take some action if you get a concrete value in particular. ### Matching Named Variables - - - Named variables are irrefutable patterns that match any value, which we have used many times before. There is a complication, however, when used in `match` expressions. Because `match` starts a new scope, variables declared as part of @@ -77,13 +67,6 @@ inside a `Some`, which is what we have in `x`. Therefore this `y` binds to the inner value of the `Some` in `x`. That value is 5, and so the expression for that arm executes and prints `Matched, y = 5`. - - - If `x` had been a `None` value instead of `Some(5)`, the patterns in the first two arms would not have matched, so we would have matched to the underscore. We did not introduce the `x` variable in the pattern of that arm, so the `x` in @@ -105,9 +88,6 @@ which means *or*. For example, the following code matches the value of `x` against the match arms, the first of which has an *or* option, meaning if the value of `x` matches either of the values in that arm, it will run: - - - ```rust let x = 1; @@ -120,25 +100,12 @@ match x { This code will print `one or two`. - - - ### Matching Ranges of Values with `...` The `...` syntax allows you to match to an inclusive range of values. In the following code, when a pattern matches any of the values within the range, that arm will execute: - - - ```rust let x = 5; @@ -159,9 +126,6 @@ compiler checks that the range isn’t empty at compile time. `char` and numeric values are the only types that Rust knows how to tell if a range is empty or not. - - - Here’s an example using ranges of `char` values: ```rust @@ -179,18 +143,9 @@ Rust can tell that `c` is within the first pattern’s range, and this will prin ### Destructuring to Break Apart Values - - - We can also use patterns to destructure structs, enums, tuples, and references in order to use different parts of these values. Let’s go through each of those! - - - #### Destructuring Structs Listing 18-12 shows a `Point` struct with two fields, `x` and `y`, that we can @@ -216,14 +171,6 @@ fn main() { Listing 18-12: Destructuring a struct’s fields into separate variables - - - This code creates the variables `a` and `b` that match the values of the `x` and `y` fields of the `p` variable. @@ -271,10 +218,6 @@ Listing 18-14 shows a `match` statement that separates `Point` values into three cases: points that lie directly on the `x` axis (which is true when `y = 0`), on the `y` axis (`x = 0`), or neither: - - - Filename: src/main.rs ```rust @@ -367,7 +310,7 @@ and there are no variables in that pattern. For struct-like enum variants such as `Message::Move`, we can use a pattern similar to the pattern we specify to match structs. After the variant name, we place curly brackets and then list the fields with variables so that we break -apart the pieces to use in the code for this arm. Here we use the shorthand +apart the pieces to use in the code for this arm. Here we use the shorthand form as shown in Listing 18-13. For tuple-like enum variants like `Message::Write`, that holds a tuple with one @@ -383,12 +326,6 @@ destructure the reference from the value, which we can do by specifying a `&` in the pattern. This lets us get a variable holding the value that the reference points to rather than getting a variable that holds the reference. - - - This is especially useful in closures where we have iterators that iterate over references, but we want to use the values in the closure rather than the references. @@ -418,9 +355,6 @@ let sum_of_squares: i32 = points Listing 18-16: Destructuring a reference to a struct into the struct field values - - - This code results in the value 135 in the variable `sum_of_squares`, which is the result from squaring the `x` value and the `y` value, adding those together, and then adding the result for each `Point` in the `points` vector to @@ -462,10 +396,6 @@ let ((feet, inches), Point {x, y}) = ((3, 10), Point { x: 3, y: -10 }); This lets us break complex types into their component parts so that we can use the values we’re interested in separately. - - - Destructuring with patterns is a convenient way to use pieces of values, such as the value from each field in a struct, separately from each other. @@ -500,11 +430,6 @@ fn main() { Listing 18-17: Using `_` in a function signature - - - This code will completely ignore the value passed as the first argument, 3, and will print out `This code only uses the y parameter: 4`. In most cases when you no longer need a particular function parameter, you would change the signature @@ -518,10 +443,6 @@ used a name instead. #### Ignoring Parts of a Value with a Nested `_` - - - We can also use `_` inside of another pattern to ignore just part of a value, when we only want to test for part of a value but have no use for the other parts in the corresponding code we want to run. Listing 18-18 shows code @@ -561,10 +482,6 @@ In all other cases (if either `setting_value` or `new_setting_value` are `None`), which is expressed by the `_` pattern in the second arm, we do want to allow `new_setting_value` to become `setting_value`. - - - We can also use underscores in multiple places within one pattern to ignore particular values, as shown in Listing 18-19 where we’re ignoring the second and fourth values in a tuple of five items: @@ -754,10 +671,6 @@ a pattern with a variable, and then another usage of the entire value after the `robot_name` value is transferred to the `name` variable in the pattern of the first `match` arm: - - - ```rust,ignore let robot_name = Some(String::from("Bors")); @@ -778,13 +691,6 @@ part of `robot_name` has been moved to `name`, we can no longer use `robot_name` in the `println!` after the `match` because `robot_name` no longer has ownership. - - - - - - In order to fix this code, we want to have the `Some(name)` pattern borrow that part of `robot_name` rather than taking ownership. Outside of patterns, we’ve seen that the way to borrow a value is to create a reference using `&`, so you @@ -842,9 +748,6 @@ arm code using the `*` operator in order to be able to mutate the value. ### Extra Conditionals with Match Guards - - A *match guard* is an additional `if` condition specified after the pattern in a `match` arm that also must match if the pattern matches in order for that arm to be chosen. Match guards are useful for expressing more complex ideas than a @@ -879,20 +782,12 @@ therefore matches any `Some` variant. There’s no way to express the `if x < 5` condition within a pattern, so the match guard has given us the ability to express this logic. - - - In Listing 18-11, we mentioned that we could use match guards to solve our pattern shadowing problem, where a new variable was created inside the pattern in the `match` expression instead of using the variable outside the `match`. That new variable meant we couldn’t test against the value that the outer variable had. Listing 18-30 shows how we can use a match guard to fix this: - - - Filename: src/main.rs ```rust @@ -925,12 +820,6 @@ introduce new variables. This `y` *is* the outer `y` rather than a new shadowed `y`, and we can express the idea that we’re looking for a value that has the same value as the outer `y` by comparing `n` to `y`. - - - You can also use the or operator `|` in a match guard to specify multiple patterns, and the match guard condition will apply to all of the patterns. Listing 18-31 shows the precedence of combining a match guard with a pattern @@ -938,14 +827,6 @@ that uses `|`. The important part of this example is that the `if y` match guard applies to 4, 5, *and* 6, even though it might look like `if y` only applies to 6: - - - ```rust let x = 4; let y = false; @@ -965,12 +846,6 @@ that the pattern of the first arm matches because `x` is 4, but the match guard `if y` is false, so the first arm is not chosen. The code moves on to the second arm, which does match, and this program prints `no`. - - - This is because the `if` condition applies to the whole pattern `4 | 5 | 6`, and not only to the last value `6`. In other words, the precedence of a match guard in relation to a pattern behaves like this: @@ -992,13 +867,6 @@ was only applied to the final value in the list of values specified using the ### `@` Bindings - - - The at operator, `@`, lets us create a variable that holds a value at the same time we’re testing that value to see if it matches a pattern. Listing 18-32 shows an example where we want to test that a `Message::Hello` `id` field is From 3a406f497e52e0b2f516bfdb1cd10e9e7cdc69d1 Mon Sep 17 00:00:00 2001 From: Marcin Jekot Date: Thu, 22 Mar 2018 18:21:51 +0200 Subject: [PATCH 006/749] Fixup std::env::var is a function (not a method) --- .../src/ch12-05-working-with-environment-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/second-edition/src/ch12-05-working-with-environment-variables.md b/second-edition/src/ch12-05-working-with-environment-variables.md index 78a4713279..c9573e00d1 100644 --- a/second-edition/src/ch12-05-working-with-environment-variables.md +++ b/second-edition/src/ch12-05-working-with-environment-variables.md @@ -198,7 +198,7 @@ pub fn run(config: Config) -> Result<(), Box> { Finally, we need to check for the environment variable. The functions for working with environment variables are in the `env` module in the standard library, so we want to bring that module into scope with a `use std::env;` line -at the top of *src/lib.rs*. Then we’ll use the `var` method from the `env` +at the top of *src/lib.rs*. Then we’ll use the `var` function from the `env` module to check for an environment variable named `CASE_INSENSITIVE`, as shown in Listing 12-23: @@ -235,7 +235,7 @@ impl Config { Here, we create a new variable `case_sensitive`. To set its value, we call the `env::var` function and pass it the name of the `CASE_INSENSITIVE` environment -variable. The `env::var` method returns a `Result` that will be the successful +variable. The `env::var` function returns a `Result` that will be the successful `Ok` variant that contains the value of the environment variable if the environment variable is set. It will return the `Err` variant if the environment variable is not set. From ecb4f19972ca97459cb0f075468e0ae5b649c734 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 14:13:06 -0400 Subject: [PATCH 007/749] Carol's edits after copyediting --- second-edition/nostarch/odt/chapter18.docx | Bin 107705 -> 89578 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/second-edition/nostarch/odt/chapter18.docx b/second-edition/nostarch/odt/chapter18.docx index fd0df4ce69aba043b81221ccf5bfd9b7309cb72c..417bc9cbd555e7e4f052ca3481b729a268d1da24 100644 GIT binary patch literal 89578 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 literal 107705 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

! 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%0DG8R8)`C9870k=MroT)eF`U74J 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 Date: Thu, 22 Mar 2018 14:27:14 -0400 Subject: [PATCH 008/749] Add a missing end span tag --- second-edition/src/ch18-03-pattern-syntax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/second-edition/src/ch18-03-pattern-syntax.md b/second-edition/src/ch18-03-pattern-syntax.md index 944e22165d..1d17e3b592 100644 --- a/second-edition/src/ch18-03-pattern-syntax.md +++ b/second-edition/src/ch18-03-pattern-syntax.md @@ -151,7 +151,7 @@ in order to use different parts of these values. Let’s go through each of thos Listing 18-12 shows a `Point` struct with two fields, `x` and `y`, that we can break apart using a pattern with a `let` statement: -Filename: src/main.rs +Filename: src/main.rs ```rust struct Point { From fe9ea3aae6feaea1f1592390be39090c18e21fcc Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 14:50:34 -0400 Subject: [PATCH 009/749] Propagate edits everywhere --- second-edition/nostarch/chapter18.md | 881 +++++++++--------- second-edition/src/ch18-00-patterns.md | 34 +- .../ch18-01-all-the-places-for-patterns.md | 197 ++-- second-edition/src/ch18-02-refutability.md | 89 +- second-edition/src/ch18-03-pattern-syntax.md | 551 ++++++----- 5 files changed, 882 insertions(+), 870 deletions(-) diff --git a/second-edition/nostarch/chapter18.md b/second-edition/nostarch/chapter18.md index d59c0406f4..39b33d36c3 100644 --- a/second-edition/nostarch/chapter18.md +++ b/second-edition/nostarch/chapter18.md @@ -5,43 +5,43 @@ Patterns are a special syntax in Rust for matching against the structure of types, both complex and simple. Using patterns in conjunction with `match` -expressions and other constructs gives you more control over the control flow -of a program. A pattern is made up of some combination of: +expressions and other constructs gives you more control over a program’s +control flow. A pattern consists of some combination of the following: -- literals -- destructured arrays, enums, structs, or tuples -- variables -- wildcards -- placeholders +* Literals +* Destructured arrays, enums, structs, or tuples +* Variables +* Wildcards +* Placeholders -These pieces describe the shape of the data we’re working with, which we then -match against values to determine whether our program has the correct data to -continue running a particular bit of code. +These components describe the shape of the data we’re working with, which we +then match against values to determine whether our program has the correct data +to continue running a particular piece of code. -To use a pattern we compare it to some value. If the pattern matches our value, -we use the value parts in our code. Recall our `match` expressions from Chapter -6 that used patterns like a coin sorting machine. If the value fits the shape -of the pattern, we can use the named pieces. If it doesn’t, the code associated -with the pattern won’t run. +To use a pattern, we compare it to some value. If the pattern matches the +value, we use the value parts in our code. Recall the `match` expressions in +Chapter 6 that used patterns, such as the coin sorting machine example. If the +value fits the shape of the pattern, we can use the named pieces. If it +doesn’t, the code associated with the pattern won’t run. This chapter is a reference on all things related to patterns. We’ll cover the valid places to use patterns, the difference between *refutable* and *irrefutable* patterns, and the different kinds of pattern syntax that you -might see. By the end, you’ll see how to use patterns to create powerful and -clear code. +might see. By the end of the chapter, you’ll know how to use patterns to +express many concepts in a clear way. -## All the Places Patterns May be Used +## All the Places Patterns Can Be Used Patterns pop up in a number of places in Rust, and you’ve been using them a lot -without realizing it! This section is a reference to all the places where -patterns are valid. +without realizing it! This section provides you with a reference to all the +places where patterns are valid. ### `match` Arms -As we discussed in Chapter 6, patterns are used in the arms of `match` -expressions. Formally, `match` expressions are defined as the keyword `match`, -a value to match on, and one or more match arms that consist of a pattern and -an expression to run if the value matches that arm’s pattern: +As discussed in Chapter 6, we use patterns in the arms of `match` expressions. +Formally, `match` expressions are defined as the keyword `match`, a value to +match on, and one or more match arms that consist of a pattern and an +expression to run if the value matches that arm’s pattern, like this: ``` match VALUE { @@ -51,40 +51,41 @@ match VALUE { } ``` -`match` expressions are required to be *exhaustive*, in the sense that all -possibilities for the value in the `match` expression must be accounted for. -One way to ensure you have every possibility covered is to have a catch-all -pattern for the last arm---for example, a variable name matching any value can -never fail and thus covers every case remaining. +One requirement for `match` expressions is that they need to be *exhaustive* in +the sense that all possibilities for the value in the `match` expression must +be accounted for. One way to ensure you’ve covered every possibility is to have +a catchall pattern for the last arm: for example, a variable name matching any +value can never fail and thus covers every remaining case. -There’s a particular pattern `_` that will match anything, but never binds to a -variable, and so is often used in the last match arm. This can be useful when -you want to ignore any value not specified, for example. We’ll cover this in -more detail later in this chapter. +A particular pattern `_` will match anything, but it never binds to a variable, +so it’s often used in the last match arm. The `_` pattern can be useful when +you want to ignore any value not specified, for example. We’ll cover the `_` +pattern in more detail in the “Ignoring Values in a Pattern” section later in +this chapter. ### Conditional `if let` Expressions -In Chapter 6 we discussed how `if let` expressions are used mainly as a shorter -way to write the equivalent of a `match` that only cares about matching one -case. Optionally,`if let` can have a corresponding `else` with code to run if +In Chapter 6 we discussed how to use `if let` expressions mainly as a shorter +way to write the equivalent of a `match` that only matches one case. +Optionally, `if let` can have a corresponding `else` containing code to run if the pattern in the `if let` doesn’t match. Listing 18-1 shows that it’s also possible to mix and match `if let`, `else -if`, and `else if let` expressions. This gives us more flexibility than a -`match` expression where we can only express one value to compare with the -patterns; the conditions in a series of `if let`/`else if`/`else if let` arms -aren’t required to have any relation to each other. - -The code in Listing 18-1 shows a series of checks for a bunch of different -conditions that decide what the background color should be. For the purposes of -the example, we’ve created variables with hardcoded values that a real program -might get by asking the user. - -If the user has specified a favorite color, that is used as the background -color. If today is Tuesday, the background color will be green. If the user has -specified their age as a string and we can parse it as a number successfully, -we’ll use either purple or orange depending on the value of the parsed number. -Finally, if none of these conditions apply, the background color will be blue: +if`, and `else if let` expressions. Doing so gives us more flexibility than a +`match` expression in which we can only express one value to compare with the +patterns. Also, the conditions in a series of `if let`, `else if`, `else if +let` arms aren’t required to relate to each other. + +The code in Listing 18-1 shows a series of checks for several different +conditions that decide what the background color should be. For this example, +we’ve created variables with hardcoded values that a real program might receive +from user input. + +If the user specifies a favorite color, that color is the background color. If +today is Tuesday, the background color will be green. If the user specifies +their age as a string and we can parse it as a number successfully, the color +is either purple or orange depending on the value of the number. If none of +these conditions apply, the background color will be blue: Filename: src/main.rs @@ -116,26 +117,25 @@ This conditional structure lets us support complex requirements. With the hardcoded values we have here, this example will print `Using purple as the background color`. -We can see that `if let` can also introduce shadowed variables, in the same way -that `match` arms can: `if let Ok(age) = age` introduces a new shadowed `age` -variable that contains the value inside the `Ok` variant. This means we need to -place the `if age > 30` condition within that block; we can’t combine these two -conditions into `if let Ok(age) = age && age > 30` because the shadowed `age` -we want to compare to 30 isn’t valid until the new scope starts with the curly -brace. +You can see that `if let` can also introduce shadowed variables in the same way +that `match` arms can: the line `if let Ok(age) = age` introduces a new +shadowed `age` variable that contains the value inside the `Ok` variant. This +means we need to place the `if age > 30` condition within that block: we can’t +combine these two conditions into `if let Ok(age) = age && age > 30`. The +shadowed `age` we want to compare to 30 isn’t valid until the new scope starts +with the curly bracket. -The downside of using `if let` expressions in this way is that exhaustiveness -is not checked by the compiler, whereas with `match` expressions it is. If we -left off the last `else` block and so missed handling some cases, the compiler -would not alert us of the possible logic bug. +The downside of using `if let` expressions is that the compiler doesn’t check +exhaustiveness, whereas with `match` expressions it does. If we omitted the +last `else` block and therefore missed handling some cases, the compiler would +not alert us to the possible logic bug. ### `while let` Conditional Loops -Similar in construction to `if let`, the `while let` conditional loop allows -your `while` loop to run for as long as a pattern continues to match. The -example in Listing 18-2 shows a `while let` loop that uses a vector as a stack -and prints out the values in the vector in the opposite order they were pushed -in: +Similar in construction to `if let`, the `while let` conditional loop allows a +`while` loop to run for as long as a pattern continues to match. The example in +Listing 18-2 shows a `while let` loop that uses a vector as a stack and prints +out the values in the vector in the opposite order in which they were pushed: ``` let mut stack = Vec::new(); @@ -149,27 +149,27 @@ while let Some(top) = stack.pop() { } ``` -Listing 18-2: Using a `while let` loop to print out values for as long as +Listing 18-2: Using a `while let` loop to print values for as long as `stack.pop()` returns `Some` -This example will print 3, 2, then 1. The `pop` method takes the last element -out of the vector and returns `Some(value)`. If the vector is empty, it returns -`None`. The `while` loop will continue running the code in its block as long as -`pop` is returning `Some`. Once it returns `None`, the loop stops. We can use -`while let` to pop every element off our stack. +This example prints 3, 2, and then 1. The `pop` method takes the last element +out of the vector and returns `Some(value)`. If the vector is empty, `pop` +returns `None`. The `while` loop continues running the code in its block as +long as `pop` returns `Some`. When `pop` returns `None`, the loop stops. We can +use `while let` to pop every element off our stack. ### `for` Loops In Chapter 3 we mentioned that the `for` loop is the most common loop construction in Rust code, but we haven’t yet discussed the pattern that `for` takes. In a `for` loop, the pattern is the value that directly follows the -keyword `for`, so the `x` in `for x in y`. +keyword `for`, so in `for x in y` the `x` is the pattern. Listing 18-3 demonstrates how to use a pattern in a `for` loop to destructure, or break apart, a tuple as part of the `for` loop: ``` -let v = vec![1, 2, 3]; +let v = vec!['a', 'b', 'c']; for (index, value) in v.iter().enumerate() { println!("{} is at index {}", value, index); @@ -178,48 +178,48 @@ for (index, value) in v.iter().enumerate() { Listing 18-3: Using a pattern in a `for` loop to destructure a tuple -This will print: +The code in Listing 18-3 will print the following: ``` -1 is at index 0 -2 is at index 1 -3 is at index 2 +a is at index 0 +b is at index 1 +c is at index 2 ``` We use the `enumerate` method to adapt an iterator to produce a value and that value’s index in the iterator, placed into a tuple. The first call to -`enumerate` produces the tuple `(0, 1)`. When this value is matched to the -pattern `(index, value)`, `index` will be 0 and `value` will be 1, printing our -first line of output. +`enumerate` produces the tuple `(0, 'a')`. When this value is matched to the +pattern `(index, value)`, `index` will be `0` and `value` will be `'a'`, +printing the first line of the output. ### `let` Statements -Before this chapter, we’d only explicitly discussed using patterns with `match` -and `if let`, but in fact we’ve used patterns in other places too, including -`let` statements. For example, consider this straightforward variable -assignment with `let`: +Prior to this chapter, we had only explicitly discussed using patterns with +`match` and `if let`, but in fact, we’ve used patterns in other places as well, +including in `let` statements. For example, consider this straightforward +variable assignment with `let`: ``` let x = 5; ``` -We’ve done this hundreds of times throughout this book, and though you may not -have realized it, you were using patterns! A `let` statement looks like this, -more formally: +Throughout this book, we’ve used `let` like this hundreds of times, and +although you might not have realized it, you were using patterns! More +formally, a `let` statement looks like this: ``` let PATTERN = EXPRESSION; ``` In statements like `let x = 5;` with a variable name in the `PATTERN` slot, the -variable name is just a particularly humble form of pattern. We compare the -expression against the pattern, and assign any names we find. So for our `let x -= 5;` example, `x` is a pattern that says “bind what matches here to the -variable `x`.” And since the name `x` is the whole pattern, this pattern +variable name is just a particularly simple form of a pattern. Rust compares +the expression against the pattern and assigns any names it finds. So in the +`let x = 5;` example, `x` is a pattern that means “bind what matches here to +the variable `x`.” Because the name `x` is the whole pattern, this pattern effectively means “bind everything to the variable `x`, whatever the value is.” -To see the pattern matching aspect of `let` a bit more clearly, consider -Listing 18-4 where we’re using a pattern with `let` to destructure a tuple: +To see the pattern matching aspect of `let` more clearly, consider Listing +18-4, which uses a pattern with `let` to destructure a tuple: ``` let (x, y, z) = (1, 2, 3); @@ -229,14 +229,14 @@ Listing 18-4: Using a pattern to destructure a tuple and create three variables at once Here, we match a tuple against a pattern. Rust compares the value `(1, 2, 3)` -to the pattern `(x, y, z)` and sees that the value matches the pattern, so will -bind `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple -pattern as nesting three individual variable patterns inside of it. +to the pattern `(x, y, z)` and sees that the value matches the pattern, so Rust +binds `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple +pattern as nesting three individual variable patterns inside it. -If the number of elements in the pattern don’t match the number of elements in -the tuple, the overall type won’t match and we’ll get a compiler error. For -example, Listing 18-5 shows an attempt to destructure into two variables a -tuple with three elements that won’t work: +If the number of elements in the pattern doesn’t match the number of elements +in the tuple, the overall type won’t match and we’ll get a compiler error. For +example, Listing 18-5 shows an attempt to destructure a tuple with three +elements into two variables, which won’t work: ``` let (x, y) = (1, 2, 3); @@ -245,7 +245,7 @@ let (x, y) = (1, 2, 3); Listing 18-5: Incorrectly constructing a pattern whose variables don’t match the number of elements in the tuple -Attempting to compile this code gives us this type error: +Attempting to compile this code results in this type error: ``` error[E0308]: mismatched types @@ -259,16 +259,16 @@ error[E0308]: mismatched types ``` If we wanted to ignore one or more of the values in the tuple, we could use `_` -or `..` as we’ll see in the “Ignoring Values in a Pattern” section. If the -problem was that we had too many variables in the pattern, the solution would -be to make the types match by removing variables so that the number of -variables is equal to the number of elements in the tuple. +or `..` as you’ll see in the “Ignoring Values in a Pattern” section. If the +problem is that we have too many variables in the pattern, the solution is to +make the types match by removing variables so the number of variables equals +the number of elements in the tuple. ### Function Parameters -Function parameters can also be patterns. The code in Listing 18-6, declaring a -function named `foo` that takes one parameter named `x` of type `i32`, should -by now look familiar: +Function parameters can also be patterns. The code in Listing 18-6, which +declares a function named `foo` that takes one parameter named `x` of type +`i32`, should by now look familiar: ``` fn foo(x: i32) { @@ -278,9 +278,9 @@ fn foo(x: i32) { Listing 18-6: A function signature uses patterns in the parameters -The `x` part is a pattern! Like we did with `let`, we could match a tuple in a -function’s arguments to the pattern. Listing 18-7 splits apart the values in a -tuple as we pass it to a function: +The `x` part is a pattern! As we did with `let`, we could match a tuple in a +function’s arguments to the pattern. Listing 18-7 splits the values in a tuple +as we pass it to a function: Filename: src/main.rs @@ -297,44 +297,45 @@ fn main() { Listing 18-7: A function with parameters that destructure a tuple -This will print `Current location: (3, 5)`. The values `&(3, 5)` match the -pattern `&(x, y)`, so `x` gets the value 3, and `y` gets the value 5. +This code prints `Current location: (3, 5)`. The values `&(3, 5)` match the +pattern `&(x, y)`, so `x` is the value `3` and `y` is the value `5`. -We can use patterns in closure parameter lists in the same way, too, because -closures are similar to functions, as we discussed in Chapter 13. +We can also use patterns in closure parameter lists in the same way as in +function parameter lists, because closures are similar to functions, as +discussed in Chapter 13. -We’ve seen several ways of using patterns now, but patterns do not work the -same in every place we can use them; in some places, the patterns must be -*irrefutable*, meaning they must match any value provided. In other -circumstances, they may be refutable. Let’s discuss that next. +At this point, you’ve seen several ways of using patterns, but patterns don’t +work the same in every place we can use them. In some places, the patterns must +be *irrefutable*, meaning they must match any value provided. In other +circumstances, they can be refutable. Let’s discuss these two concepts next. ## Refutability: Whether a Pattern Might Fail to Match Patterns come in two forms: refutable and irrefutable. Patterns that will match -for any possible value passed are said to be *irrefutable*. An example would be -`x` in the statement `let x = 5;` because `x` matches anything and so cannot -fail to match. Patterns that may fail to match for some possible value are said -to be *refutable*. An example of this would be `Some(x)` in the expression `if -let Some(x) = a_value`; if the value in the `a_value` variable is `None` rather -than `Some`, then the `Some(x)` pattern would not match. - -`let` statements, function parameters, and `for` loops can only accept -irrefutable patterns, because the program cannot continue do anything -meaningful with values that don’t match. The `if let` and `while let` -expressions are restricted to only accept refutable patterns, because by -definition they’re intended to handle possible failure---the functionality of a -conditional is in its ability to perform differently upon success and failure. +for any possible value passed are *irrefutable*. An example would be `x` in the +statement `let x = 5;` because `x` matches anything and therefore cannot fail +to match. Patterns that can fail to match for some possible value are +*refutable*. An example would be `Some(x)` in the expression `if let Some(x) = +a_value`; if the value in `a_value` variable is `None` rather than `Some`, the +`Some(x)` pattern would not match. + +Function parameters, `let` statements, and `for` loops can only accept +irrefutable patterns, because the program cannot do anything meaningful when +values don’t match. The `if let` and `while let` expressions only accept +refutable patterns, because by definition they’re intended to handle possible +failure: the functionality of a conditional is in its ability to perform +differently depending on success or failure. In general, you shouldn’t have to worry about the distinction between refutable -and irrefutable patterns, but you do need to be familiar with the concept of -refutability so you can respond when you see it in an error message. In those -cases, you’ll need to change either the pattern or the construct you’re using -the pattern with, depending on your intentions for the behavior of the code. +and irrefutable patterns; however, you do need to be familiar with the concept +of refutability so you can respond when you see it in an error message. In +those cases, you’ll need to change either the pattern or the construct you’re +using the pattern with, depending on the intended behavior of the code. -Let’s look at an example of what happens if we try to use a refutable pattern -where Rust requires an irrefutable pattern and vice versa. In Listing 18-8, we -have a `let` statement, but for the pattern we’ve specified `Some(x)`, a -refutable pattern. As you might expect, this will error: +Let’s look at an example of what happens when we try to use a refutable pattern +where Rust requires an irrefutable pattern and vice versa. Listing 18-8 shows a +`let` statement, but for the pattern we’ve specified `Some(x)`, a refutable +pattern. As you might expect, this code will error: ``` let Some(x) = some_option_value; @@ -343,27 +344,27 @@ let Some(x) = some_option_value; Listing 18-8: Attempting to use a refutable pattern with `let` If `some_option_value` was a `None` value, it would fail to match the pattern -`Some(x)`, meaning the pattern is refutable. The `let` statement, however, can -only accept an irrefutable patterns because there’s nothing valid the code -could do with a `None` value. At compile time, Rust will complain that we’ve -tried to use a refutable pattern where an irrefutable pattern is required: +`Some(x)`, meaning the pattern is refutable. However, the `let` statement can +only accept an irrefutable pattern because there is nothing valid the code can +do with a `None` value. At compile time, Rust will complain that we’ve tried to +use a refutable pattern where an irrefutable pattern is required: ``` error[E0005]: refutable pattern in local binding: `None` not covered - --> :3:5 + --> | 3 | let Some(x) = some_option_value; | ^^^^^^^ pattern `None` not covered ``` -We didn’t cover (and couldn’t cover!) every valid value with the pattern -`Some(x)`, so Rust will rightfully complain. +Because we didn’t cover (and couldn’t cover!) every valid value with the +pattern `Some(x)`, Rust rightfully produces a compiler error. -To fix the case where we have a refutable pattern in a place where an -irrefutable pattern is needed, we can change the code that uses the pattern: -instead of using `let`, we can use `if let`. That way, if the pattern doesn’t -match, the code will just skip the code in the curly brackets, giving it a way -to continue validly. Listing 18-9 shows how to fix the code in Listing 18-8. +To fix the problem where we have a refutable pattern where an irrefutable +pattern is needed, we can change the code that uses the pattern: instead of +using `let`, we can use `if let`. Then if the pattern doesn’t match, the code +will just skip the code in the curly brackets, giving it a way to continue +validly. Listing 18-9 shows how to fix the code in Listing 18-8: ``` if let Some(x) = some_option_value { @@ -374,10 +375,10 @@ if let Some(x) = some_option_value { Listing 18-9: Using `if let` and a block with refutable patterns instead of `let` -We’ve given the code an out! This code is perfectly valid, though does now of -course mean we cannot use an irrefutable pattern without receiving an error. If -we give `if let` a pattern that will always match, such as `x` as shown in -Listing 18-10, it will error: +We’ve given the code an out! This code is perfectly valid, although it means we +cannot use an irrefutable pattern without receiving an error. If we give `if +let` a pattern that will always match, such as `x`, as shown in Listing 18-10, +it will error: ``` if let x = 5 { @@ -399,23 +400,24 @@ error[E0162]: irrefutable if-let pattern ``` For this reason, match arms must use refutable patterns, except for the last -arm that should match any remaining values with an irrefutable pattern. Using -an irrefutable pattern in a `match` with only one arm is allowed, but isn’t -particularly useful and could be replaced with a simpler `let` statement. +arm, which should match any remaining values with an irrefutable pattern. Rust +allows us to use an irrefutable pattern in a `match` with only one arm, but +this syntax isn’t particularly useful and could be replaced with a simpler +`let` statement. -Now that we’ve discussed where patterns can be used and the difference between -refutable and irrefutable patterns, let’s go over all the syntax we can use to -create patterns. +Now that you know where to use patterns and the difference between refutable +and irrefutable patterns, let’s cover all the syntax we can use to create +patterns. ## All the Pattern Syntax -We’ve seen examples of many different kinds of patterns throughout the book, so -we’ll gather all the syntax valid in patterns in one place here, and why you +Throughout the book, you’ve seen examples of many different kinds of patterns. +In this section, we gather all the syntax valid in patterns and discuss why you might want to use each of them. ### Matching Literals -As we saw in Chapter 6, you can match patterns against literals directly. This +As you saw in Chapter 6, you can match patterns against literals directly. The following code gives some examples: ``` @@ -429,21 +431,22 @@ match x { } ``` -This prints `one` since the value in `x` is 1. This is useful when you want to -take some action if you get a concrete value in particular. +This code prints `one` because the value in `x` is 1. This syntax is useful +when you want your code to take an action if it gets a particular concrete +value. ### Matching Named Variables -Named variables are irrefutable patterns that match any value, which we have -used many times before. There is a complication, however, when used in `match` -expressions. Because `match` starts a new scope, variables declared as part of -a pattern inside the `match` expression will shadow those with the same name -outside the `match` construct---as is the case with all variables. In Listing -18-11, we declare a variable named `x` with the value `Some(5)` and a variable -`y` with the value `10`. We then create a `match` expression on the value `x`. -Take a look at the patterns in the match arms and `println!` at the end, and -try to figure out what will be printed before running this code or reading -further: +Named variables are irrefutable patterns that match any value, and we’ve used +them many times in the book. However, there is a complication when you use +named variables in `match` expressions. Because `match` starts a new scope, +variables declared as part of a pattern inside the `match` expression will +shadow those with the same name outside the `match` construct, as is the case +with all variables. In Listing 18-11, we declare a variable named `x` with the +value `Some(5)` and a variable `y` with the value `10`. We then create a +`match` expression on the value `x`. Look at the patterns in the match arms and +`println!` at the end, and try to figure out what the code will print before +running this code or reading further: Filename: src/main.rs @@ -462,40 +465,43 @@ fn main() { } ``` -Listing 18-11: A `match` statement with an arm that introduces a shadowed +Listing 18-11: A `match` expression with an arm that introduces a shadowed variable `y` -Let’s walk through what happens when the `match` statement runs. The pattern in -the first match arm does not match the defined value of `x`, so we continue. +Let’s walk through what happens when the `match` expression runs. The pattern +in the first match arm doesn’t match the defined value of `x`, so the code +continues. -The pattern in the second match arm introduces a new variable name `y` that +The pattern in the second match arm introduces a new variable named `y` that will match any value inside a `Some` value. Because we’re in a new scope inside -the `match` expression, this is a new variable, and not the `y` we declared at +the `match` expression, this is a new `y` variable, not the `y` we declared at the beginning with the value 10. This new `y` binding will match any value -inside a `Some`, which is what we have in `x`. Therefore this `y` binds to the -inner value of the `Some` in `x`. That value is 5, and so the expression for +inside a `Some`, which is what we have in `x`. Therefore, this new `y` binds to +the inner value of the `Some` in `x`. That value is `5`, so the expression for that arm executes and prints `Matched, y = 5`. If `x` had been a `None` value instead of `Some(5)`, the patterns in the first -two arms would not have matched, so we would have matched to the underscore. We -did not introduce the `x` variable in the pattern of that arm, so the `x` in -the expression is still the outer `x` that has not been shadowed. In this -hypothetical case, the `match` would print `Default case, x = None`. +two arms wouldn’t have matched, so the value would have matched to the +underscore. We didn’t introduce the `x` variable in the pattern of the +underscore arm, so the `x` in the expression is still the outer `x` that hasn’t +been shadowed. In this hypothetical case, the `match` would print `Default +case, x = None`. -Once the `match` expression is over, its scope ends, and so does the scope of +When the `match` expression is done, its scope ends, and so does the scope of the inner `y`. The last `println!` produces `at the end: x = Some(5), y = 10`. To create a `match` expression that compares the values of the outer `x` and `y`, rather than introducing a shadowed variable, we would need to use a match -guard conditional instead. We’ll be talking about match guards later in this -section. +guard conditional instead. We’ll talk about match guards later in the “Extra +Conditionals with Match Guards” section. ### Multiple Patterns -In `match` expressions you can match multiple patterns using the `|` syntax, +In `match` expressions, you can match multiple patterns using the `|` syntax, which means *or*. For example, the following code matches the value of `x` against the match arms, the first of which has an *or* option, meaning if the -value of `x` matches either of the values in that arm, it will run: +value of `x` matches either of the values in that arm, that arm’s code will +run: ``` let x = 1; @@ -507,13 +513,13 @@ match x { } ``` -This code will print `one or two`. +This code prints `one or two`. ### Matching Ranges of Values with `...` -The `...` syntax allows you to match to an inclusive range of values. In the -following code, when a pattern matches any of the values within the range, -that arm will execute: +The `...` syntax allows us to match to an inclusive range of values. In the +following code, when a pattern matches any of the values within the range, that +arm will execute: ``` let x = 5; @@ -524,18 +530,17 @@ match x { } ``` -If `x` is 1, 2, 3, 4, or 5, the first arm will match. This is more convenient -than using the `|` operator to express the same idea; instead of `1 ... 5` we -would have to specify `1 | 2 | 3 | 4 | 5` using `|`. Specifying a range instead -is much shorter, especially if we wanted to match, say, any number between 1 -and 1,000! +If `x` is 1, 2, 3, 4, or 5, the first arm will match. This syntax is more +convenient than using the `|` operator to express the same idea; instead of `1 +... 5`, we would have to specify `1 | 2 | 3 | 4 | 5` if we used `|`. Specifying +a range is much shorter, especially if we want to match, say, any number +between 1 and 1,000! Ranges are only allowed with numeric values or `char` values, because the -compiler checks that the range isn’t empty at compile time. `char` and numeric -values are the only types that Rust knows how to tell if a range is empty or -not. +compiler checks that the range isn’t empty at compile time. The only types for +which Rust can tell if a range is empty or not are `char` and numeric values. -Here’s an example using ranges of `char` values: +Here is an example using ranges of `char` values: ``` let x = 'c'; @@ -547,13 +552,13 @@ match x { } ``` -Rust can tell that `c` is within the first pattern’s range, and this will print -`early ASCII letter`. +Rust can tell that `c` is within the first pattern’s range and prints `early +ASCII letter`. ### Destructuring to Break Apart Values We can also use patterns to destructure structs, enums, tuples, and references -in order to use different parts of these values. Let’s go through each of those! +to use different parts of these values. Let’s walk through each value. #### Destructuring Structs @@ -580,18 +585,18 @@ fn main() { Listing 18-12: Destructuring a struct’s fields into separate variables This code creates the variables `a` and `b` that match the values of the `x` -and `y` fields of the `p` variable. - -This example shows that the names of the variable names in the pattern don’t -have to match the field names of the struct, but it’s common to want the -variable names to match the field names to make it easier to remember which -variables came from which fields. Because having variable names match the -fields is common, and because writing `let Point { x: x, y: y } = p;` contains -a lot of duplication, there’s a shorthand for patterns that match struct -fields: you only need to list the name of the struct field, and the variables -created from the pattern will have the same names. Listing 18-13 shows code -that behaves in the same way as the code in Listing 18-12, but the variables -created in the `let` pattern are `x` and `y` instead of `a` and `b`: +and `y` fields of the `p` variable. This example shows that the names of the +variables in the pattern don’t have to match the field names of the struct. But +it’s common to want the variable names to match the field names to make it +easier to remember which variables came from which fields. + +Because having variable names match the fields is common and because writing +`let Point { x: x, y: y } = p;` contains a lot of duplication, there is a +shorthand for patterns that match struct fields: you only need to list the name +of the struct field, and the variables created from the pattern will have the +same names. Listing 18-13 shows code that behaves in the same way as the code +in Listing 18-12, but the variables created in the `let` pattern are `x` and +`y` instead of `a` and `b`: Filename: src/main.rs @@ -612,16 +617,16 @@ fn main() { Listing 18-13: Destructuring struct fields using struct field shorthand -This code creates the variables `x` and `y` that match the `x` and `y` of the -`p` variable. The outcome is that the variables `x` and `y` contain the values -from the `p` struct. +This code creates the variables `x` and `y` that match the `x` and `y` fields +of the `p` variable. The outcome is that the variables `x` and `y` contain the +values from the `p` struct. We can also destructure with literal values as part of the struct pattern -rather than creating variables for all of the fields. This allows us to test +rather than creating variables for all the fields. Doing so allows us to test some of the fields for particular values while creating variables to destructure the other fields. -Listing 18-14 shows a `match` statement that separates `Point` values into +Listing 18-14 shows a `match` expression that separates `Point` values into three cases: points that lie directly on the `x` axis (which is true when `y = 0`), on the `y` axis (`x = 0`), or neither: @@ -643,23 +648,24 @@ Listing 18-14: Destructuring and matching literal values in one pattern The first arm will match any point that lies on the `x` axis by specifying that the `y` field matches if its value matches the literal `0`. The pattern still -creates an `x` variable that we can use in the code for this arm. Similarly, -the second arm matches any point on the `y` axis by specifying that the `x` -field matches if its value is `0`, and creates a variable `y` for the value of -the `y` field. The third arm doesn’t specify any literals, so it matches any -other `Point` and creates variables for both the `x` and `y` fields. +creates an `x` variable that we can use in the code for this arm. + +Similarly, the second arm matches any point on the `y` axis by specifying that +the `x` field matches if its value is `0` and creates a variable `y` for the +value of the `y` field. The third arm doesn’t specify any literals, so it +matches any other `Point` and creates variables for both the `x` and `y` fields. In this example, the value `p` matches the second arm by virtue of `x` -containing a 0, so this will print `On the y axis at 7`. +containing a 0, so this code will print `On the y axis at 7`. #### Destructuring Enums -We’ve destructured enums before in this book, like in Listing 6-5 in Chapter 6 -when we destructured an `Option`. One detail we haven’t mentioned -explicitly is that the pattern to destructure an enum should correspond to the -way the data stored within the enum is defined. For example, let’s take the -`Message` enum from Listing 6-2 and write a `match` with patterns that will -destructure each inner value in Listing 18-15: +We’ve destructured enums earlier in this book, for example, when we +destructured `Option` in Listing 6-5 in Chapter 6. One detail we haven’t +mentioned explicitly is that the pattern to destructure an enum should +correspond to the way the data stored within the enum is defined. As an +example, in Listing 18-15 we use the `Message` enum from Listing 6-2 and write +a `match` with patterns that will destructure each inner value: Filename: src/main.rs @@ -678,7 +684,7 @@ fn main() { Message::Quit => { println!("The Quit variant has no data to destructure.") }, - Message::Move { x: x, y: y } => { + Message::Move { x, y } => { println!( "Move in the x direction {} and in the y direction {}", x, @@ -703,17 +709,18 @@ Listing 18-15: Destructuring enum variants that hold different kinds of values This code will print `Change the color to red 0, green 160, and blue 255`. Try changing the value of `msg` to see the code from the other arms run. -For enum variants without any data like `Message::Quit`, we can’t destructure +For enum variants without any data, like `Message::Quit`, we can’t destructure the value any further. We can only match on the literal `Message::Quit` value, -and there are no variables in that pattern. +and no variables are in that pattern. -For struct-like enum variants such as `Message::Move`, we can use a pattern +For struct-like enum variants, such as `Message::Move`, we can use a pattern similar to the pattern we specify to match structs. After the variant name, we -place curly brackets and then list the fields with variables so that we break -apart the pieces to use in the code for this arm. +place curly brackets and then list the fields with variables so we break apart +the pieces to use in the code for this arm. Here we use the shorthand form as +we did in Listing 18-13. -For tuple-like enum variants like `Message::Write`, that holds a tuple with one -element, and `Message::ChangeColor` that holds a tuple with three elements, the +For tuple-like enum variants, like `Message::Write` that holds a tuple with one +element and `Message::ChangeColor` that holds a tuple with three elements, the pattern is similar to the pattern we specify to match tuples. The number of variables in the pattern must match the number of elements in the variant we’re matching. @@ -721,16 +728,15 @@ matching. #### Destructuring References When the value we’re matching to our pattern contains a reference, we need to -destructure the reference from the value, which we can do can by specifying a -`&` in the pattern. This lets us get a variable holding the value that the +destructure the reference from the value, which we can do by specifying a `&` +in the pattern. Doing so lets us get a variable holding the value that the reference points to rather than getting a variable that holds the reference. - -This is especially useful in closures where we have iterators that iterate over -references, but we want to use the values in the closure rather than the -references. +This technique is especially useful in closures where we have iterators that +iterate over references, but we want to use the values in the closure rather +than the references. The example in Listing 18-16 iterates over references to `Point` instances in a -vector, and destructures both the reference and the struct so we can perform +vector, and destructures the reference and the struct so we can perform calculations on the `x` and `y` values easily: ``` @@ -739,6 +745,7 @@ let points = vec![ Point { x: 1, y: 5 }, Point { x: 10, y: -3 }, ]; + let sum_of_squares: i32 = points .iter() .map(|&Point { x, y }| x * x + y * y) @@ -748,14 +755,14 @@ let sum_of_squares: i32 = points Listing 18-16: Destructuring a reference to a struct into the struct field values -This code results in the value 135 in the variable `sum_of_squares`, which is -the result from squaring the `x` value and the `y` value, adding those +This code gives us the variable `sum_of_squares` holding the value 135, which +is the result of squaring the `x` value and the `y` value, adding those together, and then adding the result for each `Point` in the `points` vector to get one number. If we had not included the `&` in `&Point { x, y }` we’d get a type mismatch error, because `iter` would then iterate over references to the items in the -vector rather than the values themselves. The error would look like this: +vector rather than the actual values. The error would look like this: ``` error[E0308]: mismatched types @@ -768,20 +775,20 @@ error[E0308]: mismatched types found type `Point` ``` -This tells us that Rust was expecting our closure to match `&Point`, but we -tried to match directly to a `Point` value, and not a reference to a `Point`. +This error indicates that Rust was expecting our closure to match `&Point`, but +we tried to match directly to a `Point` value, not a reference to a `Point`. #### Destructuring Structs and Tuples -We can mix, match, and nest destructuring patterns in even more complex way. -Here’s an example of a complicated destructure, where we nest structs and +We can mix, match, and nest destructuring patterns in even more complex ways. +The following example shows a complicated destructure where we nest structs and tuples inside a tuple, and destructure all the primitive values out: ``` let ((feet, inches), Point {x, y}) = ((3, 10), Point { x: 3, y: -10 }); ``` -This lets us break complex types into their component parts so that we can use +This code lets us break complex types into their component parts so we can use the values we’re interested in separately. Destructuring with patterns is a convenient way to use pieces of values, such @@ -789,20 +796,20 @@ as the value from each field in a struct, separately from each other. ### Ignoring Values in a Pattern -We’ve seen that it’s sometimes useful to ignore values in a pattern, such as in -the last arm of a `match` to give us a catch-all that doesn’t actually do -anything, but does account for all remaining possible values. There are a few +You’ve seen that it’s sometimes useful to ignore values in a pattern, such as +in the last arm of a `match`, to get a catchall that doesn’t actually do +anything but does account for all remaining possible values. There are a few ways to ignore entire values or parts of values in a pattern: using the `_` -pattern (which we’ve seen), using the `_` pattern within another pattern, using -a name that starts with an underscore, or using `..` to ignore remaining parts -of a value. Let’s explore how and why to do each of these. +pattern (which you’ve seen), using the `_` pattern within another pattern, +using a name that starts with an underscore, or using `..` to ignore remaining +parts of a value. Let’s explore how and why to use each of these patterns. #### Ignoring an Entire Value with `_` -We’ve used the underscore as a wildcard pattern that will match any value but -not bind to the value. While the underscore pattern is especially useful as the -last arm in a `match` expression, we can use it in any pattern, including -function parameters, as shown in Listing 18-17: +We’ve used the underscore `_` as a wildcard pattern that will match any value +but not bind to the value. Although the underscore `_` pattern is especially +useful as the last arm in a `match` expression, we can use it in any pattern, +including function parameters, as shown in Listing 18-17: Filename: src/main.rs @@ -818,25 +825,25 @@ fn main() { Listing 18-17: Using `_` in a function signature -This code will completely ignore the value passed as the first argument, 3, and -will print out `This code only uses the y parameter: 4`. In most cases when you -no longer need a particular function parameter, you would change the signature -so it doesn’t include the unused parameter. +This code will completely ignore the value passed as the first argument, `3`, +and will print `This code only uses the y parameter: 4`. -Ignoring a function parameter can be especially useful in some cases, such as -when implementing a trait, when you need a certain type signature but the -function body in your implementation doesn’t need one of the parameters. The -compiler will then not warn about unused function parameters, as it would if we -used a name instead. +In most cases when you no longer need a particular function parameter, you +would change the signature so it doesn’t include the unused parameter. Ignoring +a function parameter can be especially useful in some cases: for example, when +implementing a trait when you need a certain type signature but the function +body in your implementation doesn’t need one of the parameters. The compiler +will then not warn about unused function parameters, as it would if you used a +name instead. #### Ignoring Parts of a Value with a Nested `_` -We can also use `_` inside of another pattern to ignore just part of a value, -when we only want to test for part of a value but have no use for the other -parts in the corresponding code we want to run. Listing 18-18 shows code -responsible for giving a setting a value. The business requirements are that +We can also use `_` inside another pattern to ignore just part of a value: for +example, when we only want to test for part of a value but have no use for the +other parts in the corresponding code we want to run. Listing 18-18 shows code +responsible for managing a setting’s value. The business requirements are that the user should not be allowed to overwrite an existing customization of a -setting, but can unset the setting and can give the setting a value if it is +setting but can unset the setting and can give the setting a value if it is currently unset. ``` @@ -860,18 +867,18 @@ when we don’t need to use the value inside the `Some` This code will print `Can't overwrite an existing customized value` and then `setting is Some(5)`. In the first match arm, we don’t need to match on or use -the values inside either `Some` variant; the important part we need to test for -is the case when both `setting_value` and `new_setting_value` are the `Some` -variant. In that case, we want to print out why we’re not changing -`setting_value`, and we don’t change it. +the values inside either `Some` variant, but we do need to test for the case +when `setting_value` and `new_setting_value` are the `Some` variant. In that +case, we print why we’re not changing `setting_value`, and it doesn’t get +changed. In all other cases (if either `setting_value` or `new_setting_value` are -`None`), which is expressed by the `_` pattern in the second arm, we do want to -allow `new_setting_value` to become `setting_value`. +`None`) expressed by the `_` pattern in the second arm, we want to allow +`new_setting_value` to become `setting_value`. We can also use underscores in multiple places within one pattern to ignore -particular values, as shown in Listing 18-19 where we’re ignoring the second -and fourth values in a tuple of five items: +particular values. Listing 18-19 shows an example of ignoring the second and +fourth values in a tuple of five items: ``` let numbers = (2, 4, 8, 16, 32); @@ -885,18 +892,20 @@ match numbers { Listing 18-19: Ignoring multiple parts of a tuple -This will print `Some numbers: 2, 8, 32`, and the values 4 and 16 will be +This code will print `Some numbers: 2, 8, 32`, and the values 4 and 16 will be ignored. -#### Ignoring an Unused Variable by Starting its Name with an Underscore +#### Ignoring an Unused Variable by Starting Its Name with an Underscore If you create a variable but don’t use it anywhere, Rust will usually issue a -warning, since that could be a bug. Sometimes, though, it’s useful to create a -variable you won’t use yet, like if you’re prototyping or just starting a -project. In this situation you’ll want to tell Rust not to warn you about the -unused variable, which you can do by starting the name of the variable with an -underscore. In Listing 18-20 we create two unused variables, but when we run -this code we should only get a warning about one of them. +warning because that could be a bug. But sometimes it’s useful to create a +variable you won’t use yet, such as when you’re prototyping or just starting a +project. In this situation, you can tell Rust not to warn you about the unused +variable by starting the name of the variable with an underscore. In Listing +18-20, we create two unused variables, but when we run this code, we should +only get a warning about one of them: + +Filename: src/main.rs ``` fn main() { @@ -905,16 +914,16 @@ fn main() { } ``` -Listing 18-20: Starting a variable name with an underscore in order to not get +Listing 18-20: Starting a variable name with an underscore to avoid getting unused variable warnings -Here we get a warning about not using the variable `y`, but not about not using -the variable preceded by the underscore. +Here we get a warning about not using the variable `y`, but we don’t get a +warning about not using the variable preceded by the underscore. Note that there is a subtle difference between using only `_` and using a name -that starts with an underscore. Something like `_x` still binds the value to -the variable, whereas `_` doesn’t bind at all. To show a case where this -distinction matters, Listing 18-21 will provide us with an error. +that starts with an underscore. The syntax `_x` still binds the value to the +variable, whereas `_` doesn’t bind at all. To show a case where this +distinction matters, Listing 18-21 will provide us with an error: ``` let s = Some(String::from("Hello!")); @@ -927,12 +936,12 @@ println!("{:?}", s); ``` Listing 18-21: An unused variable starting with an underscore still binds the -value, which may take ownership of the value +value, which might take ownership of the value We’ll receive an error because the `s` value will still be moved into `_s`, -which prevents us from using `s` again. Using the underscore by itself, -however, doesn’t ever bind to the value. Listing 18-22 will compile without any -errors since `s` does not get moved into `_`: +which prevents us from using `s` again. However, using the underscore by itself +doesn’t ever bind to the value. Listing 18-22 will compile without any errors +because `s` doesn’t get moved into `_`: ``` let s = Some(String::from("Hello!")); @@ -944,19 +953,19 @@ if let Some(_) = s { println!("{:?}", s); ``` -Listing 18-22: Using underscore does not bind the value +Listing 18-22: Using an underscore does not bind the value -This works just fine; because we never bind `s` to anything, it isn’t moved. +This code works just fine because we never bind `s` to anything; it isn’t moved. #### Ignoring Remaining Parts of a Value with `..` With values that have many parts, we can use the `..` syntax to use only a few -parts and ignore the rest, while avoiding having to list underscores for each -ignored value. The `..` pattern will ignore any parts of a value that we -haven’t explicitly matched in the rest of the pattern. In Listing 18-23, we -have a `Point` struct that holds a coordinate in three dimensional space. In -the `match` expression, we want to operate only on the `x` coordinate and -ignore the values in the `y` and `z` fields: +parts and ignore the rest, and avoid having to list underscores for each +ignored value. The `..` pattern ignores any parts of a value that we haven’t +explicitly matched in the rest of the pattern. In Listing 18-23, we have a +`Point` struct that holds a coordinate in three-dimensional space. In the +`match` expression, we want to operate only on the `x` coordinate and ignore +the values in the `y` and `z` fields: ``` struct Point { @@ -975,12 +984,14 @@ match origin { Listing 18-23: Ignoring all fields of a `Point` except for `x` by using `..` We list the `x` value, and then just include the `..` pattern. This is quicker -than having to list out `y: _` and `z: _`, particularly when working with -structs that have lots of fields, in situations where only one or two fields -are relevant. +than having to list `y: _` and `z: _`, particularly when we’re working with +structs that have lots of fields in situations where only one or two fields are +relevant. + +The syntax `..` will expand to as many values as it needs to be. Listing 18-24 +shows how to use `..` with a tuple: -`..` will expand to as many values as it needs to be. Listing 18-24 shows a use -of `..` with a tuple: +Filename: src/main.rs ``` fn main() { @@ -997,13 +1008,14 @@ fn main() { Listing 18-24: Matching only the first and last values in a tuple and ignoring all other values -Here, we have the first and last value matched with `first` and `last`. The +In this code, the first and last value are matched with `first` and `last`. The `..` will match and ignore everything in the middle. -Using `..` must be unambiguous, however. If it is not clear which values are -intended for matching, and which to be ignored, Rust will error. Listing 18-25 -shows an example of using `..` ambiguously that will not compile due to this -ambiguity: +However, using `..` must be unambiguous. If it is unclear which values are +intended for matching and which should be ignored, Rust will error. Listing +18-25 shows an example of using `..` ambiguously, so it will not compile: + +Filename: src/main.rs ``` fn main() { @@ -1017,9 +1029,9 @@ fn main() { } ``` -Listing 18-25: An attempt to use `..` in a way that is ambiguous +Listing 18-25: An attempt to use `..` in an ambiguous way -If we compile this example, we get this error: +When we compile this example, we get this error: ``` error: `..` can only be used once per tuple or tuple struct pattern @@ -1029,25 +1041,25 @@ error: `..` can only be used once per tuple or tuple struct pattern | ^^ ``` -It’s not possible for Rust to determine how many values in the tuple to ignore +It’s impossible for Rust to determine how many values in the tuple to ignore before matching a value with `second`, and then how many further values to -ignore after that. This code could mean that we intend to ignore 2, bind -`second` to 4, then ignore 8, 16, and 32; or we could mean that we want to -ignore 2 and 4, bind `second` to 8, then ignore 16 and 32, and so forth. The -variable name `second` doesn’t mean anything special to Rust, so we get a -compiler error since using `..` in two places like this is ambiguous. +ignore thereafter. This code could mean that we want to ignore `2`, bind +`second` to `4`, and then ignore `8`, `16`, and `32`; or that we want to ignore +`2` and `4`, bind `second` to `8`, and then ignore `16` and `32`; and so forth. +The variable name `second` doesn’t mean anything special to Rust, so we get a +compiler error because using `..` in two places like this is ambiguous. ### `ref` and `ref mut` to Create References in Patterns -Here we’ll look at using `ref` to make references so ownership of the values -isn’t moved to variables in the pattern. Usually, when you match against a -pattern, the variables introduced by the pattern are bound to a value. Rust’s -ownership rules mean the value will be moved into the `match`, or wherever -you’re using the pattern. Listing 18-26 shows an example of a `match` that has -a pattern with a variable, and then another usage of the entire value after the -`match`. This will fail to compile because ownership of part of the -`robot_name` value is transferred to the `name` variable in the pattern of the -first `match` arm: +Let’s look at using `ref` to make references so ownership of the values isn’t +moved to variables in the pattern. Usually, when you match against a pattern, +the variables introduced by the pattern are bound to a value. Rust’s ownership +rules mean the value will be moved into the `match` or wherever you’re using +the pattern. Listing 18-26 shows an example of a `match` that has a pattern +with a variable and then usage of the entire value in the `println!` statement +later, after the `match`. This code will fail to compile because ownership of +part of the `robot_name` value is transferred to the `name` variable in the +pattern of the first `match` arm: ``` let robot_name = Some(String::from("Bors")); @@ -1060,27 +1072,25 @@ match robot_name { println!("robot_name is: {:?}", robot_name); ``` -Listing 18-26: Creating a variable in a match arm pattern takes ownership of +Listing 18-26: Creating a variable in a `match` arm pattern takes ownership of the value -This example will fail because the value inside `Some` in `robot_name` is moved -to within the `match` when `name` binds to that value. Because ownership of -part of `robot_name` has been moved to `name`, we can no longer use -`robot_name` in the `println!` after the `match` because `robot_name` no longer -has ownership. +Because ownership of part of `robot_name` has been moved to `name`, we can no +longer use `robot_name` in the `println!` after the `match` because +`robot_name` no longer has ownership. -In order to fix this code, we want to have the `Some(name)` pattern borrow that -part of `robot_name` rather than taking ownership. Outside of patterns, we’ve -seen that the way to borrow a value is to create a reference using `&`, so you -may think the solution is changing `Some(name)` to `Some(&name)`. +To fix this code, we want to make the `Some(name)` pattern *borrow* that part +of `robot_name` rather than taking ownership. You’ve already seen that, outside +of patterns, the way to borrow a value is to create a reference using `&`, so +you might think the solution is changing `Some(name)` to `Some(&name)`. -However, we saw in the “Destructuring to Break Apart Values” section that `&` -in patterns does not *create* a reference, it *matches* an existing reference -in the value. Because `&` already has that meaning in patterns, we can’t use -`&` to create a reference in a pattern. +However, as you saw in the “Destructuring to Break Apart Values” section, the +syntax `&` in patterns does not *create* a reference but *matches* an existing +reference in the value. Because `&` already has that meaning in patterns, we +can’t use `&` to create a reference in a pattern. -Instead, to create a reference in a pattern, we do this by using the `ref` -keyword before the new variable, as shown in Listing 18-27: +Instead, to create a reference in a pattern, we use the `ref` keyword before +the new variable, as shown in Listing 18-27: ``` let robot_name = Some(String::from("Bors")); @@ -1093,18 +1103,18 @@ match robot_name { println!("robot_name is: {:?}", robot_name); ``` -Listing 18-27: Creating a reference so that a pattern variable does not take +Listing 18-27: Creating a reference so a pattern variable does not take ownership of a value This example will compile because the value in the `Some` variant in `robot_name` is not moved into the `match`; the `match` only took a reference to the data in `robot_name` rather than moving it. -To create a mutable reference in order to be able to mutate a value matched in -a pattern, use `ref mut` instead of `&mut` for the same reason that we use -`ref` instead of `&`: `&mut` in patterns is for matching existing mutable -references, not creating new ones. Listing 18-28 shows an example of a pattern -creating a mutable reference: +To create a mutable reference so we’re able to mutate a value matched in a +pattern, we use `ref mut` instead of `&mut`. The reason is, again, that in +patterns, the latter is for matching existing mutable references, not creating +new ones. Listing 18-28 shows an example of a pattern creating a mutable +reference: ``` let mut robot_name = Some(String::from("Bors")); @@ -1122,17 +1132,17 @@ using `ref mut` This example will compile and print `robot_name is: Some("Another name")`. Because `name` is a mutable reference, we need to dereference within the match -arm code using the `*` operator in order to be able to mutate the value. +arm code using the `*` operator to mutate the value. ### Extra Conditionals with Match Guards A *match guard* is an additional `if` condition specified after the pattern in -a `match` arm that also must match if the pattern matches in order for that arm -to be chosen. Match guards are useful for expressing more complex ideas than a -pattern alone allows. +a `match` arm that must also match, along with the pattern matching, for that +arm to be chosen. Match guards are useful for expressing more complex ideas +than a pattern alone allows. The condition can use variables created in the pattern. Listing 18-29 shows a -`match` where the first arm has the pattern `Some(x)` and then also has a match +`match` where the first arm has the pattern `Some(x)` and also has a match guard of `if x < 5`: ``` @@ -1148,23 +1158,26 @@ match num { Listing 18-29: Adding a match guard to a pattern This example will print `less than five: 4`. When `num` is compared to the -pattern in the first arm, it matches since `Some(4)` matches `Some(x)`. Then -the match guard checks to see if the value in `x` is less than 5, and because 4 -is less than 5, the first arm is selected. +pattern in the first arm, it matches, because `Some(4)` matches `Some(x)`. Then +the match guard checks whether the value in `x` is less than `5`, and because +it is, the first arm is selected. If `num` had been `Some(10)` instead, the match guard in the first arm would -have been false since 10 is not less than 5. Rust would then go to the second -arm, which would match because the second arm does not have a match guard and +have been false because 10 is not less than 5. Rust would then go to the second +arm, which would match because the second arm doesn’t have a match guard and therefore matches any `Some` variant. -There’s no way to express the `if x < 5` condition within a pattern, so the -match guard has given us the ability to express this logic. +There is no way to express the `if x < 5` condition within a pattern, so the +match guard gives us the ability to express this logic. In Listing 18-11, we mentioned that we could use match guards to solve our -pattern shadowing problem, where a new variable was created inside the pattern -in the `match` expression instead of using the variable outside the `match`. -That new variable meant we couldn’t test against the value that the outer -variable had. Listing 18-30 shows how we can use a match guard to fix this: +pattern shadowing problem. Recall that a new variable was created inside the +pattern in the `match` expression instead of using the variable outside the +`match`. That new variable meant we couldn’t test against the value of the +outer variable. Listing 18-30 shows how we can use a match guard to fix this +problem: + +Filename: src/main.rs ``` fn main() { @@ -1183,24 +1196,24 @@ fn main() { Listing 18-30: Using a match guard to test for equality with an outer variable -This will now print `Default case, x = Some(5)`. The pattern in the second -match arm is now not introducing a new variable `y` that would shadow the outer -`y`, meaning we can use the outer `y` in the match guard. Instead of specifying -the pattern as `Some(y)`, which would have shadowed the outer `y`, we specify -`Some(n)`. This creates a new variable `n` that does not shadow anything -because there is no `n` variable outside the `match`. +This code will now print `Default case, x = Some(5)`. The pattern in the second +match arm doesn’t introduce a new variable `y` that would shadow the outer `y`, +meaning we can use the outer `y` in the match guard. Instead of specifying the +pattern as `Some(y)`, which would have shadowed the outer `y`, we specify +`Some(n)`. This creates a new variable `n` that doesn’t shadow anything because +there is no `n` variable outside the `match`. -In the match guard, `if n == y`, this is not a pattern and therefore does not -introduce new variables. This `y` *is* the outer `y` rather than a new shadowed -`y`, and we can express the idea that we’re looking for a value that has the -same value as the outer `y` by comparing `n` to `y`. +The match guard `if n == y` is not a pattern and therefore doesn’t introduce +new variables. This `y` *is* the outer `y` rather than a new shadowed `y`, and +we can look for a value that has the same value as the outer `y` by comparing +`n` to `y`. -You can also use the or operator `|` in a match guard to specify multiple -patterns, and the match guard condition will apply to all of the patterns. -Listing 18-31 shows the precedence of combining a match guard with a pattern -that uses `|`. The important part of this example is that the `if y` match -guard applies to 4, 5, *and* 6, even though it might look like `if y` only -applies to 6: +You can also use the *or* operator `|` in a match guard to specify multiple +patterns; the match guard condition will apply to all the patterns. Listing +18-31 shows the precedence of combining a match guard with a pattern that uses +`|`. The important part of this example is that the `if y` match guard applies +to `4`, `5`, *and* `6`, even though it might look like `if y` only applies to +`6`: ``` let x = 4; @@ -1215,14 +1228,13 @@ match x { Listing 18-31: Combining multiple patterns with a match guard The match condition states that the arm only matches if the value of `x` is -equal to 4, 5, or 6 *and* if `y` is `true`. What happens when this code runs is -that the pattern of the first arm matches because `x` is 4, but the match guard -`if y` is false, so the first arm is not chosen. The code moves on to the -second arm, which does match, and this program prints `no`. - -This is because the `if` condition applies to the whole pattern `4 | 5 | 6`, -and not only to the last value `6`. In other words, the precedence of a match -guard in relation to a pattern behaves like this: +equal to `4`, `5`, or `6` *and* if `y` is `true`. When this code runs, the +pattern of the first arm matches because `x` is `4`, but the match guard `if y` +is false, so the first arm is not chosen. The code moves on to the second arm, +which does match, and this program prints `no`. The reason is that the `if` +condition applies to the whole pattern `4 | 5 | 6`, not only to the last value +`6`. In other words, the precedence of a match guard in relation to a pattern +behaves like this: ``` (4 | 5 | 6) if y => ... @@ -1234,20 +1246,20 @@ rather than this: 4 | 5 | (6 if y) => ... ``` -We can tell this from what happened when we ran the code: if the match guard +After running the code, the precedence behavior is evident: if the match guard was only applied to the final value in the list of values specified using the `|` operator, the arm would have matched and the program would have printed `yes`. ### `@` Bindings -The at operator, `@`, lets us create a variable that holds a value at the same -time we’re testing that value to see if it matches a pattern. Listing 18-32 -shows an example where we want to test that a `Message::Hello` `id` field is -within the range `3...7` but also be able to bind the value to the variable -`id_variable` so that we can use it in the code associated with the arm. We -could have named `id_variable` `id`, the same as the field, but for the -purposes of this example we’ve chosen to give it a different name: +The *at* operator `@` lets us create a variable that holds a value at the same +time we’re testing that value to see whether it matches a pattern. Listing +18-32 shows an example where we want to test that a `Message::Hello` `id` field +is within the range `3...7`. But we also want to bind the value to the variable +`id_variable` so we can use it in the code associated with the arm. We could +name this variable `id`, the same as the field, but for this example we’ll use +a different name: ``` enum Message { @@ -1277,28 +1289,27 @@ while also testing that the value matched the range pattern. In the second arm where we only have a range specified in the pattern, the code associated with the arm doesn’t have a variable that contains the actual value -of the `id` field. The `id` field’s value could have been 10, 11, or 12 but the -code that goes with that pattern doesn’t know which one and isn’t able to use -the value from the `id` field, because we haven’t saved the `id` value in a -variable. +of the `id` field. The `id` field’s value could have been 10, 11, or 12, but +the code that goes with that pattern doesn’t know which it is. The pattern code +isn’t able to use the value from the `id` field, because we haven’t saved the +`id` value in a variable. In the last arm where we’ve specified a variable without a range, we do have -the value available to use in the arm’s code in a variable named `id` because -we’ve used the struct field shorthand syntax. We haven’t applied any test to -the value in the `id` field in this arm, though, like the first two arms did: -any value would match this pattern. +the value available to use in the arm’s code in a variable named `id`. The +reason is that we’ve used the struct field shorthand syntax. But we haven’t +applied any test to the value in the `id` field in this arm, like we did with +the first two arms: any value would match this pattern. Using `@` lets us test a value and save it in a variable within one pattern. ## Summary -Patterns are a useful feature of Rust that help distinguish between different -kinds of data. When used in `match` statements, Rust makes sure your patterns -cover every possible value, or your program will not compile. Patterns in `let` -statements and function parameters make those constructs more powerful, -enabling the destructuring of values into smaller parts at the same time as -assigning to variables. We can create simple or complex patterns to suit our -needs. +Rust’s patterns are very useful in that they help distinguish between different +kinds of data. When used in `match` expressions, Rust ensures your patterns +cover every possible value, or your program won’t compile. Patterns in `let` +statements and function parameters make those constructs more useful, enabling +the destructuring of values into smaller parts at the same time as assigning to +variables. We can create simple or complex patterns to suit our needs. -Now, for the penultimate chapter of the book, let’s take a look at some -advanced parts of a variety of Rust’s features. +Next, for the penultimate chapter of the book, we’ll look at some advanced +aspects of a variety of Rust’s features. diff --git a/second-edition/src/ch18-00-patterns.md b/second-edition/src/ch18-00-patterns.md index 391d541ddc..c54a55dc28 100644 --- a/second-edition/src/ch18-00-patterns.md +++ b/second-edition/src/ch18-00-patterns.md @@ -2,27 +2,27 @@ Patterns are a special syntax in Rust for matching against the structure of types, both complex and simple. Using patterns in conjunction with `match` -expressions and other constructs gives you more control over the control flow -of a program. A pattern is made up of some combination of: +expressions and other constructs gives you more control over a program’s +control flow. A pattern consists of some combination of the following: -- literals -- destructured arrays, enums, structs, or tuples -- variables -- wildcards -- placeholders +* Literals +* Destructured arrays, enums, structs, or tuples +* Variables +* Wildcards +* Placeholders -These pieces describe the shape of the data we’re working with, which we then -match against values to determine whether our program has the correct data to -continue running a particular bit of code. +These components describe the shape of the data we’re working with, which we +then match against values to determine whether our program has the correct data +to continue running a particular piece of code. -To use a pattern we compare it to some value. If the pattern matches our value, -we use the value parts in our code. Recall our `match` expressions from Chapter -6 that used patterns like a coin sorting machine. If the value fits the shape -of the pattern, we can use the named pieces. If it doesn’t, the code associated -with the pattern won’t run. +To use a pattern, we compare it to some value. If the pattern matches the +value, we use the value parts in our code. Recall the `match` expressions in +Chapter 6 that used patterns, such as the coin sorting machine example. If the +value fits the shape of the pattern, we can use the named pieces. If it +doesn’t, the code associated with the pattern won’t run. This chapter is a reference on all things related to patterns. We’ll cover the valid places to use patterns, the difference between *refutable* and *irrefutable* patterns, and the different kinds of pattern syntax that you -might see. By the end, you’ll see how to use patterns to create powerful and -clear code. +might see. By the end of the chapter, you’ll know how to use patterns to +express many concepts in a clear way. diff --git a/second-edition/src/ch18-01-all-the-places-for-patterns.md b/second-edition/src/ch18-01-all-the-places-for-patterns.md index 5e8dc411b7..6b41103118 100644 --- a/second-edition/src/ch18-01-all-the-places-for-patterns.md +++ b/second-edition/src/ch18-01-all-the-places-for-patterns.md @@ -1,15 +1,15 @@ -## All the Places Patterns May be Used +## All the Places Patterns Can Be Used Patterns pop up in a number of places in Rust, and you’ve been using them a lot -without realizing it! This section is a reference to all the places where -patterns are valid. +without realizing it! This section provides you with a reference to all the +places where patterns are valid. ### `match` Arms -As we discussed in Chapter 6, patterns are used in the arms of `match` -expressions. Formally, `match` expressions are defined as the keyword `match`, -a value to match on, and one or more match arms that consist of a pattern and -an expression to run if the value matches that arm’s pattern: +As discussed in Chapter 6, we use patterns in the arms of `match` expressions. +Formally, `match` expressions are defined as the keyword `match`, a value to +match on, and one or more match arms that consist of a pattern and an +expression to run if the value matches that arm’s pattern, like this: ```text match VALUE { @@ -19,40 +19,41 @@ match VALUE { } ``` -`match` expressions are required to be *exhaustive*, in the sense that all -possibilities for the value in the `match` expression must be accounted for. -One way to ensure you have every possibility covered is to have a catch-all -pattern for the last arm---for example, a variable name matching any value can -never fail and thus covers every case remaining. +One requirement for `match` expressions is that they need to be *exhaustive* in +the sense that all possibilities for the value in the `match` expression must +be accounted for. One way to ensure you’ve covered every possibility is to have +a catchall pattern for the last arm: for example, a variable name matching any +value can never fail and thus covers every remaining case. -There’s a particular pattern `_` that will match anything, but never binds to a -variable, and so is often used in the last match arm. This can be useful when -you want to ignore any value not specified, for example. We’ll cover this in -more detail later in this chapter. +A particular pattern `_` will match anything, but it never binds to a variable, +so it’s often used in the last match arm. The `_` pattern can be useful when +you want to ignore any value not specified, for example. We’ll cover the `_` +pattern in more detail in the “Ignoring Values in a Pattern” section later in +this chapter. ### Conditional `if let` Expressions -In Chapter 6 we discussed how `if let` expressions are used mainly as a shorter -way to write the equivalent of a `match` that only cares about matching one -case. Optionally,`if let` can have a corresponding `else` with code to run if +In Chapter 6 we discussed how to use `if let` expressions mainly as a shorter +way to write the equivalent of a `match` that only matches one case. +Optionally, `if let` can have a corresponding `else` containing code to run if the pattern in the `if let` doesn’t match. Listing 18-1 shows that it’s also possible to mix and match `if let`, `else -if`, and `else if let` expressions. This gives us more flexibility than a -`match` expression where we can only express one value to compare with the -patterns; the conditions in a series of `if let`/`else if`/`else if let` arms -aren’t required to have any relation to each other. - -The code in Listing 18-1 shows a series of checks for a bunch of different -conditions that decide what the background color should be. For the purposes of -the example, we’ve created variables with hardcoded values that a real program -might get by asking the user. - -If the user has specified a favorite color, that is used as the background -color. If today is Tuesday, the background color will be green. If the user has -specified their age as a string and we can parse it as a number successfully, -we’ll use either purple or orange depending on the value of the parsed number. -Finally, if none of these conditions apply, the background color will be blue: +if`, and `else if let` expressions. Doing so gives us more flexibility than a +`match` expression in which we can only express one value to compare with the +patterns. Also, the conditions in a series of `if let`, `else if`, `else if +let` arms aren’t required to relate to each other. + +The code in Listing 18-1 shows a series of checks for several different +conditions that decide what the background color should be. For this example, +we’ve created variables with hardcoded values that a real program might receive +from user input. + +If the user specifies a favorite color, that color is the background color. If +today is Tuesday, the background color will be green. If the user specifies +their age as a string and we can parse it as a number successfully, the color +is either purple or orange depending on the value of the number. If none of +these conditions apply, the background color will be blue: Filename: src/main.rs @@ -85,26 +86,25 @@ This conditional structure lets us support complex requirements. With the hardcoded values we have here, this example will print `Using purple as the background color`. -We can see that `if let` can also introduce shadowed variables, in the same way -that `match` arms can: `if let Ok(age) = age` introduces a new shadowed `age` -variable that contains the value inside the `Ok` variant. This means we need to -place the `if age > 30` condition within that block; we can’t combine these two -conditions into `if let Ok(age) = age && age > 30` because the shadowed `age` -we want to compare to 30 isn’t valid until the new scope starts with the curly -brace. +You can see that `if let` can also introduce shadowed variables in the same way +that `match` arms can: the line `if let Ok(age) = age` introduces a new +shadowed `age` variable that contains the value inside the `Ok` variant. This +means we need to place the `if age > 30` condition within that block: we can’t +combine these two conditions into `if let Ok(age) = age && age > 30`. The +shadowed `age` we want to compare to 30 isn’t valid until the new scope starts +with the curly bracket. -The downside of using `if let` expressions in this way is that exhaustiveness -is not checked by the compiler, whereas with `match` expressions it is. If we -left off the last `else` block and so missed handling some cases, the compiler -would not alert us of the possible logic bug. +The downside of using `if let` expressions is that the compiler doesn’t check +exhaustiveness, whereas with `match` expressions it does. If we omitted the +last `else` block and therefore missed handling some cases, the compiler would +not alert us to the possible logic bug. ### `while let` Conditional Loops -Similar in construction to `if let`, the `while let` conditional loop allows -your `while` loop to run for as long as a pattern continues to match. The -example in Listing 18-2 shows a `while let` loop that uses a vector as a stack -and prints out the values in the vector in the opposite order they were pushed -in: +Similar in construction to `if let`, the `while let` conditional loop allows a +`while` loop to run for as long as a pattern continues to match. The example in +Listing 18-2 shows a `while let` loop that uses a vector as a stack and prints +out the values in the vector in the opposite order in which they were pushed: ```rust let mut stack = Vec::new(); @@ -121,18 +121,18 @@ while let Some(top) = stack.pop() { Listing 18-2: Using a `while let` loop to print out values for as long as `stack.pop()` returns `Some` -This example will print 3, 2, then 1. The `pop` method takes the last element -out of the vector and returns `Some(value)`. If the vector is empty, it returns -`None`. The `while` loop will continue running the code in its block as long as -`pop` is returning `Some`. Once it returns `None`, the loop stops. We can use -`while let` to pop every element off our stack. +This example prints 3, 2, and then 1. The `pop` method takes the last element +out of the vector and returns `Some(value)`. If the vector is empty, `pop` +returns `None`. The `while` loop continues running the code in its block as +long as `pop` returns `Some`. When `pop` returns `None`, the loop stops. We can +use `while let` to pop every element off our stack. ### `for` Loops In Chapter 3 we mentioned that the `for` loop is the most common loop construction in Rust code, but we haven’t yet discussed the pattern that `for` takes. In a `for` loop, the pattern is the value that directly follows the -keyword `for`, so the `x` in `for x in y`. +keyword `for`, so in `for x in y` the `x` is the pattern. Listing 18-3 demonstrates how to use a pattern in a `for` loop to destructure, or break apart, a tuple as part of the `for` loop: @@ -148,7 +148,7 @@ for (index, value) in v.iter().enumerate() { Listing 18-3: Using a pattern in a `for` loop to destructure a tuple -This will print: +The code in Listing 18-3 will print the following: ```text a is at index 0 @@ -159,37 +159,37 @@ c is at index 2 We use the `enumerate` method to adapt an iterator to produce a value and that value’s index in the iterator, placed into a tuple. The first call to `enumerate` produces the tuple `(0, 'a')`. When this value is matched to the -pattern `(index, value)`, `index` will be 0 and `value` will be 'a', printing our -first line of output. +pattern `(index, value)`, `index` will be `0` and `value` will be `'a'`, +printing the first line of the output. ### `let` Statements -Before this chapter, we’d only explicitly discussed using patterns with `match` -and `if let`, but in fact we’ve used patterns in other places too, including -`let` statements. For example, consider this straightforward variable -assignment with `let`: +Prior to this chapter, we had only explicitly discussed using patterns with +`match` and `if let`, but in fact, we’ve used patterns in other places as well, +including in `let` statements. For example, consider this straightforward +variable assignment with `let`: ```rust let x = 5; ``` -We’ve done this hundreds of times throughout this book, and though you may not -have realized it, you were using patterns! A `let` statement looks like this, -more formally: +Throughout this book, we’ve used `let` like this hundreds of times, and +although you might not have realized it, you were using patterns! More +formally, a `let` statement looks like this: ```text let PATTERN = EXPRESSION; ``` In statements like `let x = 5;` with a variable name in the `PATTERN` slot, the -variable name is just a particularly humble form of pattern. We compare the -expression against the pattern, and assign any names we find. So for our `let x -= 5;` example, `x` is a pattern that says “bind what matches here to the -variable `x`.” And since the name `x` is the whole pattern, this pattern +variable name is just a particularly simple form of a pattern. Rust compares +the expression against the pattern and assigns any names it finds. So in the +`let x = 5;` example, `x` is a pattern that means “bind what matches here to +the variable `x`.” Because the name `x` is the whole pattern, this pattern effectively means “bind everything to the variable `x`, whatever the value is.” -To see the pattern matching aspect of `let` a bit more clearly, consider -Listing 18-4 where we’re using a pattern with `let` to destructure a tuple: +To see the pattern matching aspect of `let` more clearly, consider Listing +18-4, which uses a pattern with `let` to destructure a tuple: ```rust let (x, y, z) = (1, 2, 3); @@ -199,14 +199,14 @@ let (x, y, z) = (1, 2, 3); create three variables at once Here, we match a tuple against a pattern. Rust compares the value `(1, 2, 3)` -to the pattern `(x, y, z)` and sees that the value matches the pattern, so will -bind `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple -pattern as nesting three individual variable patterns inside of it. +to the pattern `(x, y, z)` and sees that the value matches the pattern, so Rust +binds `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple +pattern as nesting three individual variable patterns inside it. -If the number of elements in the pattern don’t match the number of elements in -the tuple, the overall type won’t match and we’ll get a compiler error. For -example, Listing 18-5 shows an attempt to destructure into two variables a -tuple with three elements that won’t work: +If the number of elements in the pattern doesn’t match the number of elements +in the tuple, the overall type won’t match and we’ll get a compiler error. For +example, Listing 18-5 shows an attempt to destructure a tuple with three +elements into two variables, which won’t work: ```rust,ignore let (x, y) = (1, 2, 3); @@ -215,7 +215,7 @@ let (x, y) = (1, 2, 3); Listing 18-5: Incorrectly constructing a pattern whose variables don’t match the number of elements in the tuple -Attempting to compile this code gives us this type error: +Attempting to compile this code results in this type error: ```text error[E0308]: mismatched types @@ -229,16 +229,16 @@ error[E0308]: mismatched types ``` If we wanted to ignore one or more of the values in the tuple, we could use `_` -or `..` as we’ll see in the “Ignoring Values in a Pattern” section. If the -problem was that we had too many variables in the pattern, the solution would -be to make the types match by removing variables so that the number of -variables is equal to the number of elements in the tuple. +or `..` as you’ll see in the “Ignoring Values in a Pattern” section. If the +problem is that we have too many variables in the pattern, the solution is to +make the types match by removing variables so the number of variables equals +the number of elements in the tuple. ### Function Parameters -Function parameters can also be patterns. The code in Listing 18-6, declaring a -function named `foo` that takes one parameter named `x` of type `i32`, should -by now look familiar: +Function parameters can also be patterns. The code in Listing 18-6, which +declares a function named `foo` that takes one parameter named `x` of type +`i32`, should by now look familiar: ```rust fn foo(x: i32) { @@ -249,9 +249,9 @@ fn foo(x: i32) { Listing 18-6: A function signature uses patterns in the parameters -The `x` part is a pattern! Like we did with `let`, we could match a tuple in a -function’s arguments to the pattern. Listing 18-7 splits apart the values in a -tuple as we pass it to a function: +The `x` part is a pattern! As we did with `let`, we could match a tuple in a +function’s arguments to the pattern. Listing 18-7 splits the values in a tuple +as we pass it to a function: Filename: src/main.rs @@ -269,13 +269,14 @@ fn main() { Listing 18-7: A function with parameters that destructure a tuple -This will print `Current location: (3, 5)`. The values `&(3, 5)` match the -pattern `&(x, y)`, so `x` gets the value 3, and `y` gets the value 5. +This code prints `Current location: (3, 5)`. The values `&(3, 5)` match the +pattern `&(x, y)`, so `x` is the value `3` and `y` is the value `5`. -We can use patterns in closure parameter lists in the same way, too, because -closures are similar to functions, as we discussed in Chapter 13. +We can also use patterns in closure parameter lists in the same way as in +function parameter lists, because closures are similar to functions, as +discussed in Chapter 13. -We’ve seen several ways of using patterns now, but patterns do not work the -same in every place we can use them; in some places, the patterns must be -*irrefutable*, meaning they must match any value provided. In other -circumstances, they may be refutable. Let’s discuss that next. +At this point, you’ve seen several ways of using patterns, but patterns don’t +work the same in every place we can use them. In some places, the patterns must +be *irrefutable*, meaning they must match any value provided. In other +circumstances, they can be refutable. Let’s discuss these two concepts next. diff --git a/second-edition/src/ch18-02-refutability.md b/second-edition/src/ch18-02-refutability.md index f1f8ee425a..d4acc842fe 100644 --- a/second-edition/src/ch18-02-refutability.md +++ b/second-edition/src/ch18-02-refutability.md @@ -1,30 +1,30 @@ ## Refutability: Whether a Pattern Might Fail to Match Patterns come in two forms: refutable and irrefutable. Patterns that will match -for any possible value passed are said to be *irrefutable*. An example would be -`x` in the statement `let x = 5;` because `x` matches anything and so cannot -fail to match. Patterns that may fail to match for some possible value are said -to be *refutable*. An example of this would be `Some(x)` in the expression `if -let Some(x) = a_value`; if the value in the `a_value` variable is `None` rather -than `Some`, then the `Some(x)` pattern would not match. - -`let` statements, function parameters, and `for` loops can only accept -irrefutable patterns, because the program cannot do anything -meaningful with values that don’t match. The `if let` and `while let` -expressions are restricted to only accept refutable patterns, because by -definition they’re intended to handle possible failure---the functionality of a -conditional is in its ability to perform differently upon success and failure. +for any possible value passed are *irrefutable*. An example would be `x` in the +statement `let x = 5;` because `x` matches anything and therefore cannot fail +to match. Patterns that can fail to match for some possible value are +*refutable*. An example would be `Some(x)` in the expression `if let Some(x) = +a_value`; if the value in `a_value` variable is `None` rather than `Some`, the +`Some(x)` pattern would not match. + +Function parameters, `let` statements, and `for` loops can only accept +irrefutable patterns, because the program cannot do anything meaningful when +values don’t match. The `if let` and `while let` expressions only accept +refutable patterns, because by definition they’re intended to handle possible +failure: the functionality of a conditional is in its ability to perform +differently depending on success or failure. In general, you shouldn’t have to worry about the distinction between refutable -and irrefutable patterns, but you do need to be familiar with the concept of -refutability so you can respond when you see it in an error message. In those -cases, you’ll need to change either the pattern or the construct you’re using -the pattern with, depending on your intentions for the behavior of the code. +and irrefutable patterns; however, you do need to be familiar with the concept +of refutability so you can respond when you see it in an error message. In +those cases, you’ll need to change either the pattern or the construct you’re +using the pattern with, depending on the intended behavior of the code. -Let’s look at an example of what happens if we try to use a refutable pattern -where Rust requires an irrefutable pattern and vice versa. In Listing 18-8, we -have a `let` statement, but for the pattern we’ve specified `Some(x)`, a -refutable pattern. As you might expect, this will error: +Let’s look at an example of what happens when we try to use a refutable pattern +where Rust requires an irrefutable pattern and vice versa. Listing 18-8 shows a +`let` statement, but for the pattern we’ve specified `Some(x)`, a refutable +pattern. As you might expect, this code will error: ```rust,ignore let Some(x) = some_option_value; @@ -34,27 +34,27 @@ let Some(x) = some_option_value; `let` If `some_option_value` was a `None` value, it would fail to match the pattern -`Some(x)`, meaning the pattern is refutable. The `let` statement, however, can -only accept an irrefutable patterns because there’s nothing valid the code -could do with a `None` value. At compile time, Rust will complain that we’ve -tried to use a refutable pattern where an irrefutable pattern is required: +`Some(x)`, meaning the pattern is refutable. However, the `let` statement can +only accept an irrefutable pattern because there is nothing valid the code can +do with a `None` value. At compile time, Rust will complain that we’ve tried to +use a refutable pattern where an irrefutable pattern is required: ```text error[E0005]: refutable pattern in local binding: `None` not covered - --> :3:5 + --> | 3 | let Some(x) = some_option_value; | ^^^^^^^ pattern `None` not covered ``` -We didn’t cover (and couldn’t cover!) every valid value with the pattern -`Some(x)`, so Rust will rightfully complain. +Because we didn’t cover (and couldn’t cover!) every valid value with the +pattern `Some(x)`, Rust rightfully produces a compiler error. -To fix the case where we have a refutable pattern in a place where an -irrefutable pattern is needed, we can change the code that uses the pattern: -instead of using `let`, we can use `if let`. That way, if the pattern doesn’t -match, the code will just skip the code in the curly brackets, giving it a way -to continue validly. Listing 18-9 shows how to fix the code in Listing 18-8. +To fix the problem where we have a refutable pattern where an irrefutable +pattern is needed, we can change the code that uses the pattern: instead of +using `let`, we can use `if let`. Then if the pattern doesn’t match, the code +will just skip the code in the curly brackets, giving it a way to continue +validly. Listing 18-9 shows how to fix the code in Listing 18-8: ```rust # let some_option_value: Option = None; @@ -66,10 +66,10 @@ if let Some(x) = some_option_value { Listing 18-9: Using `if let` and a block with refutable patterns instead of `let` -We’ve given the code an out! This code is perfectly valid, though does now of -course mean we cannot use an irrefutable pattern without receiving an error. If -we give `if let` a pattern that will always match, such as `x` as shown in -Listing 18-10, it will error: +We’ve given the code an out! This code is perfectly valid, although it means we +cannot use an irrefutable pattern without receiving an error. If we give `if +let` a pattern that will always match, such as `x`, as shown in Listing 18-10, +it will error: ```rust,ignore if let x = 5 { @@ -92,10 +92,11 @@ error[E0162]: irrefutable if-let pattern ``` For this reason, match arms must use refutable patterns, except for the last -arm that should match any remaining values with an irrefutable pattern. Using -an irrefutable pattern in a `match` with only one arm is allowed, but isn’t -particularly useful and could be replaced with a simpler `let` statement. - -Now that we’ve discussed where patterns can be used and the difference between -refutable and irrefutable patterns, let’s go over all the syntax we can use to -create patterns. +arm, which should match any remaining values with an irrefutable pattern. Rust +allows us to use an irrefutable pattern in a `match` with only one arm, but +this syntax isn’t particularly useful and could be replaced with a simpler +`let` statement. + +Now that you know where to use patterns and the difference between refutable +and irrefutable patterns, let’s cover all the syntax we can use to create +patterns. diff --git a/second-edition/src/ch18-03-pattern-syntax.md b/second-edition/src/ch18-03-pattern-syntax.md index 1d17e3b592..ba2a023499 100644 --- a/second-edition/src/ch18-03-pattern-syntax.md +++ b/second-edition/src/ch18-03-pattern-syntax.md @@ -1,12 +1,12 @@ ## All the Pattern Syntax -We’ve seen examples of many different kinds of patterns throughout the book, so -we’ll gather all the syntax valid in patterns in one place here, and why you +Throughout the book, you’ve seen examples of many different kinds of patterns. +In this section, we gather all the syntax valid in patterns and discuss why you might want to use each of them. ### Matching Literals -As we saw in Chapter 6, you can match patterns against literals directly. This +As you saw in Chapter 6, you can match patterns against literals directly. The following code gives some examples: ```rust @@ -20,21 +20,22 @@ match x { } ``` -This prints `one` since the value in `x` is 1. This is useful when you want to -take some action if you get a concrete value in particular. +This code prints `one` because the value in `x` is 1. This syntax is useful +when you want your code to take an action if it gets a particular concrete +value. ### Matching Named Variables -Named variables are irrefutable patterns that match any value, which we have -used many times before. There is a complication, however, when used in `match` -expressions. Because `match` starts a new scope, variables declared as part of -a pattern inside the `match` expression will shadow those with the same name -outside the `match` construct---as is the case with all variables. In Listing -18-11, we declare a variable named `x` with the value `Some(5)` and a variable -`y` with the value `10`. We then create a `match` expression on the value `x`. -Take a look at the patterns in the match arms and `println!` at the end, and -try to figure out what will be printed before running this code or reading -further: +Named variables are irrefutable patterns that match any value, and we’ve used +them many times in the book. However, there is a complication when you use +named variables in `match` expressions. Because `match` starts a new scope, +variables declared as part of a pattern inside the `match` expression will +shadow those with the same name outside the `match` construct, as is the case +with all variables. In Listing 18-11, we declare a variable named `x` with the +value `Some(5)` and a variable `y` with the value `10`. We then create a +`match` expression on the value `x`. Look at the patterns in the match arms and +`println!` at the end, and try to figure out what the code will print before +running this code or reading further: Filename: src/main.rs @@ -53,40 +54,43 @@ fn main() { } ``` -Listing 18-11: A `match` statement with an arm that +Listing 18-11: A `match` expression with an arm that introduces a shadowed variable `y` -Let’s walk through what happens when the `match` statement runs. The pattern in -the first match arm does not match the defined value of `x`, so we continue. +Let’s walk through what happens when the `match` expression runs. The pattern +in the first match arm doesn’t match the defined value of `x`, so the code +continues. -The pattern in the second match arm introduces a new variable name `y` that +The pattern in the second match arm introduces a new variable named `y` that will match any value inside a `Some` value. Because we’re in a new scope inside -the `match` expression, this is a new variable, and not the `y` we declared at +the `match` expression, this is a new `y` variable, not the `y` we declared at the beginning with the value 10. This new `y` binding will match any value -inside a `Some`, which is what we have in `x`. Therefore this `y` binds to the -inner value of the `Some` in `x`. That value is 5, and so the expression for +inside a `Some`, which is what we have in `x`. Therefore, this new `y` binds to +the inner value of the `Some` in `x`. That value is `5`, so the expression for that arm executes and prints `Matched, y = 5`. If `x` had been a `None` value instead of `Some(5)`, the patterns in the first -two arms would not have matched, so we would have matched to the underscore. We -did not introduce the `x` variable in the pattern of that arm, so the `x` in -the expression is still the outer `x` that has not been shadowed. In this -hypothetical case, the `match` would print `Default case, x = None`. +two arms wouldn’t have matched, so the value would have matched to the +underscore. We didn’t introduce the `x` variable in the pattern of the +underscore arm, so the `x` in the expression is still the outer `x` that hasn’t +been shadowed. In this hypothetical case, the `match` would print `Default +case, x = None`. -Once the `match` expression is over, its scope ends, and so does the scope of +When the `match` expression is done, its scope ends, and so does the scope of the inner `y`. The last `println!` produces `at the end: x = Some(5), y = 10`. To create a `match` expression that compares the values of the outer `x` and `y`, rather than introducing a shadowed variable, we would need to use a match -guard conditional instead. We’ll be talking about match guards later in this -section. +guard conditional instead. We’ll talk about match guards later in the “Extra +Conditionals with Match Guards” section. ### Multiple Patterns -In `match` expressions you can match multiple patterns using the `|` syntax, +In `match` expressions, you can match multiple patterns using the `|` syntax, which means *or*. For example, the following code matches the value of `x` against the match arms, the first of which has an *or* option, meaning if the -value of `x` matches either of the values in that arm, it will run: +value of `x` matches either of the values in that arm, that arm’s code will +run: ```rust let x = 1; @@ -98,13 +102,13 @@ match x { } ``` -This code will print `one or two`. +This code prints `one or two`. ### Matching Ranges of Values with `...` -The `...` syntax allows you to match to an inclusive range of values. In the -following code, when a pattern matches any of the values within the range, -that arm will execute: +The `...` syntax allows us to match to an inclusive range of values. In the +following code, when a pattern matches any of the values within the range, that +arm will execute: ```rust let x = 5; @@ -115,18 +119,17 @@ match x { } ``` -If `x` is 1, 2, 3, 4, or 5, the first arm will match. This is more convenient -than using the `|` operator to express the same idea; instead of `1 ... 5` we -would have to specify `1 | 2 | 3 | 4 | 5` using `|`. Specifying a range instead -is much shorter, especially if we wanted to match, say, any number between 1 -and 1,000! +If `x` is 1, 2, 3, 4, or 5, the first arm will match. This syntax is more +convenient than using the `|` operator to express the same idea; instead of `1 +... 5`, we would have to specify `1 | 2 | 3 | 4 | 5` if we used `|`. Specifying +a range is much shorter, especially if we want to match, say, any number +between 1 and 1,000! Ranges are only allowed with numeric values or `char` values, because the -compiler checks that the range isn’t empty at compile time. `char` and numeric -values are the only types that Rust knows how to tell if a range is empty or -not. +compiler checks that the range isn’t empty at compile time. The only types for +which Rust can tell if a range is empty or not are `char` and numeric values. -Here’s an example using ranges of `char` values: +Here is an example using ranges of `char` values: ```rust let x = 'c'; @@ -138,13 +141,13 @@ match x { } ``` -Rust can tell that `c` is within the first pattern’s range, and this will print -`early ASCII letter`. +Rust can tell that `c` is within the first pattern’s range and prints `early +ASCII letter`. ### Destructuring to Break Apart Values We can also use patterns to destructure structs, enums, tuples, and references -in order to use different parts of these values. Let’s go through each of those! +to use different parts of these values. Let’s walk through each value. #### Destructuring Structs @@ -172,18 +175,18 @@ fn main() { separate variables This code creates the variables `a` and `b` that match the values of the `x` -and `y` fields of the `p` variable. - -This example shows that the names of the variable names in the pattern don’t -have to match the field names of the struct, but it’s common to want the -variable names to match the field names to make it easier to remember which -variables came from which fields. Because having variable names match the -fields is common, and because writing `let Point { x: x, y: y } = p;` contains -a lot of duplication, there’s a shorthand for patterns that match struct -fields: you only need to list the name of the struct field, and the variables -created from the pattern will have the same names. Listing 18-13 shows code -that behaves in the same way as the code in Listing 18-12, but the variables -created in the `let` pattern are `x` and `y` instead of `a` and `b`: +and `y` fields of the `p` variable. This example shows that the names of the +variables in the pattern don’t have to match the field names of the struct. But +it’s common to want the variable names to match the field names to make it +easier to remember which variables came from which fields. + +Because having variable names match the fields is common and because writing +`let Point { x: x, y: y } = p;` contains a lot of duplication, there is a +shorthand for patterns that match struct fields: you only need to list the name +of the struct field, and the variables created from the pattern will have the +same names. Listing 18-13 shows code that behaves in the same way as the code +in Listing 18-12, but the variables created in the `let` pattern are `x` and +`y` instead of `a` and `b`: Filename: src/main.rs @@ -205,16 +208,16 @@ fn main() { Listing 18-13: Destructuring struct fields using struct field shorthand -This code creates the variables `x` and `y` that match the `x` and `y` of the -`p` variable. The outcome is that the variables `x` and `y` contain the values -from the `p` struct. +This code creates the variables `x` and `y` that match the `x` and `y` fields +of the `p` variable. The outcome is that the variables `x` and `y` contain the +values from the `p` struct. We can also destructure with literal values as part of the struct pattern -rather than creating variables for all of the fields. This allows us to test +rather than creating variables for all the fields. Doing so allows us to test some of the fields for particular values while creating variables to destructure the other fields. -Listing 18-14 shows a `match` statement that separates `Point` values into +Listing 18-14 shows a `match` expression that separates `Point` values into three cases: points that lie directly on the `x` axis (which is true when `y = 0`), on the `y` axis (`x = 0`), or neither: @@ -242,23 +245,24 @@ in one pattern The first arm will match any point that lies on the `x` axis by specifying that the `y` field matches if its value matches the literal `0`. The pattern still -creates an `x` variable that we can use in the code for this arm. Similarly, -the second arm matches any point on the `y` axis by specifying that the `x` -field matches if its value is `0`, and creates a variable `y` for the value of -the `y` field. The third arm doesn’t specify any literals, so it matches any -other `Point` and creates variables for both the `x` and `y` fields. +creates an `x` variable that we can use in the code for this arm. + +Similarly, the second arm matches any point on the `y` axis by specifying that +the `x` field matches if its value is `0` and creates a variable `y` for the +value of the `y` field. The third arm doesn’t specify any literals, so it +matches any other `Point` and creates variables for both the `x` and `y` fields. In this example, the value `p` matches the second arm by virtue of `x` -containing a 0, so this will print `On the y axis at 7`. +containing a 0, so this code will print `On the y axis at 7`. #### Destructuring Enums -We’ve destructured enums before in this book, like in Listing 6-5 in Chapter 6 -when we destructured an `Option`. One detail we haven’t mentioned -explicitly is that the pattern to destructure an enum should correspond to the -way the data stored within the enum is defined. For example, let’s take the -`Message` enum from Listing 6-2 and write a `match` with patterns that will -destructure each inner value in Listing 18-15: +We’ve destructured enums earlier in this book, for example, when we +destructured `Option` in Listing 6-5 in Chapter 6. One detail we haven’t +mentioned explicitly is that the pattern to destructure an enum should +correspond to the way the data stored within the enum is defined. As an +example, in Listing 18-15 we use the `Message` enum from Listing 6-2 and write +a `match` with patterns that will destructure each inner value: Filename: src/main.rs @@ -303,18 +307,18 @@ different kinds of values This code will print `Change the color to red 0, green 160, and blue 255`. Try changing the value of `msg` to see the code from the other arms run. -For enum variants without any data like `Message::Quit`, we can’t destructure +For enum variants without any data, like `Message::Quit`, we can’t destructure the value any further. We can only match on the literal `Message::Quit` value, -and there are no variables in that pattern. +and no variables are in that pattern. -For struct-like enum variants such as `Message::Move`, we can use a pattern +For struct-like enum variants, such as `Message::Move`, we can use a pattern similar to the pattern we specify to match structs. After the variant name, we -place curly brackets and then list the fields with variables so that we break -apart the pieces to use in the code for this arm. Here we use the shorthand -form as shown in Listing 18-13. +place curly brackets and then list the fields with variables so we break apart +the pieces to use in the code for this arm. Here we use the shorthand form as +we did in Listing 18-13. -For tuple-like enum variants like `Message::Write`, that holds a tuple with one -element, and `Message::ChangeColor` that holds a tuple with three elements, the +For tuple-like enum variants, like `Message::Write` that holds a tuple with one +element and `Message::ChangeColor` that holds a tuple with three elements, the pattern is similar to the pattern we specify to match tuples. The number of variables in the pattern must match the number of elements in the variant we’re matching. @@ -322,16 +326,15 @@ matching. #### Destructuring References When the value we’re matching to our pattern contains a reference, we need to -destructure the reference from the value, which we can do by specifying a -`&` in the pattern. This lets us get a variable holding the value that the +destructure the reference from the value, which we can do by specifying a `&` +in the pattern. Doing so lets us get a variable holding the value that the reference points to rather than getting a variable that holds the reference. - -This is especially useful in closures where we have iterators that iterate over -references, but we want to use the values in the closure rather than the -references. +This technique is especially useful in closures where we have iterators that +iterate over references, but we want to use the values in the closure rather +than the references. The example in Listing 18-16 iterates over references to `Point` instances in a -vector, and destructures both the reference and the struct so we can perform +vector, and destructures the reference and the struct so we can perform calculations on the `x` and `y` values easily: ```rust @@ -355,14 +358,14 @@ let sum_of_squares: i32 = points Listing 18-16: Destructuring a reference to a struct into the struct field values -This code results in the value 135 in the variable `sum_of_squares`, which is -the result from squaring the `x` value and the `y` value, adding those +This code gives us the variable `sum_of_squares` holding the value 135, which +is the result of squaring the `x` value and the `y` value, adding those together, and then adding the result for each `Point` in the `points` vector to get one number. If we had not included the `&` in `&Point { x, y }` we’d get a type mismatch error, because `iter` would then iterate over references to the items in the -vector rather than the values themselves. The error would look like this: +vector rather than the actual values. The error would look like this: ```text error[E0308]: mismatched types @@ -375,13 +378,13 @@ error[E0308]: mismatched types found type `Point` ``` -This tells us that Rust was expecting our closure to match `&Point`, but we -tried to match directly to a `Point` value, and not a reference to a `Point`. +This error indicates that Rust was expecting our closure to match `&Point`, but +we tried to match directly to a `Point` value, not a reference to a `Point`. #### Destructuring Structs and Tuples -We can mix, match, and nest destructuring patterns in even more complex way. -Here’s an example of a complicated destructure, where we nest structs and +We can mix, match, and nest destructuring patterns in even more complex ways. +The following example shows a complicated destructure where we nest structs and tuples inside a tuple, and destructure all the primitive values out: ```rust @@ -393,7 +396,7 @@ tuples inside a tuple, and destructure all the primitive values out: let ((feet, inches), Point {x, y}) = ((3, 10), Point { x: 3, y: -10 }); ``` -This lets us break complex types into their component parts so that we can use +This code lets us break complex types into their component parts so we can use the values we’re interested in separately. Destructuring with patterns is a convenient way to use pieces of values, such @@ -401,20 +404,20 @@ as the value from each field in a struct, separately from each other. ### Ignoring Values in a Pattern -We’ve seen that it’s sometimes useful to ignore values in a pattern, such as in -the last arm of a `match` to give us a catch-all that doesn’t actually do -anything, but does account for all remaining possible values. There are a few +You’ve seen that it’s sometimes useful to ignore values in a pattern, such as +in the last arm of a `match`, to get a catchall that doesn’t actually do +anything but does account for all remaining possible values. There are a few ways to ignore entire values or parts of values in a pattern: using the `_` -pattern (which we’ve seen), using the `_` pattern within another pattern, using -a name that starts with an underscore, or using `..` to ignore remaining parts -of a value. Let’s explore how and why to do each of these. +pattern (which you’ve seen), using the `_` pattern within another pattern, +using a name that starts with an underscore, or using `..` to ignore remaining +parts of a value. Let’s explore how and why to use each of these patterns. #### Ignoring an Entire Value with `_` -We’ve used the underscore as a wildcard pattern that will match any value but -not bind to the value. While the underscore pattern is especially useful as the -last arm in a `match` expression, we can use it in any pattern, including -function parameters, as shown in Listing 18-17: +We’ve used the underscore `_` as a wildcard pattern that will match any value +but not bind to the value. Although the underscore `_` pattern is especially +useful as the last arm in a `match` expression, we can use it in any pattern, +including function parameters, as shown in Listing 18-17: Filename: src/main.rs @@ -430,25 +433,25 @@ fn main() { Listing 18-17: Using `_` in a function signature -This code will completely ignore the value passed as the first argument, 3, and -will print out `This code only uses the y parameter: 4`. In most cases when you -no longer need a particular function parameter, you would change the signature -so it doesn’t include the unused parameter. +This code will completely ignore the value passed as the first argument, `3`, +and will print `This code only uses the y parameter: 4`. -Ignoring a function parameter can be especially useful in some cases, such as -when implementing a trait, when you need a certain type signature but the -function body in your implementation doesn’t need one of the parameters. The -compiler will then not warn about unused function parameters, as it would if we -used a name instead. +In most cases when you no longer need a particular function parameter, you +would change the signature so it doesn’t include the unused parameter. Ignoring +a function parameter can be especially useful in some cases: for example, when +implementing a trait when you need a certain type signature but the function +body in your implementation doesn’t need one of the parameters. The compiler +will then not warn about unused function parameters, as it would if you used a +name instead. #### Ignoring Parts of a Value with a Nested `_` -We can also use `_` inside of another pattern to ignore just part of a value, -when we only want to test for part of a value but have no use for the other -parts in the corresponding code we want to run. Listing 18-18 shows code -responsible for giving a setting a value. The business requirements are that +We can also use `_` inside another pattern to ignore just part of a value: for +example, when we only want to test for part of a value but have no use for the +other parts in the corresponding code we want to run. Listing 18-18 shows code +responsible for managing a setting’s value. The business requirements are that the user should not be allowed to overwrite an existing customization of a -setting, but can unset the setting and can give the setting a value if it is +setting but can unset the setting and can give the setting a value if it is currently unset. ```rust @@ -473,18 +476,18 @@ match `Some` variants when we don’t need to use the value inside the This code will print `Can't overwrite an existing customized value` and then `setting is Some(5)`. In the first match arm, we don’t need to match on or use -the values inside either `Some` variant; the important part we need to test for -is the case when both `setting_value` and `new_setting_value` are the `Some` -variant. In that case, we want to print out why we’re not changing -`setting_value`, and we don’t change it. +the values inside either `Some` variant, but we do need to test for the case +when `setting_value` and `new_setting_value` are the `Some` variant. In that +case, we print why we’re not changing `setting_value`, and it doesn’t get +changed. In all other cases (if either `setting_value` or `new_setting_value` are -`None`), which is expressed by the `_` pattern in the second arm, we do want to -allow `new_setting_value` to become `setting_value`. +`None`) expressed by the `_` pattern in the second arm, we want to allow +`new_setting_value` to become `setting_value`. We can also use underscores in multiple places within one pattern to ignore -particular values, as shown in Listing 18-19 where we’re ignoring the second -and fourth values in a tuple of five items: +particular values. Listing 18-19 shows an example of ignoring the second and +fourth values in a tuple of five items: ```rust let numbers = (2, 4, 8, 16, 32); @@ -498,18 +501,18 @@ match numbers { Listing 18-19: Ignoring multiple parts of a tuple -This will print `Some numbers: 2, 8, 32`, and the values 4 and 16 will be +This code will print `Some numbers: 2, 8, 32`, and the values 4 and 16 will be ignored. -#### Ignoring an Unused Variable by Starting its Name with an Underscore +#### Ignoring an Unused Variable by Starting Its Name with an Underscore If you create a variable but don’t use it anywhere, Rust will usually issue a -warning, since that could be a bug. Sometimes, though, it’s useful to create a -variable you won’t use yet, like if you’re prototyping or just starting a -project. In this situation you’ll want to tell Rust not to warn you about the -unused variable, which you can do by starting the name of the variable with an -underscore. In Listing 18-20 we create two unused variables, but when we run -this code we should only get a warning about one of them. +warning because that could be a bug. But sometimes it’s useful to create a +variable you won’t use yet, such as when you’re prototyping or just starting a +project. In this situation, you can tell Rust not to warn you about the unused +variable by starting the name of the variable with an underscore. In Listing +18-20, we create two unused variables, but when we run this code, we should +only get a warning about one of them: Filename: src/main.rs @@ -521,15 +524,15 @@ fn main() { ``` Listing 18-20: Starting a variable name with an -underscore in order to not get unused variable warnings +underscore to avoid getting unused variable warnings -Here we get a warning about not using the variable `y`, but not about not using -the variable preceded by the underscore. +Here we get a warning about not using the variable `y`, but we don’t get a +warning about not using the variable preceded by the underscore. Note that there is a subtle difference between using only `_` and using a name -that starts with an underscore. Something like `_x` still binds the value to -the variable, whereas `_` doesn’t bind at all. To show a case where this -distinction matters, Listing 18-21 will provide us with an error. +that starts with an underscore. The syntax `_x` still binds the value to the +variable, whereas `_` doesn’t bind at all. To show a case where this +distinction matters, Listing 18-21 will provide us with an error: ```rust,ignore let s = Some(String::from("Hello!")); @@ -542,12 +545,12 @@ println!("{:?}", s); ``` Listing 18-21: An unused variable starting with an -underscore still binds the value, which may take ownership of the value +underscore still binds the value, which might take ownership of the value We’ll receive an error because the `s` value will still be moved into `_s`, -which prevents us from using `s` again. Using the underscore by itself, -however, doesn’t ever bind to the value. Listing 18-22 will compile without any -errors since `s` does not get moved into `_`: +which prevents us from using `s` again. However, using the underscore by itself +doesn’t ever bind to the value. Listing 18-22 will compile without any errors +because `s` doesn’t get moved into `_`: ```rust let s = Some(String::from("Hello!")); @@ -559,20 +562,20 @@ if let Some(_) = s { println!("{:?}", s); ``` -Listing 18-22: Using underscore does not bind the +Listing 18-22: Using an underscore does not bind the value -This works just fine; because we never bind `s` to anything, it isn’t moved. +This code works just fine because we never bind `s` to anything; it isn’t moved. #### Ignoring Remaining Parts of a Value with `..` With values that have many parts, we can use the `..` syntax to use only a few -parts and ignore the rest, while avoiding having to list underscores for each -ignored value. The `..` pattern will ignore any parts of a value that we -haven’t explicitly matched in the rest of the pattern. In Listing 18-23, we -have a `Point` struct that holds a coordinate in three dimensional space. In -the `match` expression, we want to operate only on the `x` coordinate and -ignore the values in the `y` and `z` fields: +parts and ignore the rest, and avoid having to list underscores for each +ignored value. The `..` pattern ignores any parts of a value that we haven’t +explicitly matched in the rest of the pattern. In Listing 18-23, we have a +`Point` struct that holds a coordinate in three-dimensional space. In the +`match` expression, we want to operate only on the `x` coordinate and ignore +the values in the `y` and `z` fields: ```rust struct Point { @@ -592,12 +595,12 @@ match origin { for `x` by using `..` We list the `x` value, and then just include the `..` pattern. This is quicker -than having to list out `y: _` and `z: _`, particularly when working with -structs that have lots of fields, in situations where only one or two fields -are relevant. +than having to list `y: _` and `z: _`, particularly when we’re working with +structs that have lots of fields in situations where only one or two fields are +relevant. -`..` will expand to as many values as it needs to be. Listing 18-24 shows a use -of `..` with a tuple: +The syntax `..` will expand to as many values as it needs to be. Listing 18-24 +shows how to use `..` with a tuple: Filename: src/main.rs @@ -616,13 +619,12 @@ fn main() { Listing 18-24: Matching only the first and last values in a tuple and ignoring all other values -Here, we have the first and last value matched with `first` and `last`. The +In this code, the first and last value are matched with `first` and `last`. The `..` will match and ignore everything in the middle. -Using `..` must be unambiguous, however. If it is not clear which values are -intended for matching, and which to be ignored, Rust will error. Listing 18-25 -shows an example of using `..` ambiguously that will not compile due to this -ambiguity: +However, using `..` must be unambiguous. If it is unclear which values are +intended for matching and which should be ignored, Rust will error. Listing +18-25 shows an example of using `..` ambiguously, so it will not compile: Filename: src/main.rs @@ -638,10 +640,10 @@ fn main() { } ``` -Listing 18-25: An attempt to use `..` in a way that is -ambiguous +Listing 18-25: An attempt to use `..` in an ambiguous +way -If we compile this example, we get this error: +When we compile this example, we get this error: ```text error: `..` can only be used once per tuple or tuple struct pattern @@ -651,25 +653,25 @@ error: `..` can only be used once per tuple or tuple struct pattern | ^^ ``` -It’s not possible for Rust to determine how many values in the tuple to ignore +It’s impossible for Rust to determine how many values in the tuple to ignore before matching a value with `second`, and then how many further values to -ignore after that. This code could mean that we intend to ignore 2, bind -`second` to 4, then ignore 8, 16, and 32; or we could mean that we want to -ignore 2 and 4, bind `second` to 8, then ignore 16 and 32, and so forth. The -variable name `second` doesn’t mean anything special to Rust, so we get a -compiler error since using `..` in two places like this is ambiguous. +ignore thereafter. This code could mean that we want to ignore `2`, bind +`second` to `4`, and then ignore `8`, `16`, and `32`; or that we want to ignore +`2` and `4`, bind `second` to `8`, and then ignore `16` and `32`; and so forth. +The variable name `second` doesn’t mean anything special to Rust, so we get a +compiler error because using `..` in two places like this is ambiguous. ### `ref` and `ref mut` to Create References in Patterns -Here we’ll look at using `ref` to make references so ownership of the values -isn’t moved to variables in the pattern. Usually, when you match against a -pattern, the variables introduced by the pattern are bound to a value. Rust’s -ownership rules mean the value will be moved into the `match`, or wherever -you’re using the pattern. Listing 18-26 shows an example of a `match` that has -a pattern with a variable, and then another usage of the entire value after the -`match`. This will fail to compile because ownership of part of the -`robot_name` value is transferred to the `name` variable in the pattern of the -first `match` arm: +Let’s look at using `ref` to make references so ownership of the values isn’t +moved to variables in the pattern. Usually, when you match against a pattern, +the variables introduced by the pattern are bound to a value. Rust’s ownership +rules mean the value will be moved into the `match` or wherever you’re using +the pattern. Listing 18-26 shows an example of a `match` that has a pattern +with a variable and then usage of the entire value in the `println!` statement +later, after the `match`. This code will fail to compile because ownership of +part of the `robot_name` value is transferred to the `name` variable in the +pattern of the first `match` arm: ```rust,ignore let robot_name = Some(String::from("Bors")); @@ -682,27 +684,25 @@ match robot_name { println!("robot_name is: {:?}", robot_name); ``` -Listing 18-26: Creating a variable in a match arm pattern -takes ownership of the value +Listing 18-26: Creating a variable in a `match` arm +pattern takes ownership of the value -This example will fail because the value inside `Some` in `robot_name` is moved -to within the `match` when `name` binds to that value. Because ownership of -part of `robot_name` has been moved to `name`, we can no longer use -`robot_name` in the `println!` after the `match` because `robot_name` no longer -has ownership. +Because ownership of part of `robot_name` has been moved to `name`, we can no +longer use `robot_name` in the `println!` after the `match` because +`robot_name` no longer has ownership. -In order to fix this code, we want to have the `Some(name)` pattern borrow that -part of `robot_name` rather than taking ownership. Outside of patterns, we’ve -seen that the way to borrow a value is to create a reference using `&`, so you -may think the solution is changing `Some(name)` to `Some(&name)`. +To fix this code, we want to make the `Some(name)` pattern *borrow* that part +of `robot_name` rather than taking ownership. You’ve already seen that, outside +of patterns, the way to borrow a value is to create a reference using `&`, so +you might think the solution is changing `Some(name)` to `Some(&name)`. -However, we saw in the “Destructuring to Break Apart Values” section that `&` -in patterns does not *create* a reference, it *matches* an existing reference -in the value. Because `&` already has that meaning in patterns, we can’t use -`&` to create a reference in a pattern. +However, as you saw in the “Destructuring to Break Apart Values” section, the +syntax `&` in patterns does not *create* a reference but *matches* an existing +reference in the value. Because `&` already has that meaning in patterns, we +can’t use `&` to create a reference in a pattern. -Instead, to create a reference in a pattern, we do this by using the `ref` -keyword before the new variable, as shown in Listing 18-27: +Instead, to create a reference in a pattern, we use the `ref` keyword before +the new variable, as shown in Listing 18-27: ```rust let robot_name = Some(String::from("Bors")); @@ -715,18 +715,18 @@ match robot_name { println!("robot_name is: {:?}", robot_name); ``` -Listing 18-27: Creating a reference so that a pattern -variable does not take ownership of a value +Listing 18-27: Creating a reference so a pattern variable +does not take ownership of a value This example will compile because the value in the `Some` variant in `robot_name` is not moved into the `match`; the `match` only took a reference to the data in `robot_name` rather than moving it. -To create a mutable reference in order to be able to mutate a value matched in -a pattern, use `ref mut` instead of `&mut` for the same reason that we use -`ref` instead of `&`: `&mut` in patterns is for matching existing mutable -references, not creating new ones. Listing 18-28 shows an example of a pattern -creating a mutable reference: +To create a mutable reference so we’re able to mutate a value matched in a +pattern, we use `ref mut` instead of `&mut`. The reason is, again, that in +patterns, the latter is for matching existing mutable references, not creating +new ones. Listing 18-28 shows an example of a pattern creating a mutable +reference: ```rust let mut robot_name = Some(String::from("Bors")); @@ -744,17 +744,17 @@ part of a pattern using `ref mut` This example will compile and print `robot_name is: Some("Another name")`. Because `name` is a mutable reference, we need to dereference within the match -arm code using the `*` operator in order to be able to mutate the value. +arm code using the `*` operator to mutate the value. ### Extra Conditionals with Match Guards A *match guard* is an additional `if` condition specified after the pattern in -a `match` arm that also must match if the pattern matches in order for that arm -to be chosen. Match guards are useful for expressing more complex ideas than a -pattern alone allows. +a `match` arm that must also match, along with the pattern matching, for that +arm to be chosen. Match guards are useful for expressing more complex ideas +than a pattern alone allows. The condition can use variables created in the pattern. Listing 18-29 shows a -`match` where the first arm has the pattern `Some(x)` and then also has a match +`match` where the first arm has the pattern `Some(x)` and also has a match guard of `if x < 5`: ```rust @@ -770,23 +770,24 @@ match num { Listing 18-29: Adding a match guard to a pattern This example will print `less than five: 4`. When `num` is compared to the -pattern in the first arm, it matches since `Some(4)` matches `Some(x)`. Then -the match guard checks to see if the value in `x` is less than 5, and because 4 -is less than 5, the first arm is selected. +pattern in the first arm, it matches, because `Some(4)` matches `Some(x)`. Then +the match guard checks whether the value in `x` is less than `5`, and because +it is, the first arm is selected. If `num` had been `Some(10)` instead, the match guard in the first arm would -have been false since 10 is not less than 5. Rust would then go to the second -arm, which would match because the second arm does not have a match guard and +have been false because 10 is not less than 5. Rust would then go to the second +arm, which would match because the second arm doesn’t have a match guard and therefore matches any `Some` variant. -There’s no way to express the `if x < 5` condition within a pattern, so the -match guard has given us the ability to express this logic. +There is no way to express the `if x < 5` condition within a pattern, so the +match guard gives us the ability to express this logic. In Listing 18-11, we mentioned that we could use match guards to solve our -pattern shadowing problem, where a new variable was created inside the pattern -in the `match` expression instead of using the variable outside the `match`. -That new variable meant we couldn’t test against the value that the outer -variable had. Listing 18-30 shows how we can use a match guard to fix this: +pattern shadowing problem. Recall that a new variable was created inside the +pattern in the `match` expression instead of using the variable outside the +`match`. That new variable meant we couldn’t test against the value of the +outer variable. Listing 18-30 shows how we can use a match guard to fix this +problem: Filename: src/main.rs @@ -808,24 +809,24 @@ fn main() { Listing 18-30: Using a match guard to test for equality with an outer variable -This will now print `Default case, x = Some(5)`. The pattern in the second -match arm is now not introducing a new variable `y` that would shadow the outer -`y`, meaning we can use the outer `y` in the match guard. Instead of specifying -the pattern as `Some(y)`, which would have shadowed the outer `y`, we specify -`Some(n)`. This creates a new variable `n` that does not shadow anything -because there is no `n` variable outside the `match`. - -In the match guard, `if n == y`, this is not a pattern and therefore does not -introduce new variables. This `y` *is* the outer `y` rather than a new shadowed -`y`, and we can express the idea that we’re looking for a value that has the -same value as the outer `y` by comparing `n` to `y`. - -You can also use the or operator `|` in a match guard to specify multiple -patterns, and the match guard condition will apply to all of the patterns. -Listing 18-31 shows the precedence of combining a match guard with a pattern -that uses `|`. The important part of this example is that the `if y` match -guard applies to 4, 5, *and* 6, even though it might look like `if y` only -applies to 6: +This code will now print `Default case, x = Some(5)`. The pattern in the second +match arm doesn’t introduce a new variable `y` that would shadow the outer `y`, +meaning we can use the outer `y` in the match guard. Instead of specifying the +pattern as `Some(y)`, which would have shadowed the outer `y`, we specify +`Some(n)`. This creates a new variable `n` that doesn’t shadow anything because +there is no `n` variable outside the `match`. + +The match guard `if n == y` is not a pattern and therefore doesn’t introduce +new variables. This `y` *is* the outer `y` rather than a new shadowed `y`, and +we can look for a value that has the same value as the outer `y` by comparing +`n` to `y`. + +You can also use the *or* operator `|` in a match guard to specify multiple +patterns; the match guard condition will apply to all the patterns. Listing +18-31 shows the precedence of combining a match guard with a pattern that uses +`|`. The important part of this example is that the `if y` match guard applies +to `4`, `5`, *and* `6`, even though it might look like `if y` only applies to +`6`: ```rust let x = 4; @@ -841,14 +842,13 @@ match x { guard The match condition states that the arm only matches if the value of `x` is -equal to 4, 5, or 6 *and* if `y` is `true`. What happens when this code runs is -that the pattern of the first arm matches because `x` is 4, but the match guard -`if y` is false, so the first arm is not chosen. The code moves on to the -second arm, which does match, and this program prints `no`. - -This is because the `if` condition applies to the whole pattern `4 | 5 | 6`, -and not only to the last value `6`. In other words, the precedence of a match -guard in relation to a pattern behaves like this: +equal to `4`, `5`, or `6` *and* if `y` is `true`. When this code runs, the +pattern of the first arm matches because `x` is `4`, but the match guard `if y` +is false, so the first arm is not chosen. The code moves on to the second arm, +which does match, and this program prints `no`. The reason is that the `if` +condition applies to the whole pattern `4 | 5 | 6`, not only to the last value +`6`. In other words, the precedence of a match guard in relation to a pattern +behaves like this: ```text (4 | 5 | 6) if y => ... @@ -860,20 +860,20 @@ rather than this: 4 | 5 | (6 if y) => ... ``` -We can tell this from what happened when we ran the code: if the match guard +After running the code, the precedence behavior is evident: if the match guard was only applied to the final value in the list of values specified using the `|` operator, the arm would have matched and the program would have printed `yes`. ### `@` Bindings -The at operator, `@`, lets us create a variable that holds a value at the same -time we’re testing that value to see if it matches a pattern. Listing 18-32 -shows an example where we want to test that a `Message::Hello` `id` field is -within the range `3...7` but also be able to bind the value to the variable -`id_variable` so that we can use it in the code associated with the arm. We -could have named `id_variable` `id`, the same as the field, but for the -purposes of this example we’ve chosen to give it a different name: +The *at* operator `@` lets us create a variable that holds a value at the same +time we’re testing that value to see whether it matches a pattern. Listing +18-32 shows an example where we want to test that a `Message::Hello` `id` field +is within the range `3...7`. But we also want to bind the value to the variable +`id_variable` so we can use it in the code associated with the arm. We could +name this variable `id`, the same as the field, but for this example we’ll use +a different name: ```rust enum Message { @@ -904,28 +904,27 @@ while also testing that the value matched the range pattern. In the second arm where we only have a range specified in the pattern, the code associated with the arm doesn’t have a variable that contains the actual value -of the `id` field. The `id` field’s value could have been 10, 11, or 12 but the -code that goes with that pattern doesn’t know which one and isn’t able to use -the value from the `id` field, because we haven’t saved the `id` value in a -variable. +of the `id` field. The `id` field’s value could have been 10, 11, or 12, but +the code that goes with that pattern doesn’t know which it is. The pattern code +isn’t able to use the value from the `id` field, because we haven’t saved the +`id` value in a variable. In the last arm where we’ve specified a variable without a range, we do have -the value available to use in the arm’s code in a variable named `id` because -we’ve used the struct field shorthand syntax. We haven’t applied any test to -the value in the `id` field in this arm, though, like the first two arms did: -any value would match this pattern. +the value available to use in the arm’s code in a variable named `id`. The +reason is that we’ve used the struct field shorthand syntax. But we haven’t +applied any test to the value in the `id` field in this arm, like we did with +the first two arms: any value would match this pattern. Using `@` lets us test a value and save it in a variable within one pattern. ## Summary -Patterns are a useful feature of Rust that help distinguish between different -kinds of data. When used in `match` statements, Rust makes sure your patterns -cover every possible value, or your program will not compile. Patterns in `let` -statements and function parameters make those constructs more powerful, -enabling the destructuring of values into smaller parts at the same time as -assigning to variables. We can create simple or complex patterns to suit our -needs. +Rust’s patterns are very useful in that they help distinguish between different +kinds of data. When used in `match` expressions, Rust ensures your patterns +cover every possible value, or your program won’t compile. Patterns in `let` +statements and function parameters make those constructs more useful, enabling +the destructuring of values into smaller parts at the same time as assigning to +variables. We can create simple or complex patterns to suit our needs. -Now, for the penultimate chapter of the book, let’s take a look at some -advanced parts of a variety of Rust’s features. +Next, for the penultimate chapter of the book, we’ll look at some advanced +aspects of a variety of Rust’s features. From 5d87cf9fc2c76ecc70ccfb20c0dc93a08250c638 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 15:23:44 -0400 Subject: [PATCH 010/749] Introduction as received from nostarch after copyediting --- second-edition/nostarch/odt/chapter00.docx | Bin 0 -> 67439 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 second-edition/nostarch/odt/chapter00.docx diff --git a/second-edition/nostarch/odt/chapter00.docx b/second-edition/nostarch/odt/chapter00.docx new file mode 100644 index 0000000000000000000000000000000000000000..ca72be72719a30933df54839572ba32b65c63ea5 GIT binary patch literal 67439 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

yZBg+oC zT07K?G$%0(QhdnCg|YPu^3MVAsMA-8WAO=O7toTF6k;~ zmqV)a8d@D}Rh2kPr&&moa*P%hRXV&Deyod=9)31Pt6_lsa({G^wea2jyE6`bYXWN5 zrDXmn^RZH_FM{pDLkT0mt_~ZouJ9tBnGTf@yJ)otbnNs?|M7)j7o1#rr;~@xH79i( zWTUf_BcokT0J;rx;mR>Tv0h|<%HTYXd4&UL^-gMp4||*#c(jW>I%HwC=Sp-QP}Y(j zqAj#EO$?+jIvtl#Tx=+QIGXxm5@gRMJmd978bJo#D+gzRoTw2D0k~fx=I==GIM7fx zPaktsM{C2|bo@?~Xh&48-9Y2Y!4hmHRvhVr`3AO_y856@R>V{@{uO~;UA|5SF_Aug z^fOCbl|W^KZT5$l=|ijq>RnX+tP}n0K)h_I!KSho9BAGHIx@@L3@E2XMscHBMP_xd zhSkTY^S`-P-&RGYNU zaOagQqgN@ck7#`+A#|+Mx!hFP74}Rpv41;bq+`(n!XUAWSg$SLfHR2}|VT2CZIu@f#S#5Mnp-R?Ub56!84N#jE4SVRP_;HR1 z7B267!;#FcxLy#_M2h&$Tp8l!NqsQ7t$G#Kyg!DNV;TWQ+q9?;@KK_419}5}sDQEW63>{6Tec zTD3+ggRY~*7L~c}PBbRhqdBq|e2iHd%_|7IK)ZT+e}vdBNV28x-+2=Lv6$7>bh7#E ze$={NVJG>wA$ZCuvRjP9G z2^TY4MW?*Zi#9XOAsx$_s>A{(z#6}gjQ_Hnt3gSd2Q6_R#L3s=__n4Xg-1lkigOXp zW9wq4459v1$IQa5@|r=9*@aIE{oNiG;uRt^Of5gP*OOH zsM?ihNcSp3p}QQra6VUAOlpz^Dw#pPYl=apDMZL~T10yI0O|cGRuuelCs4vPALd$k zi7wQ#uhq!@J}kz2%1BueI_tm!Pwb*epfAv`1Zs|jzc%J8njZthcr~B7^^RGIT>;}+ zGb3lt8|9QjJhFAO;}rJb$MHF3TayT;saJlMklv4TVHR5Jh$Bb_8sQA#XWd427FmL1 z=vIKc!H*4d%yuU6OtLQmmxa$fgP1?z;<$X8t)~d74SJMy-!*{P>}Zd9djLKg+R$?@(>P><)&&g_L_j!s zqT%63Sm=-@4sV1;qVhyL;b~cI@a=C`Mxb%mx-#0=tE3`ZvKTvm~& zoiW~6+_Ek$V{^s(MAUhOGhTHb30I@>a=ZsMD5CT4pNHUVBob*!wcPulV7UYrAE4V1 zCH@mnLeO$NX(RCn(pt`$3mobLC* z)opBY3KyI#1uG(9h|aMHR?-yLh2G{2gL3Q|tHTMly6BJ3w-xsch?CoP9zT4zCb+Vq zT>{6Xj{OY?_TJfDX#+Wkv+@4@1v@U}`;}8=tQ#X>)|!D1XWe~^h^W4*~_<>jtBpK1VbbADLH`8YwpATnwmyf4 z@jDCwefI|p(PeS^7Z^g9;_7cO#MWP6h+CfDVF=#eVF*!DAPhkwmr0SW#i&=fF)V5m z5!xDQJ_RdRdtt@gCHoe`E$KK0hyL!nnP#SG?&R+q=|9QRNGpcq1)31m;yu@iWf+o- zr5IBnkRGWsQL2azY$MTb0e9pQD_ohyl)aiBWK+%DLQvg{Y(Z^)Kxtm8*a zw>MTha#t8u6fWpMKVr4?n;6d)8{S~UM$kgD zg5@Kof{g%ggK;t)F~z}=Qb_TPD<=2}7$)iE%gS?}ovSJ>^M&jSwjUB{`C57TKB;xd zMRY;!-ym>D8}gDURk!YNZLck_Vj~%>>17u$t3v(R$V@ruBoc4X<^(I8k?{AufX_L|$K1)$I?K8X{5bf*~62L~>^)_ixPlVb~ z>4z$O8mFGZ!tS7tjvKcP0H`+v<)?meL*mPySApHKkKT~cc`(r0AsNW1wX~0=i1R@ zz`{yiZ4fVn5M7N&E{^`@jE752Du?_2z^fXld^7%DDJQgLLhsLIDDqa6jw@Pg#GM+JKJrz4Y0#id#uX(X)__N)^Y3Q#PY1o3E!;I#GSmo7p8Ouh4|ro zC4Aa5D|KqEv5GZpO%YMVCBEXSL?YI&bVbu`w#Jh%TVZ->F$&)6^TE3l*&|^W2t_R7 z^uxpu$Ro#NhQoHOx)P=y#W&qfh!|-~_I%|@Pp~nHwm~KK=*!Z@4A%C(SuslPZ-)FZ z^qfo9`T%kT=z3Ht{xLOnQBt!6yZJ5m7>X>KFLUIJFv7uR$~n*0G2cKsh)_sa7if{U z+%vJO2-fcI%!eHk>yipOe0mq|^ZBBq3dAAKN;<8|lx(O!Wg5uWi z;t{zZn?>C(2UO%9OELtkI@U}b;$ryMZsG=hCjMp`#%1Q->~N_3(7L%7Z zdSg*WD;}T1V5SkyF&>R8V&GoS3x^cEue>qH!Hi>%!ji7k zxE2(mcvX_d6b6Z?I)Z&)vG{7^ETXM%79v|(bBAaz_xz+7 ziy3(I31pgOZ_ctZl1%jRcGm8MelI^ey*A5&3D>80LbtI69rBmgE55wW_KT+vd@DJI~YOL3S&Q?R?wF z3ZCvjuwC+!DjS{=`DBeAM0PD#xIe$Pu)OmntjqPEDXz=)m5$MDan5%keuK6r2gFhzr)st2-o4KehchetfGV;N%}TlH=ePn411k2!>${UOAhd z9#OP`^*sPBnXZ@q?mHZ41U{}C?U|`8ndBKNPxLm4ufZ-Jn|bGy0e6Cv?zY1hX)Wm+ z2Tr@)h(TZB^_|LY8S1};-Xo-mO9kQ=5|T% zh032gbH=Dw{Nigw!V6IB_9+)I*Hh6NBYI(04Nd65A^Y#dg5fb9;-o1wVZFw}b|!<` zN-qnAu2~Hg?{=?*@hCGj4n=wS`#ATy#)Q5WrF)=|s7opoB(*_vMtqtL{CxF9yIT64 zs2JXKds;HJRmc+NGOg8KRzU1{-twfd1g~bbGuiG-h0ghKmg-OM9kDb=oqUo{1AFcy zb5pwC8Bqf^wV26i7drRa=~_SsbKy8;TETHo0tZLWb7|9ahIA$V0*Z3x?2)` zSD{y%m9^4)bnF;jOK#=z$J~>pr^vO*CW*15{;MZZJE!T2Y=euJ(P|9^OV`OWx&|kk zG&8zQA~a^EDgb0J$;`2D7@Br@VawLFI?625cF~27NUZ`s&uy|v-phJ=Pj;C^qJ7k2 z=-?s`v-^A<{cMen=9+S=cT=?P<~vk|hM_FHF)BWG zl%&aFc1Jj6o5XBJ8d@TmQ~$VyNy?;rN!_4CF=NQr(=lXW`QVffV}*QoY=Lf;t}1|? z#GU?t5P}m`pcI&FR8A8l^g^CD@^ym5J_5jS7Ke*6B9DQ1(#x={2G}x~@XlC$S zoyT(Tr(W+max31&cjgJ$tuoZb)r&GzvdRk!+v-}wL$(ezu}0fYp!OhsvFuALKlKV# zr1O|Fo(KY2$-NoM0<)xirx6}CYH}(jgBR+%rv9aRXfzIhjlb>~i&=q{e+j`!FSt=8 zzZFQauW=g7)zz2YYaY1v*xA@y}VCS&?O1XJq`8%rt{=G&+d)c0f^qMB_u50GvlmUw&* z9)eaAH&kjIT#QnM$W8j~nFnSwdb{&G-2fNEwz^@_46L?;#PrX0&if!w6Vlr$bjJIP zBxY);xGexHQRB`scmROJKg5acV;62@aqW`Bxlifi3S_nR9Q36FAaYs-ug)eW!n1R5 zUxkPTa!qFju;oXVv&Gm$I5FbTrU(Ga4|HHaR%+xywxh+F1LtP%6I!xcEzG0M^mdYl zSx(><^VVP+HN>%EezuBT<0PpKb48;}_2WJXX`7bFH*5r?L+-?{Y{=YD7+Se7tP(@3 zO&4aecHknQr>QMQB4rY_S0wf}&#l(hPa{ia=v|568Y@D+hb6_$StA9^4#T^YEmvzo z9r#{-kSbyfAPWw?Qq5~tn6EzSCC4us9W`KKYIiqODyhql%;~^i_|X4ARmhpi<_YeW zct~mJ>-H^?o2$~rv^q01kTivCzck<-0)4N)xVXpZY3~99T zWRp*_^reKJowWA;4nQzgy`1|M|EOiCvTx@W8?=BIfHtNnT+qo9ZIh?6LU`d(oz*yy=JG>Z~oFTmn)5%mzHFf%??Af7#@{ zM!;^D`O%;~BVucM85{=Zdeet5@T6LhpVWt>5Td}7=ymO}s0Xx7Fdpr&d}kM5x#p5x zK(lM4o+Sjqq&q?x!o@uKUICzYc=thl63L!)UzW~m!BV63b`O*U1TC9fQ9%6%5K`-_ z?0h!e+#76^6W@QjN9&W#OS@lh^Gs-a>hx7wKQe;be3IiHY2tw-xZn$6FIi{fI&%$f zp6Zc@sq)%rZbF<7h)K0>!^H@ga*z*KP~Vy*=1BD3;0@8~gX@QuwC{uALm#YV|BAZ` z$wSMZozXgnr6!s(yM-=-aDuf~bG%|zUOPgcV!AW)=~I){FbTn!vn{?a5~#f`8jD3< z>VBK8)4BF{r-T)3#tE=>^p83={##|#Wk1?Ywo;~l*vy6`=hU*MA!)s+LABd7c9@I}!Iwcp^*E z$HX%ORzk#4%maLL_P#Dmf<;AGXTEOsm+yqIjeo|(v^HDhDTkO^^?1jEzjB%eT5JK$ zE~HAC-!}9J$Oyx_zTkm>$IYxeDpjZlbmM7>9QY0+tyZ)SBbQIk$nz>RPg`Nx(>-;I z>9PpRM^jP8vZsUBbzBduWT(L#$VZ*4aL8JZ7TO&_+vOgph$kV9Y_vROwaPR?8)s1U z)z@uV(t)Uh?);C{cxE4E`S9&*aJ9Xk{!ewT?ebVKeKIMOR*Pz=$voD@(QMX>Rpjb^ zs0SP^@K!>rwTgX*u%qqoGD7GxUy4;sotfTz>Uwkinv;LV%QkE$;R`>3-gf$Tfm)5) zr;e)L_jHfpN4jlNc<(6e6m)Dw;wlEYl1sMzXh|$aK)P1;+Ij7fGqQm6w zqf~v|bhy2k_wExsd2g5XPL;y``$=CRV*su$)ZneC{hf9qdz&Iu6=be|$%PKAr|!$t zV+QHym#RH`%R;1&1#gO`{ir->#2t=06{?Nh{pJC5mlbmcU$d>t*fb5QW9bj*wf^fO3 zInFQbiv5*rRct#MgFul(?7II-oE~C3`UPlBHk8^)cAS#<`{_jH2uC!Ud(rHQ)-4cH z?RE-hwQ|XadI#GZ2J90?!vrnoU;k8T4-8uP!V0WHi zQA?PjJU1?MbE{U#i$N5+MRlt16wf{5sm2nHJNGHhf-7rwSqrKOrxBBXRNaXf;{c4UH$BQGU!ooXPF57^+KBDSU8$o_ z)LH_Crb$>p`oL++uqtx^=17a~11`>;(n6!Ll&)p2)l3Bexanv6ao-ky28U`NO*RO$ z@Od05gBZjd$M6|Cl~b5Am^)j*UVQ_}_s%fqKn6IjqEGV^Vg2r5x0w4MbtVObV1+)H zVf4zvoM@6G2CW21#*aDN;bJ5VPYW1PR!eq&3QhJYqcoKELUarwg2Ufa>l~28Ds6&m z-a%lSb9Yj7N*a9%QA#P(#!hua`;amft{1VF)2wKJPd1f&=Uyrl6fk6gC%s*+dvm9$ zoAhZwSzwbv1Tf|A96jo@H{A&zG7n zLW82W(}OcV!fFa;R%~$NecxxO=Q#d-TXqmo?~@D?B0h9dD`jsl6X^MD7>>P?g=3x0 zRke;ZU*kr~Z7RC!%C_b}^Hub;y0RpBw*JAq%3P0*C6YZFY4^}N0mV~JI&9&YY>^wuq3%b}1iuwYn)YTw*zB6$o_z zQOoUsP1b=^tPw}(hMw!CFL+xY+NISu`HZ=)zy2J`+}i%h;<^}why$1%W-))S6&l(W zp7Z1R&HOf!oLEM89Ebks5*w^*_mj`M%K?LPKwVe}5{Fr?DtEPs3-+n7x{;X{PAwlK z-Jwe1zE+wJ=$Cm+pVX*_hht!3OyC1S3BcTlboRTVC{$Vyxfdy^{EtA~v-ntDq@9V1 zubr#6nd@g>gGRGB4$a7oT)5||O#|~>a@cPuJH*Gx>Zbjp$s}KulA&4(7wrW`y{*w| zD5PFDiFH&JUwJ463^ao!8F_Im_Q;>2i6@qW@7E$pdJ0JR4{|<4hW4>jQcBqH!uDO* z80gh~^u{%MWbDVUqn*`^kIlAz;n|!en5%gMetXW2@$GnF(AA<>eQ^Pnjb;m<&a0z- z0y&kgP*?F~Hw!Qpcld78k3CtwCV}80`7M`Et?6?Mk3tt8__;|#GkM-ql2SG7O&5u! zU@LtC>_oD?bYnb+aYVm?PcQn#qYXVVIuX{c{d0|1-h;fuE7U(TTR_3+fysT4Ake_K zk{AReZY;DD_~vE;*P{ZT`TL?P3Ji!d2cB`Oc{-Xq>;D#iq$K?V{KK0`fnFs{UI3 zYr^H94ep!%n2=xcE`ROtYt-VO9co(s=ub&%#_BjDYKmUG!|M@ARBntsN0Dg<6 RL;=YFCa(>E0sl3C{10im`CI@1 literal 0 HcmV?d00001 From 222a42c1b124ab9b99ec0fb79c1d1c9b9fdc3f8a Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 15:27:07 -0400 Subject: [PATCH 011/749] Oops, never took a snapshot when we sent the introduction to nostarch --- second-edition/nostarch/chapter00.md | 169 +++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 second-edition/nostarch/chapter00.md diff --git a/second-edition/nostarch/chapter00.md b/second-edition/nostarch/chapter00.md new file mode 100644 index 0000000000..b2890fd8ff --- /dev/null +++ b/second-edition/nostarch/chapter00.md @@ -0,0 +1,169 @@ + +[TOC] + +# Introduction + +Welcome to “The Rust Programming Language,” an introductory book about Rust. + +Rust is a programming language that helps you write faster, more reliable +software. High-level ergonomics and low-level control are often at odds with +each other in programming language design; Rust stands to challenge that. +Through balancing powerful technical capacity and a great developer experience, +Rust gives you the option to control low-level details (such as memory usage) +without all the hassle traditionally associated with such control. + +## Who Rust is For + +Rust is great for many people for a variety of reasons. Let’s discuss a few of +the most important groups. + +### Teams of Developers + +Rust is proving to be a productive tool for collaborating among large teams of +developers with varying levels of systems programming knowledge. Low-level code +is prone to a variety of subtle bugs, which in most other languages can only be +caught through extensive testing and careful code review by experienced +developers. In Rust, the compiler plays a gatekeeper role by refusing to +compile code with these kinds of bugs--including concurrency bugs. By working +alongside the compiler, the team can spend more time focusing on the logic of +the program rather than chasing down bugs. + +Rust also brings contemporary developer tools to the systems programming world: + +* Cargo, the included dependency manager and build tool, makes adding, + compiling, and managing dependencies painless and consistent across the Rust + ecosystem. +* Rustfmt ensures a consistent coding style across developers. +* The Rust Language Server powers IDE integration for code completion and + inline error messages. + +By using these and other tools in the Rust ecosystem, developers can be +productive while writing systems-level code. + +### Students + +Rust is for students and people who are interested in learning about systems +concepts. Many people have learned about topics like operating systems +development through Rust. The community is happy to answer student questions. +Through efforts such as this book, the Rust teams want to make systems concepts +more accessible to more people, especially those getting started with +programming. + +### Companies + +Rust is used in production by hundreds of companies, large and small, for a +variety of tasks, such as command line tools, web services, DevOps tooling, +embedded devices, audio and video analysis and transcoding, cryptocurrencies, +bioinformatics, search engines, internet of things applications, machine +learning, and even major parts of the Firefox web browser. + +### Open Source Developers + +Rust is for people who want to build the Rust programming language, community, +developer tools, and libraries. We’d love for you to contribute to the Rust +language. + +### People Who Value Speed and Stability + +By speed, we mean both the speed of the programs that Rust lets you create and +the speed at which Rust lets you write them. The Rust compiler’s checks ensure +stability through feature additions and refactoring, as opposed to brittle +legacy code in languages without these checks that developers are afraid to +modify. By striving for zero-cost abstractions, higher level features that +compile to lower level code as fast as code written manually, Rust endeavors to +make safe code be fast code as well. + +This isn’t a complete list of everyone the Rust language hopes to support, but +these are some of the biggest stakeholders. Overall, Rust’s greatest ambition +is to take trade-offs that have been accepted by programmers for decades and +eliminate the dichotomy. Safety *and* productivity. Speed *and* ergonomics. +Give Rust a try, and see if its choices work for you. + +## Who This Book is For + +This book assumes that you’ve written code in some other programming language, +but doesn’t make any assumptions about which one. We’ve tried to make the +material broadly accessible to those from a wide variety of programming +backgrounds. We don’t spend a lot of time talking about what programming *is* +or how to think about it; someone new to programming entirely would be better +served by reading a book specifically providing an introduction to programming. + +## How to Use This Book + +This book generally assumes that you’re reading it front-to-back, that is, +later chapters build on top of concepts in earlier chapters, and earlier +chapters may not dig into details on a topic, revisiting the topic in a later +chapter. + +There are two kinds of chapters in this book: concept chapters, and project +chapters. In concept chapters, you’ll learn about an aspect of Rust. In the +project chapters, we’ll build small programs together, applying what we’ve +learned so far. Chapters 2, 12, and 20 are project chapters; the rest are +concept chapters. + +Additionally, Chapter 2 is a hands-on introduction to Rust as a language. We’ll +cover concepts at a high level, and later chapters will go into them in detail. +If you’re the kind of person who likes to get their hands dirty right away, +Chapter 2 is great for that. If you’re *really* that kind of person, you may +even wish to skip over Chapter 3, which covers features that are very similar +to other programming languages, and go straight to Chapter 4 to learn about +Rust’s ownership system. By contrast, if you’re a particularly meticulous +learner who prefers to learn every detail before moving onto the next, you may +want to skip Chapter 2 and go straight to Chapter 3. + +Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match` +expressions, and the `if let` control flow construct. Structs and enums are the +ways to make custom types in Rust. + +In Chapter 7, you'll learn about Rust's module system and privacy for +organizing your code and its public API. Chapter 8 discusses some common +collection data structures provided by the standard library: vectors, strings, +and hash maps. Chapter 9 is all about Rust's error handling philosophy and +techniques. + +Chapter 10 digs into generics, traits, and lifetimes, which give you the power +to define code that applies to multiple types. Chapter 11 is all about testing, +which is still necessary even with Rust's safety guarantees to ensure your +program's logic is correct. In Chapter 12, we'll build a subset of the +functionality of the `grep` command line tool that searches for text within +files and we'll use many of the concepts we discussed in the previous chapters. + +Chapter 13 explores closures and iterators: features of Rust that come from +functional programming languages. In Chapter 14, we'll explore more about Cargo +and talk about best practices for sharing your libraries with others. Chapter +15 discusses smart pointers provided by the standard library and the traits +that enable their functionality. + +In Chapter 16, we'll go through different models of concurrent programming and +how Rust helps you to program using multiple threads fearlessly. Chapter 17 +looks at how Rust idioms compare to Object Oriented Programming principles you +may be familiar with. + +Chapter 18 is a reference on patterns and pattern matching, which are powerful +ways of expressing ideas throughout Rust programs. Chapter 19 is a smorgasbord +of advanced topics that you might be interested in, including unsafe Rust and +more about lifetimes, traits, types, functions, and closures. + +In Chapter 20, we'll finish up with a project where we'll implement a low-level +multithreaded web server! + +Finally, there are some appendices. These contain useful information about the +language in a more reference-like format. + +In the end, there’s no wrong way to read a book: if you want to skip ahead, go +for it! You may have to jump back if you find things confusing. Do whatever +works for you. + +An important part of the process of learning Rust is learning how to read the +error messages that the compiler gives you. As such, we’ll be showing a lot of +code that doesn’t compile, and the error message the compiler will show you in +that situation. As such, if you pick a random example, it may not compile! +Please read the surrounding text to make sure that you didn’t happen to pick +one of the in-progress examples. + +## Contributing to the Book + +This book is open source. If you find an error, please don’t hesitate to file +an issue or send a pull request on GitHub at *https://github.com/rust-lang/book*. Please see CONTRIBUTING.md at *https://github.com/rust-lang/book/blob/master/CONTRIBUTING.md* for +more details. + From 8e3012f572ce5b767ce81e286ff97e29ee179c30 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 15:54:40 -0400 Subject: [PATCH 012/749] Carol's edits to the intro --- second-edition/nostarch/odt/chapter00.docx | Bin 67439 -> 51926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/second-edition/nostarch/odt/chapter00.docx b/second-edition/nostarch/odt/chapter00.docx index ca72be72719a30933df54839572ba32b65c63ea5..04962ccfa39f9c40dc564f5ee1e235e5d97720d5 100644 GIT binary patch literal 51926 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 xyR?67?Argf`Ov}r=+avL{vRjP3{U_7 literal 67439 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

yZBg+oC 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 RL;=YFCa(>E0sl3C{10im`CI@1 From 7d0ca3d9bec186bdcafde98b97418e25abd38a30 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 22 Mar 2018 15:57:51 -0400 Subject: [PATCH 013/749] Propagate edits everywhere --- second-edition/nostarch/chapter00.md | 208 +++++++++++---------- second-edition/src/ch00-00-introduction.md | 201 ++++++++++---------- 2 files changed, 212 insertions(+), 197 deletions(-) diff --git a/second-edition/nostarch/chapter00.md b/second-edition/nostarch/chapter00.md index b2890fd8ff..8ee563fdad 100644 --- a/second-edition/nostarch/chapter00.md +++ b/second-edition/nostarch/chapter00.md @@ -3,18 +3,18 @@ # Introduction -Welcome to “The Rust Programming Language,” an introductory book about Rust. +Welcome to *The Rust Programming Language*, an introductory book about Rust. -Rust is a programming language that helps you write faster, more reliable -software. High-level ergonomics and low-level control are often at odds with -each other in programming language design; Rust stands to challenge that. -Through balancing powerful technical capacity and a great developer experience, -Rust gives you the option to control low-level details (such as memory usage) -without all the hassle traditionally associated with such control. +The Rust programming language helps you write faster, more reliable software. +High-level ergonomics and low-level control are often at odds in programming +language design; Rust challenges that conflict. Through balancing powerful +technical capacity and a great developer experience, Rust gives you the option +to control low-level details (such as memory usage) without all the hassle +traditionally associated with such control. -## Who Rust is For +## Who Rust Is For -Rust is great for many people for a variety of reasons. Let’s discuss a few of +Rust is ideal for many people for a variety of reasons. Let’s look at a few of the most important groups. ### Teams of Developers @@ -24,9 +24,9 @@ developers with varying levels of systems programming knowledge. Low-level code is prone to a variety of subtle bugs, which in most other languages can only be caught through extensive testing and careful code review by experienced developers. In Rust, the compiler plays a gatekeeper role by refusing to -compile code with these kinds of bugs--including concurrency bugs. By working -alongside the compiler, the team can spend more time focusing on the logic of -the program rather than chasing down bugs. +compile code with these elusive bugs, including concurrency bugs. By working +alongside the compiler, the team can spend more time focusing on the program’s +logic rather than chasing down bugs. Rust also brings contemporary developer tools to the systems programming world: @@ -34,25 +34,25 @@ Rust also brings contemporary developer tools to the systems programming world: compiling, and managing dependencies painless and consistent across the Rust ecosystem. * Rustfmt ensures a consistent coding style across developers. -* The Rust Language Server powers IDE integration for code completion and - inline error messages. +* The Rust Language Server powers Integrated Development Environment (IDE) + integration for code completion and inline error messages. By using these and other tools in the Rust ecosystem, developers can be productive while writing systems-level code. ### Students -Rust is for students and people who are interested in learning about systems -concepts. Many people have learned about topics like operating systems -development through Rust. The community is happy to answer student questions. -Through efforts such as this book, the Rust teams want to make systems concepts -more accessible to more people, especially those getting started with +Rust is for students and those who are interested in learning about systems +concepts. Using Rust, many people have learned about topics like operating +systems development. The community is very welcoming and happy to answer +student questions. Through efforts such as this book, the Rust teams want to +make systems concepts more accessible to more people, especially those new to programming. ### Companies -Rust is used in production by hundreds of companies, large and small, for a -variety of tasks, such as command line tools, web services, DevOps tooling, +Hundreds of companies, large and small, use Rust in production for a variety of +tasks. Those tasks include command line tools, web services, DevOps tooling, embedded devices, audio and video analysis and transcoding, cryptocurrencies, bioinformatics, search engines, internet of things applications, machine learning, and even major parts of the Firefox web browser. @@ -60,110 +60,118 @@ learning, and even major parts of the Firefox web browser. ### Open Source Developers Rust is for people who want to build the Rust programming language, community, -developer tools, and libraries. We’d love for you to contribute to the Rust +developer tools, and libraries. We’d love to have you contribute to the Rust language. ### People Who Value Speed and Stability -By speed, we mean both the speed of the programs that Rust lets you create and -the speed at which Rust lets you write them. The Rust compiler’s checks ensure -stability through feature additions and refactoring, as opposed to brittle -legacy code in languages without these checks that developers are afraid to -modify. By striving for zero-cost abstractions, higher level features that -compile to lower level code as fast as code written manually, Rust endeavors to -make safe code be fast code as well. - -This isn’t a complete list of everyone the Rust language hopes to support, but -these are some of the biggest stakeholders. Overall, Rust’s greatest ambition -is to take trade-offs that have been accepted by programmers for decades and -eliminate the dichotomy. Safety *and* productivity. Speed *and* ergonomics. -Give Rust a try, and see if its choices work for you. - -## Who This Book is For - -This book assumes that you’ve written code in some other programming language, -but doesn’t make any assumptions about which one. We’ve tried to make the -material broadly accessible to those from a wide variety of programming -backgrounds. We don’t spend a lot of time talking about what programming *is* -or how to think about it; someone new to programming entirely would be better -served by reading a book specifically providing an introduction to programming. +Rust is for people who crave speed and stability in a language. By speed, we +mean the speed of the programs that you can create with Rust and the speed at +which Rust lets you write them. The Rust compiler’s checks ensure stability +through feature additions and refactoring as opposed to brittle legacy code in +languages without these checks that developers are afraid to modify. By +striving for zero-cost abstractions, higher-level features that compile to +lower-level code as fast as code written manually, Rust endeavors to make safe +code be fast code as well. + +Although we’ve not provided a complete list of everyone the Rust language hopes +to support, those we have mentioned are some of the biggest stakeholders. +Overall, Rust’s greatest ambition is to eliminate the dichotomy of the +trade-offs that programmers have accepted for decades: safety *and* +productivity, speed *and* ergonomics. Give Rust a try, and see if its choices +work for you. + +## Who This Book Is For + +This book assumes that you’ve written code in another programming language but +doesn’t make any assumptions about which one. We’ve tried to make the material +broadly accessible to those from a wide variety of programming backgrounds. We +don’t spend a lot of time talking about what programming *is* or how to think +about it. If you’re entirely new to programming, you would be better served by +reading a book that specifically provides an introduction to programming. ## How to Use This Book -This book generally assumes that you’re reading it front-to-back, that is, -later chapters build on top of concepts in earlier chapters, and earlier -chapters may not dig into details on a topic, revisiting the topic in a later -chapter. - -There are two kinds of chapters in this book: concept chapters, and project -chapters. In concept chapters, you’ll learn about an aspect of Rust. In the -project chapters, we’ll build small programs together, applying what we’ve -learned so far. Chapters 2, 12, and 20 are project chapters; the rest are -concept chapters. - -Additionally, Chapter 2 is a hands-on introduction to Rust as a language. We’ll -cover concepts at a high level, and later chapters will go into them in detail. -If you’re the kind of person who likes to get their hands dirty right away, -Chapter 2 is great for that. If you’re *really* that kind of person, you may -even wish to skip over Chapter 3, which covers features that are very similar -to other programming languages, and go straight to Chapter 4 to learn about -Rust’s ownership system. By contrast, if you’re a particularly meticulous -learner who prefers to learn every detail before moving onto the next, you may -want to skip Chapter 2 and go straight to Chapter 3. +In general, this book assumes that you’re reading it in sequence from front to +back. Later chapters build on concepts in earlier chapters, and earlier +chapters might not delve into details on a topic; we typically revisit the +topic in a later chapter. + +You’ll find two kinds of chapters in this book: concept chapters and project +chapters. In concept chapters, you’ll learn about an aspect of Rust. In project +chapters, we’ll build small programs together, applying what you’ve learned so +far. Chapters 2, 12, and 20 are project chapters; the rest are concept chapters. + +Additionally, Chapter 2 is a hands-on introduction to the Rust language. We’ll +cover concepts at a high level, and later chapters will provide additional +detail. If you want to get your hands dirty right away, Chapter 2 is the one +for that. At first, you might even want to skip Chapter 3, which covers Rust +features similar to other programming language features, and head straight to +Chapter 4 to learn about Rust’s ownership system. However, if you’re a +particularly meticulous learner who prefers to learn every detail before moving +onto the next, you might want to skip Chapter 2 and go straight to Chapter 3, +returning to Chapter 2 when you’d like to work on a project applying those +details. Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match` -expressions, and the `if let` control flow construct. Structs and enums are the -ways to make custom types in Rust. +expressions, and the `if let` control flow construct. You’ll use structs and +enums to make custom types in Rust. -In Chapter 7, you'll learn about Rust's module system and privacy for -organizing your code and its public API. Chapter 8 discusses some common -collection data structures provided by the standard library: vectors, strings, -and hash maps. Chapter 9 is all about Rust's error handling philosophy and -techniques. +In Chapter 7, you’ll learn about Rust’s module system and about privacy rules +for organizing your code and its public Application Programming Interface +(API). Chapter 8 discusses some common collection data structures that the +standard library provides, such as vectors, strings, and hash maps. Chapter 9 +explores Rust’s error handling philosophy and techniques. Chapter 10 digs into generics, traits, and lifetimes, which give you the power to define code that applies to multiple types. Chapter 11 is all about testing, -which is still necessary even with Rust's safety guarantees to ensure your -program's logic is correct. In Chapter 12, we'll build a subset of the -functionality of the `grep` command line tool that searches for text within -files and we'll use many of the concepts we discussed in the previous chapters. +which is still necessary even with Rust’s safety guarantees to ensure your +program’s logic is correct. In Chapter 12, we’ll build our own implementation +of a subset of functionality from the `grep` command line tool that searches +for text within files. For this, we’ll use many of the concepts we discussed in +the previous chapters. Chapter 13 explores closures and iterators: features of Rust that come from -functional programming languages. In Chapter 14, we'll explore more about Cargo -and talk about best practices for sharing your libraries with others. Chapter -15 discusses smart pointers provided by the standard library and the traits -that enable their functionality. +functional programming languages. In Chapter 14, we’ll examine Cargo in more +depth and talk about best practices for sharing your libraries with others. +Chapter 15 discusses smart pointers that the standard library provides and the +traits that enable their functionality. -In Chapter 16, we'll go through different models of concurrent programming and -how Rust helps you to program using multiple threads fearlessly. Chapter 17 -looks at how Rust idioms compare to Object Oriented Programming principles you -may be familiar with. +In Chapter 16, we’ll walk through different models of concurrent programming +and talk about how Rust helps you to program in multiple threads fearlessly. +Chapter 17 looks at how Rust idioms compare to object oriented programming +principles you might be familiar with. Chapter 18 is a reference on patterns and pattern matching, which are powerful -ways of expressing ideas throughout Rust programs. Chapter 19 is a smorgasbord -of advanced topics that you might be interested in, including unsafe Rust and -more about lifetimes, traits, types, functions, and closures. +ways of expressing ideas throughout Rust programs. Chapter 19 contains a +smorgasbord of advanced topics of interest, including unsafe Rust and more +about lifetimes, traits, types, functions, and closures. -In Chapter 20, we'll finish up with a project where we'll implement a low-level +In Chapter 20, we’ll complete a project in which we’ll implement a low-level multithreaded web server! -Finally, there are some appendices. These contain useful information about the -language in a more reference-like format. +Finally, some appendixes contain useful information about the language in a +more reference-like format. Appendix A covers Rust’s keywords. Appendix B +covers Rust’s operators and symbols. Appendix C covers derivable traits +provided by the standard library. Appendix D covers macros. -In the end, there’s no wrong way to read a book: if you want to skip ahead, go -for it! You may have to jump back if you find things confusing. Do whatever -works for you. +There is no wrong way to read this book: if you want to skip ahead, go for it! +You might have to jump back to earlier chapters if you experience any +confusion. But do whatever works for you. An important part of the process of learning Rust is learning how to read the -error messages that the compiler gives you. As such, we’ll be showing a lot of -code that doesn’t compile, and the error message the compiler will show you in -that situation. As such, if you pick a random example, it may not compile! -Please read the surrounding text to make sure that you didn’t happen to pick -one of the in-progress examples. +error messages the compiler displays: these will guide you toward working code. +As such, we’ll provide many examples of code that don’t compile along with the +error message the compiler will show you in each situation. Know that if you +enter and run a random example, it may not compile! Make sure you read the +surrounding text to see whether the example you’re trying to run is meant to +error. In most situations, we’ll lead you to the correct version of any code +that doesn’t compile. ## Contributing to the Book This book is open source. If you find an error, please don’t hesitate to file -an issue or send a pull request on GitHub at *https://github.com/rust-lang/book*. Please see CONTRIBUTING.md at *https://github.com/rust-lang/book/blob/master/CONTRIBUTING.md* for -more details. - +an issue or send a pull request on GitHub at +*https://github.com/rust-lang/book/*. Please see CONTRIBUTING.md at +*https://github.com/rust-lang/book/blob/master/CONTRIBUTING.md* for more +details. diff --git a/second-edition/src/ch00-00-introduction.md b/second-edition/src/ch00-00-introduction.md index 666f4e2ff7..89cdc18eae 100644 --- a/second-edition/src/ch00-00-introduction.md +++ b/second-edition/src/ch00-00-introduction.md @@ -1,17 +1,17 @@ # Introduction -Welcome to “The Rust Programming Language,” an introductory book about Rust. +Welcome to *The Rust Programming Language*, an introductory book about Rust. -Rust is a programming language that helps you write faster, more reliable -software. High-level ergonomics and low-level control are often at odds with -each other in programming language design; Rust stands to challenge that. -Through balancing powerful technical capacity and a great developer experience, -Rust gives you the option to control low-level details (such as memory usage) -without all the hassle traditionally associated with such control. +The Rust programming language helps you write faster, more reliable software. +High-level ergonomics and low-level control are often at odds in programming +language design; Rust challenges that conflict. Through balancing powerful +technical capacity and a great developer experience, Rust gives you the option +to control low-level details (such as memory usage) without all the hassle +traditionally associated with such control. -## Who Rust is For +## Who Rust Is For -Rust is great for many people for a variety of reasons. Let’s discuss a few of +Rust is ideal for many people for a variety of reasons. Let’s look at a few of the most important groups. ### Teams of Developers @@ -21,9 +21,9 @@ developers with varying levels of systems programming knowledge. Low-level code is prone to a variety of subtle bugs, which in most other languages can only be caught through extensive testing and careful code review by experienced developers. In Rust, the compiler plays a gatekeeper role by refusing to -compile code with these kinds of bugs--including concurrency bugs. By working -alongside the compiler, the team can spend more time focusing on the logic of -the program rather than chasing down bugs. +compile code with these elusive bugs, including concurrency bugs. By working +alongside the compiler, the team can spend more time focusing on the program’s +logic rather than chasing down bugs. Rust also brings contemporary developer tools to the systems programming world: @@ -31,25 +31,25 @@ Rust also brings contemporary developer tools to the systems programming world: compiling, and managing dependencies painless and consistent across the Rust ecosystem. * Rustfmt ensures a consistent coding style across developers. -* The Rust Language Server powers IDE integration for code completion and - inline error messages. +* The Rust Language Server powers Integrated Development Environment (IDE) + integration for code completion and inline error messages. By using these and other tools in the Rust ecosystem, developers can be productive while writing systems-level code. ### Students -Rust is for students and people who are interested in learning about systems -concepts. Many people have learned about topics like operating systems -development through Rust. The community is happy to answer student questions. -Through efforts such as this book, the Rust teams want to make systems concepts -more accessible to more people, especially those getting started with +Rust is for students and those who are interested in learning about systems +concepts. Using Rust, many people have learned about topics like operating +systems development. The community is very welcoming and happy to answer +student questions. Through efforts such as this book, the Rust teams want to +make systems concepts more accessible to more people, especially those new to programming. ### Companies -Rust is used in production by hundreds of companies, large and small, for a -variety of tasks, such as command line tools, web services, DevOps tooling, +Hundreds of companies, large and small, use Rust in production for a variety of +tasks. Those tasks include command line tools, web services, DevOps tooling, embedded devices, audio and video analysis and transcoding, cryptocurrencies, bioinformatics, search engines, internet of things applications, machine learning, and even major parts of the Firefox web browser. @@ -57,106 +57,113 @@ learning, and even major parts of the Firefox web browser. ### Open Source Developers Rust is for people who want to build the Rust programming language, community, -developer tools, and libraries. We’d love for you to contribute to the Rust +developer tools, and libraries. We’d love to have you contribute to the Rust language. ### People Who Value Speed and Stability -By speed, we mean both the speed of the programs that Rust lets you create and -the speed at which Rust lets you write them. The Rust compiler’s checks ensure -stability through feature additions and refactoring, as opposed to brittle -legacy code in languages without these checks that developers are afraid to -modify. By striving for zero-cost abstractions, higher level features that -compile to lower level code as fast as code written manually, Rust endeavors to -make safe code be fast code as well. - -This isn’t a complete list of everyone the Rust language hopes to support, but -these are some of the biggest stakeholders. Overall, Rust’s greatest ambition -is to take trade-offs that have been accepted by programmers for decades and -eliminate the dichotomy. Safety *and* productivity. Speed *and* ergonomics. -Give Rust a try, and see if its choices work for you. - -## Who This Book is For - -This book assumes that you’ve written code in some other programming language, -but doesn’t make any assumptions about which one. We’ve tried to make the -material broadly accessible to those from a wide variety of programming -backgrounds. We don’t spend a lot of time talking about what programming *is* -or how to think about it; someone new to programming entirely would be better -served by reading a book specifically providing an introduction to programming. +Rust is for people who crave speed and stability in a language. By speed, we +mean the speed of the programs that you can create with Rust and the speed at +which Rust lets you write them. The Rust compiler’s checks ensure stability +through feature additions and refactoring as opposed to brittle legacy code in +languages without these checks that developers are afraid to modify. By +striving for zero-cost abstractions, higher-level features that compile to +lower-level code as fast as code written manually, Rust endeavors to make safe +code be fast code as well. + +Although we’ve not provided a complete list of everyone the Rust language hopes +to support, those we have mentioned are some of the biggest stakeholders. +Overall, Rust’s greatest ambition is to eliminate the dichotomy of the +trade-offs that programmers have accepted for decades: safety *and* +productivity, speed *and* ergonomics. Give Rust a try, and see if its choices +work for you. + +## Who This Book Is For + +This book assumes that you’ve written code in another programming language but +doesn’t make any assumptions about which one. We’ve tried to make the material +broadly accessible to those from a wide variety of programming backgrounds. We +don’t spend a lot of time talking about what programming *is* or how to think +about it. If you’re entirely new to programming, you would be better served by +reading a book that specifically provides an introduction to programming. ## How to Use This Book -This book generally assumes that you’re reading it front-to-back, that is, -later chapters build on top of concepts in earlier chapters, and earlier -chapters may not dig into details on a topic, revisiting the topic in a later -chapter. - -There are two kinds of chapters in this book: concept chapters, and project -chapters. In concept chapters, you’ll learn about an aspect of Rust. In the -project chapters, we’ll build small programs together, applying what we’ve -learned so far. Chapters 2, 12, and 20 are project chapters; the rest are -concept chapters. - -Additionally, Chapter 2 is a hands-on introduction to Rust as a language. We’ll -cover concepts at a high level, and later chapters will go into them in detail. -If you’re the kind of person who likes to get their hands dirty right away, -Chapter 2 is great for that. If you’re *really* that kind of person, you may -even wish to skip over Chapter 3, which covers features that are very similar -to other programming languages, and go straight to Chapter 4 to learn about -Rust’s ownership system. By contrast, if you’re a particularly meticulous -learner who prefers to learn every detail before moving onto the next, you may -want to skip Chapter 2 and go straight to Chapter 3. +In general, this book assumes that you’re reading it in sequence from front to +back. Later chapters build on concepts in earlier chapters, and earlier +chapters might not delve into details on a topic; we typically revisit the +topic in a later chapter. + +You’ll find two kinds of chapters in this book: concept chapters and project +chapters. In concept chapters, you’ll learn about an aspect of Rust. In project +chapters, we’ll build small programs together, applying what you’ve learned so +far. Chapters 2, 12, and 20 are project chapters; the rest are concept chapters. + +Additionally, Chapter 2 is a hands-on introduction to the Rust language. We’ll +cover concepts at a high level, and later chapters will provide additional +detail. If you want to get your hands dirty right away, Chapter 2 is the one +for that. At first, you might even want to skip Chapter 3, which covers Rust +features similar to other programming language features, and head straight to +Chapter 4 to learn about Rust’s ownership system. However, if you’re a +particularly meticulous learner who prefers to learn every detail before moving +onto the next, you might want to skip Chapter 2 and go straight to Chapter 3, +returning to Chapter 2 when you’d like to work on a project applying those +details. Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match` -expressions, and the `if let` control flow construct. Structs and enums are the -ways to make custom types in Rust. +expressions, and the `if let` control flow construct. You’ll use structs and +enums to make custom types in Rust. -In Chapter 7, you'll learn about Rust's module system and privacy for -organizing your code and its public API. Chapter 8 discusses some common -collection data structures provided by the standard library: vectors, strings, -and hash maps. Chapter 9 is all about Rust's error handling philosophy and -techniques. +In Chapter 7, you’ll learn about Rust’s module system and about privacy rules +for organizing your code and its public Application Programming Interface +(API). Chapter 8 discusses some common collection data structures that the +standard library provides, such as vectors, strings, and hash maps. Chapter 9 +explores Rust’s error handling philosophy and techniques. Chapter 10 digs into generics, traits, and lifetimes, which give you the power to define code that applies to multiple types. Chapter 11 is all about testing, -which is still necessary even with Rust's safety guarantees to ensure your -program's logic is correct. In Chapter 12, we'll build a subset of the -functionality of the `grep` command line tool that searches for text within -files and we'll use many of the concepts we discussed in the previous chapters. +which is still necessary even with Rust’s safety guarantees to ensure your +program’s logic is correct. In Chapter 12, we’ll build our own implementation +of a subset of functionality from the `grep` command line tool that searches +for text within files. For this, we’ll use many of the concepts we discussed in +the previous chapters. Chapter 13 explores closures and iterators: features of Rust that come from -functional programming languages. In Chapter 14, we'll explore more about Cargo -and talk about best practices for sharing your libraries with others. Chapter -15 discusses smart pointers provided by the standard library and the traits -that enable their functionality. +functional programming languages. In Chapter 14, we’ll examine Cargo in more +depth and talk about best practices for sharing your libraries with others. +Chapter 15 discusses smart pointers that the standard library provides and the +traits that enable their functionality. -In Chapter 16, we'll go through different models of concurrent programming and -how Rust helps you to program using multiple threads fearlessly. Chapter 17 -looks at how Rust idioms compare to Object Oriented Programming principles you -may be familiar with. +In Chapter 16, we’ll walk through different models of concurrent programming +and talk about how Rust helps you to program in multiple threads fearlessly. +Chapter 17 looks at how Rust idioms compare to object oriented programming +principles you might be familiar with. Chapter 18 is a reference on patterns and pattern matching, which are powerful -ways of expressing ideas throughout Rust programs. Chapter 19 is a smorgasbord -of advanced topics that you might be interested in, including unsafe Rust and -more about lifetimes, traits, types, functions, and closures. +ways of expressing ideas throughout Rust programs. Chapter 19 contains a +smorgasbord of advanced topics of interest, including unsafe Rust and more +about lifetimes, traits, types, functions, and closures. -In Chapter 20, we'll finish up with a project where we'll implement a low-level +In Chapter 20, we’ll complete a project in which we’ll implement a low-level multithreaded web server! -Finally, there are some appendices. These contain useful information about the -language in a more reference-like format. +Finally, some appendixes contain useful information about the language in a +more reference-like format. Appendix A covers Rust’s keywords. Appendix B +covers Rust’s operators and symbols. Appendix C covers derivable traits +provided by the standard library. Appendix D covers macros. -In the end, there’s no wrong way to read a book: if you want to skip ahead, go -for it! You may have to jump back if you find things confusing. Do whatever -works for you. +There is no wrong way to read this book: if you want to skip ahead, go for it! +You might have to jump back to earlier chapters if you experience any +confusion. But do whatever works for you. An important part of the process of learning Rust is learning how to read the -error messages that the compiler gives you. As such, we’ll be showing a lot of -code that doesn’t compile, and the error message the compiler will show you in -that situation. As such, if you pick a random example, it may not compile! -Please read the surrounding text to make sure that you didn’t happen to pick -one of the in-progress examples. +error messages the compiler displays: these will guide you toward working code. +As such, we’ll provide many examples of code that don’t compile along with the +error message the compiler will show you in each situation. Know that if you +enter and run a random example, it may not compile! Make sure you read the +surrounding text to see whether the example you’re trying to run is meant to +error. In most situations, we’ll lead you to the correct version of any code +that doesn’t compile. ## Contributing to the Book From ac549445746f3c29481f355ec3358701f5c39b04 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 23 Mar 2018 11:46:23 +0100 Subject: [PATCH 014/749] index.md: more prominent link to second edition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://doc.rust-lang.org/ links to https://doc.rust-lang.org/book/. From there, most people looking for the book’s content likely want to find the link to the second edition. This is hopefully more obvious than "read here" at the end of a paragraph. --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 359267d84b..381323adb1 100644 --- a/index.md +++ b/index.md @@ -1,7 +1,7 @@ # The Rust Programming Language -The current edition of "The Rust Programming Language" is the second -edition, which you can [read here](second-edition/index.html). +[The second edition of "The Rust Programming Language"](second-edition/index.html) +is the current edition. The source for all editions lives [on GitHub](https://github.com/rust-lang/book). Please open issues with any questions, concerns, or tweaks. From 60f22d98fe8ee0ce04824a8536a95f12ba118027 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sat, 24 Mar 2018 19:32:36 -0400 Subject: [PATCH 015/749] Edits in response to nostarch comments --- second-edition/src/appendix-01-keywords.md | 70 +-- second-edition/src/appendix-02-operators.md | 20 +- .../src/appendix-03-derivable-traits.md | 346 +++++++------- second-edition/src/appendix-04-macros.md | 440 +++++++++--------- 4 files changed, 471 insertions(+), 405 deletions(-) diff --git a/second-edition/src/appendix-01-keywords.md b/second-edition/src/appendix-01-keywords.md index cc93c4c0fa..319f6e3751 100644 --- a/second-edition/src/appendix-01-keywords.md +++ b/second-edition/src/appendix-01-keywords.md @@ -1,50 +1,60 @@ ## Appendix A: Keywords -The following keywords are reserved by the Rust language and may not be used as -identifiers such as names of functions, variables, parameters, struct fields, -modules, crates, constants, macros, static values, attributes, types, traits, -or lifetimes. +The following is a list of keywords that are reserved for current or future use +by the Rust language. As such, these may not be used as identifiers, such as +names of functions, variables, parameters, struct fields, modules, crates, +constants, macros, static values, attributes, types, traits, or lifetimes. ### Keywords Currently in Use -* `as` - primitive casting, disambiguating the specific trait containing an - item, or renaming items in `use` and `extern crate` statements +* `as` - perform primitive casting, disambiguate the specific trait + containing an item, or rename items in `use` and `extern crate` statements * `break` - exit a loop immediately -* `const` - constant items and constant raw pointers +* `const` - define constant items or constant raw pointers * `continue` - continue to the next loop iteration -* `crate` - external crate linkage or a macro variable representing the crate +* `crate` - link an external crate or a macro variable representing the crate in which the macro is defined * `else` - fallback for `if` and `if let` control flow constructs -* `enum` - defining an enumeration -* `extern` - external crate, function, and variable linkage +* `enum` - define an enumeration +* `extern` - link an external crate, function, or variable * `false` - Boolean false literal -* `fn` - function definition and function pointer type -* `for` - iterator loop, part of trait impl syntax, and higher-ranked lifetime - syntax -* `if` - conditional branching -* `impl` - inherent and trait implementation block +* `fn` - define a function or the function pointer type +* `for` - loop over items from an iterator, implement a trait, or specify a + higher-ranked lifetime +* `if` - branch based on the result of a conditional expression +* `impl` - implement inherent or trait functionality * `in` - part of `for` loop syntax -* `let` - variable binding -* `loop` - unconditional, infinite loop -* `match` - pattern matching -* `mod` - module declaration -* `move` - makes a closure take ownership of all its captures -* `mut` - denotes mutability in references, raw pointers, and pattern bindings -* `pub` - denotes public visibility in struct fields, `impl` blocks, and modules -* `ref` - by-reference binding +* `let` - bind a variable +* `loop` - loop unconditionally +* `match` - match a value to patterns +* `mod` - define a module +* `move` - make a closure take ownership of all its captures +* `mut` - denote mutability in references, raw pointers, or pattern bindings +* `pub` - denote public visibility in struct fields, `impl` blocks, or modules +* `ref` - bind by reference * `return` - return from function -* `Self` - type alias for the type implementing a trait +* `Self` - a type alias for the type implementing a trait * `self` - method subject or current module * `static` - global variable or lifetime lasting the entire program execution -* `struct` - structure definition +* `struct` - define a structure * `super` - parent module of the current module -* `trait` - trait definition +* `trait` - define a trait * `true` - Boolean true literal -* `type` - type alias and associated type definition -* `unsafe` - denotes unsafe code, functions, traits, and implementations +* `type` - define a type alias or associated type +* `unsafe` - denote unsafe code, functions, traits, or implementations * `use` - import symbols into scope -* `where` - type constraint clauses -* `while` - conditional loop +* `where` - denote clauses that constrain a type +* `while` - loop conditionally based on the result of an expression + + + ### Keywords Reserved for Future Use diff --git a/second-edition/src/appendix-02-operators.md b/second-edition/src/appendix-02-operators.md index f46f4877e5..56f10ea915 100644 --- a/second-edition/src/appendix-02-operators.md +++ b/second-edition/src/appendix-02-operators.md @@ -1,5 +1,13 @@ ## Appendix B: Operators and Symbols + + + +This appendix is a glossary of Rust's syntax, including operators and other +symbols that appear by themselves or in the context of paths, generics, trait +bounds, macros, attributes, comments, tuples, and brackets. + ### Operators The following lists the operators in Rust, an example of how the operator would @@ -7,6 +15,9 @@ appear in context, a short explanation, and whether that operator is overloadable. If an operator is overloadable, the relevant trait to use to overload that operator is listed. + + * `!` (`ident!(…)`, `ident!{…}`, `ident![…]`): denotes macro expansion. * `!` (`!expr`): bitwise or logical complement. Overloadable (`Not`). * `!=` (`var != expr`): nonequality comparison. Overloadable (`PartialEq`). @@ -33,7 +44,6 @@ overload that operator is listed. * `..` (`..`, `expr..`, `..expr`, `expr..expr`): right-exclusive range literal. * `..` (`..expr`): struct literal update syntax. * `..` (`variant(x, ..)`, `struct_type { x, .. }`): “and the rest” pattern binding. -* `...` (`...expr`, `expr...expr`) *in an expression*: inclusive range expression. * `...` (`expr...expr`) *in a pattern*: inclusive range pattern. * `/` (`expr / expr`): arithmetic division. Overloadable (`Div`). * `/=` (`var /= expr`): arithmetic division and assignment. Overloadable (`DivAssign`). @@ -66,6 +76,14 @@ overload that operator is listed. ### Non-operator Symbols + + + +The following lists all non-letters that don't function as operators; that is, +they don't behave like a function or method call. + #### Standalone Syntax * `'ident`: named lifetime or loop label diff --git a/second-edition/src/appendix-03-derivable-traits.md b/second-edition/src/appendix-03-derivable-traits.md index 9edb6f4745..01b9011a06 100644 --- a/second-edition/src/appendix-03-derivable-traits.md +++ b/second-edition/src/appendix-03-derivable-traits.md @@ -1,63 +1,31 @@ -# C - Derivable Traits - -In various places in the book, we discussed the `derive` attribute that is -applied to a struct or enum. This attribute generates code that implements a -trait on the annotated type with a default implementation. In this example, the -`#[derive(Debug)]` attribute implements the `Debug` trait for the `Point` -struct: - -```rust -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} -``` - -The code that the compiler generates for the implementation of `Debug` is -similar to this code: - -```rust -# struct Point { -# x: i32, -# y: i32, -# } -# -impl ::std::fmt::Debug for Point { - fn fmt(&self, __arg_0: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { - match *self { - Point { x: ref __self_0_0, y: ref __self_0_1 } => { - let mut builder = __arg_0.debug_struct("Point"); - let _ = builder.field("x", &&(*__self_0_0)); - let _ = builder.field("y", &&(*__self_0_1)); - builder.finish() - } - } - } -} -``` - -The generated code implements sensible default behavior for the `Debug` trait’s -`fmt` function: a `match` expression destructures a `Point` instance into its -field values. Then it builds up a string containing the struct’s name and each -field’s name and value. This means we’re able to use debug formatting on a -`Point` instance to see what value each field has. - -The generated code isn’t particularly easy to read because it’s only for the -compiler to consume, rather than for programmers to read! The `derive` -attribute and the default implementation of `Debug` has saved us all of the -work of writing this code for every struct or enum that we want to be able to -print using debug formatting. - -The `derive` attribute has default implementations for the following traits -provided by the standard library. If you want different behavior than what the -`derive` attribute provides, consult the standard library documentation for -each trait for the details needed for manual implementation of the traits. - -## Standard Library Traits that Can Be Derived - -The following sections list all of the traits in the standard library that can -be used with `derive`. Each section covers: +## C - Derivable Traits + +In various places in the book, we've discussed the `derive` attribute +that you can apply to a struct or enum definition. + + + + + + + +The `derive` attribute generates code that will implement a trait with its own +default implementation, on the type you have annotated with the `derive` +syntax. In this appendix, we provide a reference of all of the traits in the +standard library that can be used with `derive`. Each section covers: - What operators and methods deriving this trait will enable - What the implementation of the trait provided by `derive` does @@ -65,148 +33,198 @@ be used with `derive`. Each section covers: - The conditions in which you’re allowed or not allowed to implement the trait - Examples of operations that require the trait +If you want different behavior than that provided by the `derive` attribute, +consult the standard library documentation for each trait for details of how to +manually implement them. + + + +The rest of the traits defined in the standard library can’t be implemented on +your types using `derive`. These traits don’t have sensible default behavior, +so it's up to you to implement them in the way that makes sense for what you're +trying to accomplish. + +An example of a trait that can’t be derived is `Display`, which handles +formatting for end users. You should always put thought into the appropriate +way to display a type to an end user: what parts of the type should an end user +be allowed to see? What parts would they find relevant? What format of the data +would be most relevant to them? The Rust compiler doesn’t have this insight and +so can't provide appropriate default behavior for you. + +The list of derivable traits provided in this appendix is not comprehensive: +libraries can implement `derive` for their own traits! In this way, the list of +traits you can use `derive` with is truly open-ended. Implementing `derive` +involves using a procedural macro, which is covered in Appendix D, “Macros.” + ### `Debug` for Programmer Output The `Debug` trait enables debug formatting in format strings, indicated by adding `:?` within `{}` placeholders. -The `Debug` trait signifies that instances of a type may be printed by -programmers in order to debug their programs by inspecting an instance of a -type at a particular point in a program’s execution. +The `Debug` trait allows you to print instances of a type for debugging +purposes, so you and other programmers using your type can inspect an instance +at a particular point in a program’s execution. -An example of when `Debug` is required is the `assert_eq!` macro, which prints -the values of the instances given as arguments if the equality assertion fails -so that programmers can see why the two instances weren’t equal. +`Debug` is required, for example, in use of the `assert_eq!` macro, which +prints the values of instances given as arguments if the equality assertion +fails so programmers can see why the two instances weren’t equal. ### `PartialEq` and `Eq` for Equality Comparisons -The `PartialEq` trait signifies that instances of a type can be compared to -each other for equality, and enables use of the `==` and `!=` operators. - -Deriving `PartialEq` implements the `eq` method. When derived on structs, two -instances are equal if all fields are equal, and not equal if any fields are -not equal. When derived on enums, each variant is equal to itself and not equal -to the other variants. - -An example of when `PartialEq` is required is the `assert_eq!` macro, which -needs to be able to compare two instances of a type for equality. - -The `Eq` trait doesn’t have any methods. It only signals that for every value -of the annotated type, the value is equal to itself. The `Eq` trait can only be -applied to types that also implement `PartialEq`. An example of types that -implements `PartialEq` but that cannot implement `Eq` are floating point number -types: the implementation of floating point numbers says that two instances of -the not-a-number value, `NaN`, are not equal to each other. + + + +The `PartialEq` trait allows you to compare instances of a type to check for +equality, and enables use of the `==` and `!=` operators. + +Deriving `PartialEq` implements the `eq` method. When `PartialEq` is derived on +structs, two instances are equal only if *all* fields are equal, and not equal +if any fields are not equal. When derived on enums, each variant is equal to +itself and not equal to the other variants. + +`PartialEq` is required, for example, with the use of the `assert_eq!` macro, +which needs to be able to compare two instances of a type for equality. + +The `Eq` trait has no methods. Its purpose is to signal that for every value of +the annotated type, the value is equal to itself. The `Eq` trait can only be +applied to types that also implement `PartialEq`, though not all types that +implement `PartialEq` can implement `Eq`. One example of this is floating point +number types: the implementation of floating point numbers says that two +instances of the not-a-number value, `NaN`, are not equal to each other. An example of when `Eq` is required is for keys in a `HashMap` so that the `HashMap` can tell whether two keys are the same. ### `PartialOrd` and `Ord` for Ordering Comparisons -The `PartialOrd` trait signifies that instances of a type can be compared to -each other to see which is larger than the other for sorting purposes. A type -that implements `PartialOrd` may be used with the `<`, `>`, `<=`, and `>=` -operators. The `PartialOrd` trait can only be applied to types that also -implement `PartialEq`. +The `PartialOrd` trait allows you to compare instances of a type for sorting +purposes. A type that implements `PartialOrd` may be used with the `<`, `>`, +`<=`, and `>=` operators. The `PartialOrd` trait can only be applied to types +that also implement `PartialEq`. Deriving `PartialOrd` implements the `partial_cmp` method, which returns an -`Option` that may be `None` if comparing the given values does not -produce an ordering. When derived on structs, two instances of the struct are -compared by comparing the value in each field in the order in which the fields -appear in the struct definition. When derived on enums, variants of the enum -declared earlier in the enum definition are greater than the variants listed -later. - -An example of when `PartialOrd` is required is the `gen_range` method in the +`Option` that will be `None` when the values given do not produce an +ordering. An example of a value that doesn't produce an ordering, even though +most values of that type can be compared, is the not-a-number (`NaN`) floating +point value. Calling `partial_cmp` with any floating point number and the `NaN` +floating point value will return `None`. + + + + +When derived on structs, `PartialOrd` compares two instances by comparing the +value in each field in the order in which the fields appear in the struct +definition. When derived on enums, variants of the enum declared earlier in the +enum definition are considered greater than the variants listed later. + +`PartialOrd` is required, for example, for the `gen_range` method from the `rand` crate that generates a random value in the range specified by a low value and a high value. -The `Ord` trait signifies that for any two value of the annotated type, a valid -ordering exists. The `Ord` trait implements the `cmp` method, which returns an -`Ordering` rather than an `Option` because a valid ordering will -always be possible. The `Ord` trait can only be applied to types that also -implement `PartialOrd` and `Eq` (and `Eq` requires `PartialEq`). When derived -on structs and enums, `cmp` behaves the same way as the derived implementation -for `partial_cmp` does with `PartialOrd`. +The `Ord` trait allows you to know that for any two values of the annotated +type, a valid ordering will exist. The `Ord` trait implements the `cmp` method, +which returns an `Ordering` rather than an `Option` because a valid +ordering will always be possible. The `Ord` trait can only be applied to types +that also implement `PartialOrd` and `Eq` (and `Eq` requires `PartialEq`). When +derived on structs and enums, `cmp` behaves the same way as the derived +implementation for `partial_cmp` does with `PartialOrd`. An example of when `Ord` is required is when storing values in a `BTreeSet`, a data structure that stores data based on the sort order of the values. ### `Clone` and `Copy` for Duplicating Values -The `Clone` trait signifies there is a way to explicitly create a duplicate of -a value, and the duplication process might involve running arbitrary code. -Deriving `Clone` implements the `clone` method. When derived, the -implementation of `clone` for the whole type calls `clone` on each of the parts -of the type, so all of the fields or values in the type must also implement -`Clone` to derive `Clone`. + + + +The `Clone` trait allows you to explicitly create a deep copy of a value, and +the duplication process might involve running arbitrary code and copying heap +data. See the "Ways Variables and Data Interact: Clone" section in Chapter 4 +for more information on `Clone`. + +Deriving `Clone` implements the `clone` method which, when implemented for the +whole type, calls `clone` on each of the parts of the type. This means all of +the fields or values in the type must also implement `Clone` to derive `Clone`. An example of when `Clone` is required is when calling the `to_vec` method on a -slice containing instances of some type. The slice doesn’t own the instances -but the vector returned from `to_vec` will need to own its instances, so the -implementation of `to_vec` calls `clone` on each item. Thus, the type stored in -the slice must implement `Clone`. - -The `Copy` trait signifies that a value can be duplicated by only copying bits; -no other code is necessary. The `Copy` trait does not define any methods to -prevent programmers from overloading those methods violating the assumption -that no arbitrary code is being run. You can derive `Copy` on any type whose -parts all implement `Copy`. The `Copy` trait can only be applied to types that -also implement `Clone`, as a type that implements `Copy` has a trivial -implementation of `Clone`, doing the same thing as `Copy`. - -`Copy` is rarely required; when types implement `Copy`, there are optimizations -that can be applied and the code becomes nicer because you don’t have to call -`clone`. Everything possible with `Copy` can also be accomplished with `Clone`, -but the code might be slower or have to use `clone` in places. +slice. The slice doesn’t own the type instances it contains, but the vector +returned from `to_vec` will need to own its instances, so `to_vec` calls +`clone` on each item. Thus, the type stored in the slice must implement `Clone`. + +The `Copy` trait allows you to duplicate a value by only copying bits stored on +the stack; no abritrary code is necessary. See the "Stack-Only Data: Copy" +section in Chapter 4 for more information on `Copy`. + + + + +The `Copy` trait does not define any methods to prevent programmers from +overloading those methods violating the assumption that no arbitrary code is +being run. That way, all programmers can assume that copying a value will be +very fast. + + + + +You can derive `Copy` on any type whose parts all implement `Copy`. The `Copy` +trait can only be applied to types that also implement `Clone`, as a type that +implements `Copy` has a trivial implementation of `Clone`, doing the same thing +as `Copy`. + +`Copy` is rarely required; types implement `Copy` have optimizations available +mean you don't have to call `clone`, making the code more concise. + + + + +Everything possible with `Copy` can also be accomplished with `Clone`, but the +code might be slower or have to use `clone` in places. ### `Hash` for Mapping a Value to a Value of Fixed Size -The `Hash` trait signifies there is a way to take an instance of a type that -takes up an arbitrary amount of size and map that instance to a value of fixed -size by using a hash function. Deriving `Hash` implements the `hash` method. -When derived, the implementation of `hash` for the whole type combines the -result of calling `hash` on each of the parts of the type, so all of the fields -or values in the type must also implement `Hash` to derive `Hash`. +The `Hash` trait allows you to take an instance of a type of arbitrary size and +map that instance to a value of fixed size, using a hash function. Deriving +`Hash` implements the `hash` method. The derived implementation of the `hash` +method combines the result of calling `hash` on each of the parts of the type, +meaning all fields or values must also implement `Hash` to derive `Hash`. -An example of when `Hash` is required is for keys in a `HashMap` so that the -`HashMap` can store data efficiently. +An example of when `Hash` is required is in storing keys in a `HashMap`, in +order to store data efficiently. ### `Default` for Default Values -The `Default` trait signifies there is a way to create a default value for a -type. Deriving `Default` implements the `default` method. When derived, the -implementation of `Default` for the whole type calls the `default` method on -each of the parts of the type, so all of the fields or values in the type must -also implement `Default` to derive `Default.` +The `Default` trait allows you to create a default value for a type. Deriving +`Default` implements the `default` method. The derived implementation of the +`default` method calls the `default` method on each part of the type, meaning +all fields or values in the type must also implement `Default` to derive +`Default.` -A common use of `Default::default` is in combination with the struct update +`Default::default` is commonly used in combination with the struct update syntax discussed in the “Creating Instances From Other Instances With Struct Update Syntax” section in Chapter 5. You can customize a few fields of a struct -and then use the default values for the rest by using `..Default::default()`. +and then set and use a default value for the rest of the fields by using +`..Default::default()`. -An example of when `Default` is required is the `unwrap_or_default` method on -`Option` instances. If the `Option` is `None`, the `unwrap_or_default` +`Default` is required when, for example, you use the `unwrap_or_default` method +on `Option` instances. If the `Option` is `None`, the `unwrap_or_default` method will return the result of `Default::default` for the type `T` stored in the `Option`. - -## Standard Library Traits that Can’t Be Derived - -The rest of the traits defined in the standard library can’t be implemented on -your types using `derive`. These traits don’t have a sensible default behavior -they could have, so you are required to implement them in the way that makes -sense for what you are trying to accomplish with your code. - -An example of a trait that can’t be derived is `Display`, which handles -formatting of a type for end users of your programs. You should put thought -into the appropriate way to display a type to an end user: what parts of the -type should an end user be allowed to see? What parts would they find relevant? -What format of the data would be most relevant to them? The Rust compiler -doesn’t have this insight into your application, so you must provide it. - -## Making Custom Traits Derivable - -The above list is not comprehensive, however: libraries can implement `derive` -for their own types! In this way, the list of traits you can use `derive` with -is truly open-ended. Implementing `derive` involves using a procedural macro, -which is covered in the next appendix, “Macros.” diff --git a/second-edition/src/appendix-04-macros.md b/second-edition/src/appendix-04-macros.md index f16673a132..929a3c96c0 100644 --- a/second-edition/src/appendix-04-macros.md +++ b/second-edition/src/appendix-04-macros.md @@ -1,84 +1,85 @@ -# D - Macros +## Appendix D: Macros -We’ve used macros, such as `println!`, throughout this book. This appendix will -explain: +We’ve used macros like `println!` throughout this book, but haven't fully +explored what a macro is and how it works. This appendix will explain: - What macros are and how they differ from functions - How to define a declarative macro to do metaprogramming - How to define a procedural macro to create custom `derive` traits -Macros are covered in an appendix because they’re still evolving. They have -changed and will change more than the rest of the language and standard library -since Rust 1.0, so this section will likely get out of date more than the rest -of this book. The code shown here will still continue to work due to Rust’s +We're covering the details of macros in an appendix because they’re still +evolving in Rust. Macros have changed and, in the near future, will change at a +quicker rate than the rest of the language and standard library since Rust 1.0, +so this section is more likely to date than the rest of the book. The code +shown here will still continue to work with future versions, due to Rust’s stability guarantees, but there may be additional capabilities or easier ways -to write macros that aren’t available at the time of this publication. +to write macros that weren't available at the time of this publication. Bear +that in mind if you try to implement anything from this appendix. -## Macros are More Flexible and Complex than Functions +### The Difference Between Macros and Functions -Fundamentally, macros are a way of writing code that writes other code, which -is known as *metaprogramming*. In the previous appendix, we discussed the -`derive` attribute, which generates an implementation of various traits for -you. We’ve also used the `println!` and `vec!` macros. All of these macros -*expand* to produce more code than what you’ve written in your source code. +Fundamentally, macros are a way of writing code that writes other code, known +as *metaprogramming*. In Appendix C, we discussed the `derive` attribute, which +generates an implementation of various traits for you. We’ve also used the +`println!` and `vec!` macros throughout the book. All of these macros *expand* +to produce more code than the code you’ve written yourself. -Metaprogramming is useful to reduce the amount of code you have to write and +Metaprogramming is useful for reducing the amount of code you have to write and maintain, which is also one of the roles of functions. However, macros have -some additional powers that functions don’t have, as we discussed in Chapter 1. +some additional powers that functions don’t have. + A function signature has to declare the number and type of parameters the -function has. Macros can take a variable number of parameters: we can call -`println!("hello")` with one argument, or `println!("hello {}", name)` with two -arguments. Also, macros are expanded before the compiler interprets the meaning -of the code, so a macro can, for example, implement a trait on a given type, -whereas a function can’t because a function gets called at runtime and a trait -needs to be implemented at compile time. - -The downside to implementing a macro rather than a function is that macro -definitions are more complex than function definitions. You’re writing Rust -code that writes Rust code, and macro definitions are generally more difficult -to read, understand, and maintain than function definitions. +function has. Macros, on the other hand, can take a variable number of +parameters: we can call `println!("hello")` with one argument, or +`println!("hello {}", name)` with two arguments. Also, macros are expanded +before the compiler interprets the meaning of the code, so a macro can, for +example, implement a trait on a given type. A function can’t, because it gets +called at runtime and a trait needs to be implemented at compile time. + +The downside to implementing a macro over a function is that macro definitions +are more complex than function definitions becuase you’re writing Rust code +that writes Rust code. Due to this indirection, macro definitions are generally +more difficult to read, understand, and maintain than function definitions. Another difference between macros and functions is that macro definitions aren’t namespaced within modules like function definitions are. In order to -prevent unexpected name clashes when using a crate, when bringing an external -crate into the scope of your project, you have to explicitly bring the macros -into the scope of your project as well with the `#[macro_use]` annotation. This -example would bring all the macros defined in the `serde` crate into the scope -of the current crate: +prevent unexpected name clashes when using external crates, you have to +explicitly bring the macros into the scope of your project at the same time as +bringing the external crate into scope, using the `#[macro_use]` annotation. +The following example would bring all the macros defined in the `serde` crate +into the scope of the current crate: ```rust,ignore #[macro_use] extern crate serde; ``` -If `extern crate` also brought macros into scope by default, you wouldn’t be -allowed to use two crates that happened to define macros with the same name. In -practice this conflict doesn’t come up much, but the more crates you use, the -more likely it is. +If `extern crate` was able to bring macros into scope by default without this +explicit annotation, you would be prevented from using two crates that happened +to define macros with the same name. In practice this conflict doesn’t come up +much, but the more crates you use, the more likely it is. One last important difference between macros and functions: macros must be -defined or brought into scope before they’re called in a file. Unlike -functions, where we can define a function at the bottom of a file yet call it -at the top, we always have to define macros before we’re able to call them. - -## Declarative Macros with `macro_rules!` for General Metaprogramming - -The first form of macros in Rust, and the one that’s most widely used, is -called *declarative macros*. These are also sometimes referred to as *macros by -example*, *`macro_rules!` macros*, or just plain *macros*. At their core, -declarative macros allow you to write something similar to a Rust `match` -expression. As discussed in Chapter 6, `match` expressions are control -structures that take an expression, compare the resulting value of the -expression to patterns, and then choose the code specified with the matching -pattern when the program runs. Macros also have a value that is compared to -patterns that have code associated with them, but the value is the literal Rust -code passed to the macro, the patterns match the structure of that source code, -and the code associated with each pattern is the code that is generated to -replace the code passed to the macro. This all happens during compilation. +defined or brought into scope *before* they’re called in a file, whereas +functions can be defined anywhere and called anywhere. + +### Declarative Macros with `macro_rules!` for General Metaprogramming + +The most widely used form of macros in Rust are *declarative macros*. These are +also sometimes referred to as *macros by example*, *`macro_rules!` macros*, or +just plain *macros*. At their core, declarative macros allow you to write +something similar to a Rust `match` expression. As discussed in Chapter 6, +`match` expressions are control structures that take an expression, compare the +resulting value of the expression to patterns, and then run the code associated +with the matching pattern. Macros also compare a value to patterns that have +code associated with them, but in this case the value is the literal Rust +source code passed to the macro, the patterns are compared with the structure +of that source code, and the code associated with each pattern is the code that +replaces the code passed to the macro. This all happens during compilation. To define a macro, you use the `macro_rules!` construct. Let’s explore how to use `macro_rules!` by taking a look at how the `vec!` macro is defined. Chapter -8 covered how we can use the `vec!` macro to create a new vector that holds +8 covered how we can use the `vec!` macro to create a new vector with particular values. For example, this macro creates a new vector with three integers inside: @@ -86,12 +87,12 @@ integers inside: let v: Vec = vec![1, 2, 3]; ``` -We can also use `vec!` to make a vector of two integers or a vector of five -string slices. Because we don’t know the number or type of values, we can’t -define a function that is able to create a new vector with the given elements -like `vec!` can. +We could also use the `vec!` macro to make a vector of two integers or a vector +of five string slices---we wouldn't be able to use a function to do the same +because we wouldn’t know the number or type of values up front. -Let’s take a look at a slightly simplified definition of the `vec!` macro: +Let’s take a look at a slightly simplified definition of the `vec!` macro in +Listing AD-1: ```rust #[macro_export] @@ -108,45 +109,61 @@ macro_rules! vec { } ``` -> Note: the actual definition of the `vec!` macro in the standard library also -> has code to pre-allocate the correct amount of memory up-front. That code -> is an optimization that we’ve chosen not to include here for simplicity. +Listing AD-1: A simplified version of the `vec!` macro definition + +> Note: the actual definition of the `vec!` macro in the standard library +> includes code to pre-allocate the correct amount of memory up-front. That +> code is an optimization that we’ve chosen not to include here to make the +> example simpler. The `#[macro_export]` annotation indicates that this macro should be made -available when other crates import the crate in which we’re defining this -macro. Without this annotation, even if someone depending on this crate uses -the `#[macro_use]` annotation, this macro would not be brought into scope. - -Macro definitions start with `macro_rules!` and the name of the macro we’re -defining without the exclamation mark, which in this case is `vec`. This is -followed by curly brackets denoting the body of the macro definition. - -Inside the body is a structure similar to the structure of a `match` -expression. This macro definition has one arm with the pattern `( $( $x:expr -),* )`, followed by `=>` and the block of code associated with this pattern. If -this pattern matches, then the block of code will be emitted. Given that this +available whenever the crate in which we’re defining the macro is imported. +Without this annotation, even if someone depending on this crate uses the +`#[macro_use]` annotation, the macro would not be brought into scope. + +We then start the macro definition with `macro_rules!` and the name of the +macro we’re defining *without* the exclamation mark. The name---in this case +`vec`---is followed by curly brackets denoting the body of the macro definition. + +The structure in the `vec!` body is similar to the structure of a `match` +expression. Here we have one arm with the pattern `( $( $x:expr ),* )`, +followed by `=>` and the block of code associated with this pattern. If the +pattern matches, the associated block of code will be emitted. Given that this is the only pattern in this macro, there’s only one valid way to match; any other will be an error. More complex macros will have more than one arm. -The pattern syntax valid in macro definitions is different than the pattern -syntax covered in Chapter 18 because the patterns are for matching against Rust -code structure rather than values. Let’s walk through what the pieces of the -pattern used here mean; for the full macro pattern syntax, see [the reference]. +Valid pattern syntax in macro definitions is different than the pattern syntax +covered in Chapter 18 because macro patterns are matched against Rust code +structure rather than values. Let’s walk through what the pieces of the pattern +in Listing AD-1 mean; for the full macro pattern syntax, see [the reference]. [the reference]: ../../reference/macros.html -The `$x:expr` part of the pattern matches any Rust expression and gives the -expression the name `$x`. The `*` specifies that the pattern matches zero or -more of whatever precedes the `*`. In this case, `*` is preceded by `$(),` so -this pattern matches zero or more of whatever is inside the parentheses, -delimited by a comma. When we call this macro with `vec![1, 2, 3];`, the -pattern matches the three expressions `1`, `2`, and `3`. +First, a set of parentheses encompasses the whole pattern. Next comes a dollar +sign (`$`) followed by a set of parentheses, which captures values that match +the pattern within the parentheses for use in the replacement code. Within +`$()` is `$x:expr`, which matches any Rust expression and gives the expression +the name `$x`. + +The comma following `$()` indicates that a literal comma separator character +could optionally appear after the code that matches the code captured in `$()`. +The `*` following the comma specifies that the pattern matches zero or more of +whatever precedes the `*`. + +When we call this macro with `vec![1, 2, 3];`, the `$x` pattern matches three +times with the three expressions `1`, `2`, and `3`. -In the body of the code associated with this arm, the `$()*` part is generated -for each part that matches `$()` in the pattern, zero or more times depending -on how many times the pattern matches. The `$x` in the code associated with the -arm is replaced with each expression matched. When we call this macro with -`vec![1, 2, 3];`, the code generated that replaces this macro call will be: +Now let's look at the pattern in the body of the code associated with this arm: +The `temp_vec.push()` code within the `$()*` part is generated for each part +that matches `$()` in the pattern, zero or more times depending on how many +times the pattern matches. The `$x` is replaced with each expression matched. +When we call this macro with `vec![1, 2, 3];`, the code generated that replaces +this macro call will be: + + + ```rust,ignore let mut temp_vec = Vec::new(); @@ -166,27 +183,27 @@ as [The Little Book of Rust Macros][tlborm]. [tlborm]: https://danielkeep.github.io/tlborm/book/index.html -## Procedural Macros for Custom `derive` +### Procedural Macros for Custom `derive` The second form of macros is called *procedural macros* because they’re more like functions (which are a type of procedure). Procedural macros accept some Rust code as an input, operate on that code, and produce some Rust code as an output, rather than matching against patterns and replacing the code with other -code as declarative macros do. Today, the only thing you can define procedural -macros for is to allow your traits to be implemented on a type by specifying -the trait name in a `derive` annotation. +code as declarative macros do. At the time of writing, you can only really +define procedural macros to allow your traits to be implemented on a type by +specifying the trait name in a `derive` annotation. -Let’s create a crate named `hello_macro` that defines a trait named +We're going to create a crate named `hello_macro` that defines a trait named `HelloMacro` with one associated function named `hello_macro`. Rather than making users of our crate implement the `HelloMacro` trait for each of their -types, we’d like users to be able to annotate their type with +types, we’ll provide a procedural macro so users can annotate their type with `#[derive(HelloMacro)]` to get a default implementation of the `hello_macro` -function associated with their type. The default implementation will print -`Hello, Macro! My name is TypeName!` where `TypeName` is the name of the type on -which this trait has been defined. +function. The default implementation will print `Hello, Macro! My name is +TypeName!` where `TypeName` is the name of the type on which this trait has +been defined. In other words, we’re going to write a crate that enables another programmer to -write code that looks like Listing A4-1 using our crate: +write code like Listing AD-2 using our crate: Filename: src/main.rs @@ -205,19 +222,17 @@ fn main() { } ``` -Listing A4-1: The code a user of our crate will be able -to write when we’ve written the procedural macro +Listing AD-2: The code a user of our crate will be able +to write with use of our procedural macro This code will print `Hello, Macro! My name is Pancakes!` when we’re done. Let’s -get started! - -Let’s make a new library crate: +get started! First we need to make a new library crate: ```text -$ cargo new hello_macro +$ cargo new hello_macro --lib ``` -First, we’ll define the `HelloMacro` trait and associated function: +Now we’ll define the `HelloMacro` trait and its associated function: Filename: src/lib.rs @@ -227,8 +242,9 @@ pub trait HelloMacro { } ``` -At this point, a user of our crate could implement the trait themselves to -achieve the functionality we wanted to enable, like so: +We have a trait and its function. At this point, a user of our crate would be +able to implement the trait themselves to achieve the desired functionality, +like so: ```rust,ignore extern crate hello_macro; @@ -249,43 +265,43 @@ fn main() { ``` However, they would need to write out the implementation block for each type -they wanted to be able to use with `hello_macro`; we’d like to make using our -trait more convenient for other programmers by saving them this work. +they wanted to use with `hello_macro`; we’d like to save them this work. -Additionally, we can’t provide a default implementation for the `hello_macro` -function that has the behavior we want of printing out the name of the type the -trait is implemented on: Rust doesn’t have reflection capabilities, so we can’t -look up the type’s name at runtime. We need a macro to generate code at compile -time. +Additionally, we can’t yet provide a default implementation for the +`hello_macro` function that will print out the name of the type the trait is +implemented on: Rust doesn’t have reflection capabilities, so can’t look up the +type’s name at runtime. We need a macro to generate code at compile time. -### Defining Procedural Macros Requires a Separate Crate + + -The next step is to define the procedural macro. At the moment, procedural -macros need to be in their own crate. Eventually, this restriction may be -lifted, but for now, it’s required. As such, there’s a convention: for a crate -named `foo`, a custom derive procedural macro crate is called `foo-derive`. -Let’s start a new crate called `hello_macro_derive` inside our `hello_macro` -project: +The next step is to define the procedural macro. At the time of writing, +procedural macros need to be in their own crate. Eventually, this restriction +may be lifted. The convention for structuring crates and macro crates is as +such: for a crate named `foo`, a custom derive procedural macro crate is called +`foo-derive`. Let’s start a new crate called `hello_macro_derive` inside our +`hello_macro` project: ```text -$ cargo new hello_macro_derive +$ cargo new hello_macro_derive --lib ``` -We’ve chosen to create the procedural macro crate within the directory of our -`hello_macro` crate because the two crates are tightly related: if we change -the trait definition in `hello_macro`, we’ll have to change the implementation -of the procedural macro in `hello_macro_derive` as well. The two crates will -need to be published separately, and programmers using these crates will need -to add both as dependencies and bring them both into scope. It’s possible to +Our two crates are tightly related, so we create the procedural macro crate +within the directory of our `hello_macro` crate. If we change the trait +definition in `hello_macro`, we’ll have to change the implementation of the +procedural macro in `hello_macro_derive` as well. The two crates will need to +be published separately, though, and programmers using these crates will need +to add both as dependencies and bring them both into scope. We could instead have the `hello_macro` crate use `hello_macro_derive` as a dependency and -re-export the procedural macro code, but structuring the project this way makes -it possible for programmers to easily decide they only want to use -`hello_macro` if they don’t want the `derive` functionality. +re-export the procedural macro code, but the way we've structured the project +makes it possible for programmers to use `hello_macro` even if they don’t want +the `derive` functionality. -We need to declare that the `hello_macro_derive` crate is a procedural macro -crate. We also need to add dependencies on the `syn` and `quote` crates to get -useful functionality for operating on Rust code. To do these two things, add -the following to the *Cargo.toml* for `hello_macro_derive`: +We need to declare the `hello_macro_derive` crate as a procedural macro crate. +We'll also need functionality from the `syn` and `quote` crates, as we'll see +in a moment, so we need to add them as dependencies. Add the following to the +*Cargo.toml* file for `hello_macro_derive`: Filename: hello_macro_derive/Cargo.toml @@ -298,13 +314,14 @@ syn = "0.11.11" quote = "0.3.15" ``` -To start defining the procedural macro, place the code from Listing A4-2 in -*src/lib.rs* for the `hello_macro_derive` crate. Note that this won’t compile -until we add a definition for the `impl_hello_macro` function. We’ve split the -code into functions in this way because the code in Listing A4-2 will be the -same for almost every procedural macro crate; it’s code that makes writing a +To start defining the procedural macro, place the code from Listing AD-3 in +your *src/lib.rs* for the `hello_macro_derive` crate. Note that this won’t +compile until we add a definition for the `impl_hello_macro` function. + +Note the way we've split the functions in AD-3; this will be the same for +almost every procedural macro crate you see or create, as it makes writing a procedural macro more convenient. What you choose to do in the place where the -`impl_hello_macro` function is called will be different and depend on the +`impl_hello_macro` function is called will be different depending on the purpose of your procedural macro. Filename: hello_macro_derive/src/lib.rs @@ -333,7 +350,7 @@ pub fn hello_macro_derive(input: TokenStream) -> TokenStream { } ``` -Listing A4-2: Code that most procedural macro crates will +Listing AD-3: Code that most procedural macro crates will need to have for processing Rust code We have introduced three new crates: `proc_macro`, [`syn`], and [`quote`]. The @@ -348,27 +365,31 @@ to handle: writing a full parser for Rust code is no simple task. [`syn`]: https://crates.io/crates/syn [`quote`]: https://crates.io/crates/quote -The `hello_macro_derive` function is the code that will get called when a user -of our library specifies the `#[derive(HelloMacro)]` annotation on a type -because we’ve annotated the `hello_macro_derive` function here with -`proc_macro_derive` and specified the same name, `HelloMacro`. This name -matches our trait named `HelloMacro`; that’s the convention most procedural -macros follow. - -The first thing this function does is convert the `input` from a `TokenStream` -to a `String` by calling `to_string`. This `String` is a string representation -of the Rust code for which we are deriving `HelloMacro`. In the example in -Listing A4-1, `s` will have the `String` value `struct Pancakes;` because -that’s the Rust code we added the `#[derive(HelloMacro)]` annotation to. - -At the moment, the only thing you can do with a `TokenStream` is convert it to -a string. A richer API will exist in the future. - -What we really need is to be able to parse the Rust code `String` into a data -structure that we can then interpret and perform operations on. This is where -`syn` comes to play. The `parse_derive_input` function in `syn` takes a -`String` and returns a `DeriveInput` struct representing the parsed Rust code. -Here’s the relevant parts of the `DeriveInput` struct we get from parsing the +The `hello_macro_derive` function will get called when a user of our library +specifies `#[derive(HelloMacro)]` on a type, because we’ve annotated the +`hello_macro_derive` function here with `proc_macro_derive` and specified the +name, `HelloMacro`, which matches our trait name; that’s the convention most +procedural macros follow. + +This function first converts the `input` from a `TokenStream` to a `String` by +calling `to_string`. This `String` is a string representation of the Rust code +for which we are deriving `HelloMacro`. In the example in Listing AD-2, `s` +will have the `String` value `struct Pancakes;` because that’s the Rust code we +added the `#[derive(HelloMacro)]` annotation to. + + + + +> Note: At the time of writing, the only thing you can do with a `TokenStream` +> is convert it to a string. A richer API will exist in the future. + +Now we need to be able to parse the Rust code `String` into a data structure +that we can then interpret and perform operations on. This is where `syn` comes +to play. The `parse_derive_input` function in `syn` takes a `String` and +returns a `DeriveInput` struct representing the parsed Rust code. The following +shows the relevant parts of the `DeriveInput` struct we get from parsing the string `struct Pancakes;`: ```rust,ignore @@ -391,27 +412,25 @@ API docs for `DeriveInput`][syn-docs] for more information. [syn-docs]: https://docs.rs/syn/0.11.11/syn/struct.DeriveInput.html -We haven’t defined the `impl_hello_macro` function; that’s where we’ll build -the new Rust code we want to include. Before we get to that, the last part of -this `hello_macro_derive` function is using the `quote` crate’s `parse` -function to turn the output of the `impl_hello_macro` function back into a -`TokenStream`. The returned `TokenStream` is added to the code that users of -our crate write so that when they compile their crate, they get extra -functionality we provide. +At this point we haven’t defined the `impl_hello_macro` function, which is +where we’ll build the new Rust code we want to include. Before we get to that, +the last part of this `hello_macro_derive` function is using the `parse` +function from the `quote` crate to turn the output of the `impl_hello_macro` +function back into a `TokenStream`. The returned `TokenStream` is added to the +code that users of our crate write so that when they compile their crate, they +get extra functionality we provide. You may have noticed that we’re calling `unwrap` to panic if the calls to the -`parse_derive_input` or `parse` functions fail because they’re unable to parse -the `TokenStream` or generate a `TokenStream`. Panicking on errors is necessary -in procedural macro code because `proc_macro_derive` functions must return -`TokenStream` rather than `Result` in order to conform to the procedural macro -API. We’ve chosen to keep this example simple by using `unwrap`; in production -code you should provide more specific error messages about what went wrong by -using `expect` or `panic!`. +`parse_derive_input` or `parse` functions fail here. Panicking on errors is +necessary in procedural macro code because `proc_macro_derive` functions must +return `TokenStream` rather than `Result` in order to conform to the procedural +macro API. We’ve chosen to keep this example simple by using `unwrap`; in +production code you should provide more specific error messages about what went +wrong by using `expect` or `panic!`. Now that we have the code to turn the annotated Rust code from a `TokenStream` -into a `String` and into a `DeriveInput` instance, let’s write the code that -will generate the code implementing the `HelloMacro` trait on the annotated -type: +into a `String` and a `DeriveInput` instance, let’s generate the code +implementing the `HelloMacro` trait on the annotated type: Filename: hello_macro_derive/src/lib.rs @@ -428,35 +447,36 @@ fn impl_hello_macro(ast: &syn::DeriveInput) -> quote::Tokens { } ``` -We are able to get an `Ident` struct instance containing the name (identifier) -of the annotated type using `ast.ident`. With the code from Listing A4-1, -`name` will be `Ident("Pancakes")`. +We get an `Ident` struct instance containing the name (identifier) of the +annotated type using `ast.ident`. With the code from Listing AD-2, `name` will +be `Ident("Pancakes")`. -The `quote!` macro from the `quote` crate lets us write up the Rust code that -we wish to return and convert it into `quote::Tokens`. The `quote!` macro lets -us use some really cool templating mechanics; we can write `#name` and `quote!` -will replace it with the value in the variable named `name`. You can even do -some repetition similar to the way regular macros work. Check out [the `quote` -crate’s docs][quote-docs] for a thorough introduction. +The `quote!` macro lets us write up the Rust code that we want to return and +convert it into `quote::Tokens`. This macro also provides some really cool +templating mechanics; we can write `#name` and `quote!` will replace it with +the value in the variable named `name`. You can even do some repetition similar +to the way regular macros work. Check out [the `quote` crate’s +docs][quote-docs] for a thorough introduction. [quote-docs]: https://docs.rs/quote -What we want to do for our procedural macro is generate an implementation of -our `HelloMacro` trait for the type the user of our crate has annotated, which -we can get by using `#name`. The trait implementation has one function, -`hello_macro`, and the function body contains the functionality we want to -provide: printing `Hello, Macro! My name is` and then the name of the type the -user of our crate has annotated. The `stringify!` macro used here is built into -Rust. It takes a Rust expression, such as `1 + 2`, and at compile time turns -the expression into a string literal, such as `"1 + 2"`. This is different than -`format!` or `println!`, which evaluate the expression and then turn the result -into a `String`. There’s a possibility that `#name` would be an expression that -we would want to print out literally, and `stringify!` also saves an allocation -by converting `#name` to a string literal at compile time. +We want our procedural macro to generate an implementation of our `HelloMacro` +trait for the type the user annotated, which we can get by using `#name`. The +trait implementation has one function, `hello_macro`, whose body contains the +functionality we want to provide: printing `Hello, Macro! My name is` and then +the name of the annotated type. + +The `stringify!` macro used here is built into Rust. It takes a Rust +expression, such as `1 + 2`, and at compile time turns the expression into a +string literal, such as `"1 + 2"`. This is different than `format!` or +`println!`, which evaluate the expression and then turn the result into a +`String`. There’s a possibility that the `#name` input might be an expression +to print out literally so we use `stringify!`. Using `stringify!` also saves an +allocation by converting `#name` to a string literal at compile time. At this point, `cargo build` should complete successfully in both `hello_macro` and `hello_macro_derive`. Let’s hook these crates up to the code in Listing -A4-1 to see it in action! Create a new binary project in your `projects` +AD-2 to see it in action! Create a new binary project in your `projects` directory with `cargo new --bin pancakes`. We need to add both `hello_macro` and `hello_macro_derive` as dependencies in the `pancakes` crate’s *Cargo.toml*. If you’ve chosen to publish your versions of `hello_macro` and @@ -469,16 +489,16 @@ hello_macro = { path = "../hello_macro" } hello_macro_derive = { path = "../hello_macro/hello_macro_derive" } ``` -Put the code from Listing A4-1 into *src/main.rs*, and executing `cargo run` -should print `Hello, Macro! My name is Pancakes`! The implementation of the +Put the code from Listing AD-2 into *src/main.rs*, and when you run `cargo run` +it should print `Hello, Macro! My name is Pancakes!` The implementation of the `HelloMacro` trait from the procedural macro was included without the `pancakes` crate needing to implement it; the `#[derive(HelloMacro)]` took care of adding the trait implementation. -## The Future of Macros +### The Future of Macros -In the future, we’ll be expanding both declarative and procedural macros. A -better declarative macro system will be used with the `macro` keyword, and -we’ll add more types of procedural macros, for more powerful tasks than only +In the future, we’ll be expanding both declarative and procedural macros. Rust +will use better declarative macro system with the `macro` keyword, and we’ll +add more types of procedural macros, for more powerful tasks than just `derive`. These systems are still under development at the time of publication; please consult the online Rust documentation for the latest information. From ab6359a196ed3d52fd6cf6330d3ce7e659d3466e Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sat, 24 Mar 2018 22:59:02 -0400 Subject: [PATCH 016/749] spellingz --- second-edition/src/appendix-03-derivable-traits.md | 4 ++-- second-edition/src/appendix-04-macros.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/second-edition/src/appendix-03-derivable-traits.md b/second-edition/src/appendix-03-derivable-traits.md index 01b9011a06..88ccea5b90 100644 --- a/second-edition/src/appendix-03-derivable-traits.md +++ b/second-edition/src/appendix-03-derivable-traits.md @@ -167,7 +167,7 @@ returned from `to_vec` will need to own its instances, so `to_vec` calls `clone` on each item. Thus, the type stored in the slice must implement `Clone`. The `Copy` trait allows you to duplicate a value by only copying bits stored on -the stack; no abritrary code is necessary. See the "Stack-Only Data: Copy" +the stack; no arbitrary code is necessary. See the "Stack-Only Data: Copy" section in Chapter 4 for more information on `Copy`. diff --git a/second-edition/src/appendix-04-macros.md b/second-edition/src/appendix-04-macros.md index 929a3c96c0..32d6ae2d67 100644 --- a/second-edition/src/appendix-04-macros.md +++ b/second-edition/src/appendix-04-macros.md @@ -37,7 +37,7 @@ example, implement a trait on a given type. A function can’t, because it gets called at runtime and a trait needs to be implemented at compile time. The downside to implementing a macro over a function is that macro definitions -are more complex than function definitions becuase you’re writing Rust code +are more complex than function definitions because you’re writing Rust code that writes Rust code. Due to this indirection, macro definitions are generally more difficult to read, understand, and maintain than function definitions. From 2fa67a0efa2e4ce840a297708e49294ce5a3f9dd Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sun, 25 Mar 2018 10:41:03 -0400 Subject: [PATCH 017/749] Snapshot of appendices as sent back to nostarch --- second-edition/nostarch/appendix.md | 967 +++++++++++++++------------- 1 file changed, 521 insertions(+), 446 deletions(-) diff --git a/second-edition/nostarch/appendix.md b/second-edition/nostarch/appendix.md index c03ce8f966..c9128e45d2 100644 --- a/second-edition/nostarch/appendix.md +++ b/second-edition/nostarch/appendix.md @@ -1,50 +1,63 @@ + +[TOC] + ## Appendix A: Keywords -The following keywords are reserved by the Rust language and may not be used as -identifiers such as names of functions, variables, parameters, struct fields, -modules, crates, constants, macros, static values, attributes, types, traits, -or lifetimes. +The following is a list of keywords that are reserved for current or future use +by the Rust language. As such, these may not be used as identifiers, such as +names of functions, variables, parameters, struct fields, modules, crates, +constants, macros, static values, attributes, types, traits, or lifetimes. ### Keywords Currently in Use -* `as` - primitive casting, disambiguating the specific trait containing an - item, or renaming items in `use` and `extern crate` statements +* `as` - perform primitive casting, disambiguate the specific trait + containing an item, or rename items in `use` and `extern crate` statements * `break` - exit a loop immediately -* `const` - constant items and constant raw pointers +* `const` - define constant items or constant raw pointers * `continue` - continue to the next loop iteration -* `crate` - external crate linkage or a macro variable representing the crate +* `crate` - link an external crate or a macro variable representing the crate in which the macro is defined * `else` - fallback for `if` and `if let` control flow constructs -* `enum` - defining an enumeration -* `extern` - external crate, function, and variable linkage +* `enum` - define an enumeration +* `extern` - link an external crate, function, or variable * `false` - Boolean false literal -* `fn` - function definition and function pointer type -* `for` - iterator loop, part of trait impl syntax, and higher-ranked lifetime - syntax -* `if` - conditional branching -* `impl` - inherent and trait implementation block +* `fn` - define a function or the function pointer type +* `for` - loop over items from an iterator, implement a trait, or specify a + higher-ranked lifetime +* `if` - branch based on the result of a conditional expression +* `impl` - implement inherent or trait functionality * `in` - part of `for` loop syntax -* `let` - variable binding -* `loop` - unconditional, infinite loop -* `match` - pattern matching -* `mod` - module declaration -* `move` - makes a closure take ownership of all its captures -* `mut` - denotes mutability in references, raw pointers, and pattern bindings -* `pub` - denotes public visibility in struct fields, `impl` blocks, and modules -* `ref` - by-reference binding +* `let` - bind a variable +* `loop` - loop unconditionally +* `match` - match a value to patterns +* `mod` - define a module +* `move` - make a closure take ownership of all its captures +* `mut` - denote mutability in references, raw pointers, or pattern bindings +* `pub` - denote public visibility in struct fields, `impl` blocks, or modules +* `ref` - bind by reference * `return` - return from function -* `Self` - type alias for the type implementing a trait +* `Self` - a type alias for the type implementing a trait * `self` - method subject or current module * `static` - global variable or lifetime lasting the entire program execution -* `struct` - structure definition +* `struct` - define a structure * `super` - parent module of the current module -* `trait` - trait definition +* `trait` - define a trait * `true` - Boolean true literal -* `type` - type alias and associated type definition -* `unsafe` - denotes unsafe code, functions, traits, and implementations +* `type` - define a type alias or associated type +* `unsafe` - denote unsafe code, functions, traits, or implementations * `use` - import symbols into scope -* `where` - type constraint clauses -* `while` - conditional loop +* `where` - denote clauses that constrain a type +* `while` - loop conditionally based on the result of an expression + + + ### Keywords Reserved for Future Use @@ -71,6 +84,14 @@ potential future use. ## Appendix B: Operators and Symbols + + + +This appendix is a glossary of Rust's syntax, including operators and other +symbols that appear by themselves or in the context of paths, generics, trait +bounds, macros, attributes, comments, tuples, and brackets. + ### Operators The following lists the operators in Rust, an example of how the operator would @@ -78,6 +99,9 @@ appear in context, a short explanation, and whether that operator is overloadable. If an operator is overloadable, the relevant trait to use to overload that operator is listed. + + * `!` (`ident!(…)`, `ident!{…}`, `ident![…]`): denotes macro expansion. * `!` (`!expr`): bitwise or logical complement. Overloadable (`Not`). * `!=` (`var != expr`): nonequality comparison. Overloadable (`PartialEq`). @@ -104,7 +128,6 @@ overload that operator is listed. * `..` (`..`, `expr..`, `..expr`, `expr..expr`): right-exclusive range literal. * `..` (`..expr`): struct literal update syntax. * `..` (`variant(x, ..)`, `struct_type { x, .. }`): “and the rest” pattern binding. -* `...` (`...expr`, `expr...expr`) *in an expression*: inclusive range expression. * `...` (`expr...expr`) *in a pattern*: inclusive range pattern. * `/` (`expr / expr`): arithmetic division. Overloadable (`Div`). * `/=` (`var /= expr`): arithmetic division and assignment. Overloadable (`DivAssign`). @@ -116,12 +139,12 @@ overload that operator is listed. * `<<` (`expr << expr`): left-shift. Overloadable (`Shl`). * `<<=` (`var <<= expr`): left-shift and assignment. Overloadable (`ShlAssign`). * `<` (`expr < expr`): less-than comparison. Overloadable (`PartialOrd`). -* `<=` (`var <= expr`): less-than or equal-to comparison. Overloadable (`PartialOrd`). +* `<=` (`expr <= expr`): less-than or equal-to comparison. Overloadable (`PartialOrd`). * `=` (`var = expr`, `ident = type`): assignment/equivalence. -* `==` (`var == expr`): equality comparison. Overloadable (`PartialEq`). +* `==` (`expr == expr`): equality comparison. Overloadable (`PartialEq`). * `=>` (`pat => expr`): part of match arm syntax. * `>` (`expr > expr`): greater-than comparison. Overloadable (`PartialOrd`). -* `>=` (`var >= expr`): greater-than or equal-to comparison. Overloadable (`PartialOrd`). +* `>=` (`expr >= expr`): greater-than or equal-to comparison. Overloadable (`PartialOrd`). * `>>` (`expr >> expr`): right-shift. Overloadable (`Shr`). * `>>=` (`var >>= expr`): right-shift and assignment. Overloadable (`ShrAssign`). * `@` (`ident @ pat`): pattern binding. @@ -137,6 +160,14 @@ overload that operator is listed. ### Non-operator Symbols + + + +The following lists all non-letters that don't function as operators; that is, +they don't behave like a function or method call. + #### Standalone Syntax * `'ident`: named lifetime or loop label @@ -224,61 +255,34 @@ overload that operator is listed. * `expr[expr]`: collection indexing. Overloadable (`Index`, `IndexMut`). * `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]`: collection indexing pretending to be collection slicing, using `Range`, `RangeFrom`, `RangeTo`, `RangeFull` as the “index”. -# C - Derivable Traits - -In various places in the book, we discussed the `derive` attribute that is -applied to a struct or enum. This attribute generates code that implements a -trait on the annotated type with a default implementation. In this example, the -`#[derive(Debug)]` attribute implements the `Debug` trait for the `Point` -struct: - -``` -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} -``` - -The code that the compiler generates for the implementation of `Debug` is -similar to this code: - -``` -impl ::std::fmt::Debug for Point { - fn fmt(&self, __arg_0: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { - match *self { - Point { x: ref __self_0_0, y: ref __self_0_1 } => { - let mut builder = __arg_0.debug_struct("Point"); - let _ = builder.field("x", &&(*__self_0_0)); - let _ = builder.field("y", &&(*__self_0_1)); - builder.finish() - } - } - } -} -``` - -The generated code implements sensible default behavior for the `Debug` trait’s -`fmt` function: a `match` expression destructures a `Point` instance into its -field values. Then it builds up a string containing the struct’s name and each -field’s name and value. This means we’re able to use debug formatting on a -`Point` instance to see what value each field has. - -The generated code isn’t particularly easy to read because it’s only for the -compiler to consume, rather than for programmers to read! The `derive` -attribute and the default implementation of `Debug` has saved us all of the -work of writing this code for every struct or enum that we want to be able to -print using debug formatting. - -The `derive` attribute has default implementations for the following traits -provided by the standard library. If you want different behavior than what the -`derive` attribute provides, consult the standard library documentation for -each trait for the details needed for manual implementation of the traits. - -## Standard Library Traits that Can Be Derived - -The following sections list all of the traits in the standard library that can -be used with `derive`. Each section covers: +## C - Derivable Traits + +In various places in the book, we've discussed the `derive` attribute +that you can apply to a struct or enum definition. + + + + + + + +The `derive` attribute generates code that will implement a trait with its own +default implementation, on the type you have annotated with the `derive` +syntax. In this appendix, we provide a reference of all of the traits in the +standard library that can be used with `derive`. Each section covers: - What operators and methods deriving this trait will enable - What the implementation of the trait provided by `derive` does @@ -286,233 +290,284 @@ be used with `derive`. Each section covers: - The conditions in which you’re allowed or not allowed to implement the trait - Examples of operations that require the trait +If you want different behavior than that provided by the `derive` attribute, +consult the standard library documentation for each trait for details of how to +manually implement them. + + + +The rest of the traits defined in the standard library can’t be implemented on +your types using `derive`. These traits don’t have sensible default behavior, +so it's up to you to implement them in the way that makes sense for what you're +trying to accomplish. + +An example of a trait that can’t be derived is `Display`, which handles +formatting for end users. You should always put thought into the appropriate +way to display a type to an end user: what parts of the type should an end user +be allowed to see? What parts would they find relevant? What format of the data +would be most relevant to them? The Rust compiler doesn’t have this insight and +so can't provide appropriate default behavior for you. + +The list of derivable traits provided in this appendix is not comprehensive: +libraries can implement `derive` for their own traits! In this way, the list of +traits you can use `derive` with is truly open-ended. Implementing `derive` +involves using a procedural macro, which is covered in Appendix D, “Macros.” + ### `Debug` for Programmer Output The `Debug` trait enables debug formatting in format strings, indicated by adding `:?` within `{}` placeholders. -The `Debug` trait signifies that instances of a type may be printed by -programmers in order to debug their programs by inspecting an instance of a -type at a particular point in a program’s execution. +The `Debug` trait allows you to print instances of a type for debugging +purposes, so you and other programmers using your type can inspect an instance +at a particular point in a program’s execution. -An example of when `Debug` is required is the `assert_eq!` macro, which prints -the values of the instances given as arguments if the equality assertion fails -so that programmers can see why the two instances weren’t equal. +`Debug` is required, for example, in use of the `assert_eq!` macro, which +prints the values of instances given as arguments if the equality assertion +fails so programmers can see why the two instances weren’t equal. ### `PartialEq` and `Eq` for Equality Comparisons -The `PartialEq` trait signifies that instances of a type can be compared to -each other for equality, and enables use of the `==` and `!=` operators. - -Deriving `PartialEq` implements the `eq` method. When derived on structs, two -instances are equal if all fields are equal, and not equal if any fields are -not equal. When derived on enums, each variant is equal to itself and not equal -to the other variants. - -An example of when `PartialEq` is required is the `assert_eq!` macro, which -needs to be able to compare two instances of a type for equality. - -The `Eq` trait doesn’t have any methods. It only signals that for every value -of the annotated type, the value is equal to itself. The `Eq` trait can only be -applied to types that also implement `PartialEq`. An example of types that -implements `PartialEq` but that cannot implement `Eq` are floating point number -types: the implementation of floating point numbers says that two instances of -the not-a-number value, `NaN`, are not equal to each other. + + + +The `PartialEq` trait allows you to compare instances of a type to check for +equality, and enables use of the `==` and `!=` operators. + +Deriving `PartialEq` implements the `eq` method. When `PartialEq` is derived on +structs, two instances are equal only if *all* fields are equal, and not equal +if any fields are not equal. When derived on enums, each variant is equal to +itself and not equal to the other variants. + +`PartialEq` is required, for example, with the use of the `assert_eq!` macro, +which needs to be able to compare two instances of a type for equality. + +The `Eq` trait has no methods. Its purpose is to signal that for every value of +the annotated type, the value is equal to itself. The `Eq` trait can only be +applied to types that also implement `PartialEq`, though not all types that +implement `PartialEq` can implement `Eq`. One example of this is floating point +number types: the implementation of floating point numbers says that two +instances of the not-a-number value, `NaN`, are not equal to each other. An example of when `Eq` is required is for keys in a `HashMap` so that the `HashMap` can tell whether two keys are the same. ### `PartialOrd` and `Ord` for Ordering Comparisons -The `PartialOrd` trait signifies that instances of a type can be compared to -each other to see which is larger than the other for sorting purposes. A type -that implements `PartialOrd` may be used with the `<`, `>`, `<=`, and `>=` -operators. The `PartialOrd` trait can only be applied to types that also -implement `PartialEq`. +The `PartialOrd` trait allows you to compare instances of a type for sorting +purposes. A type that implements `PartialOrd` may be used with the `<`, `>`, +`<=`, and `>=` operators. The `PartialOrd` trait can only be applied to types +that also implement `PartialEq`. Deriving `PartialOrd` implements the `partial_cmp` method, which returns an -`Option` that may be `None` if comparing the given values does not -produce an ordering. When derived on structs, two instances of the struct are -compared by comparing the value in each field in the order in which the fields -appear in the struct definition. When derived on enums, variants of the enum -declared earlier in the enum definition are greater than the variants listed -later. - -An example of when `PartialOrd` is required is the `gen_range` method in the +`Option` that will be `None` when the values given do not produce an +ordering. An example of a value that doesn't produce an ordering, even though +most values of that type can be compared, is the not-a-number (`NaN`) floating +point value. Calling `partial_cmp` with any floating point number and the `NaN` +floating point value will return `None`. + + + + +When derived on structs, `PartialOrd` compares two instances by comparing the +value in each field in the order in which the fields appear in the struct +definition. When derived on enums, variants of the enum declared earlier in the +enum definition are considered greater than the variants listed later. + +`PartialOrd` is required, for example, for the `gen_range` method from the `rand` crate that generates a random value in the range specified by a low value and a high value. -The `Ord` trait signifies that for any two value of the annotated type, a valid -ordering exists. The `Ord` trait implements the `cmp` method, which returns an -`Ordering` rather than an `Option` because a valid ordering will -always be possible. The `Ord` trait can only be applied to types that also -implement `PartialOrd` and `Eq` (and `Eq` requires `PartialEq`). When derived -on structs and enums, `cmp` behaves the same way as the derived implementation -for `partial_cmp` does with `PartialOrd`. +The `Ord` trait allows you to know that for any two values of the annotated +type, a valid ordering will exist. The `Ord` trait implements the `cmp` method, +which returns an `Ordering` rather than an `Option` because a valid +ordering will always be possible. The `Ord` trait can only be applied to types +that also implement `PartialOrd` and `Eq` (and `Eq` requires `PartialEq`). When +derived on structs and enums, `cmp` behaves the same way as the derived +implementation for `partial_cmp` does with `PartialOrd`. An example of when `Ord` is required is when storing values in a `BTreeSet`, a data structure that stores data based on the sort order of the values. ### `Clone` and `Copy` for Duplicating Values -The `Clone` trait signifies there is a way to explicitly create a duplicate of -a value, and the duplication process might involve running arbitrary code. -Deriving `Clone` implements the `clone` method. When derived, the -implementation of `clone` for the whole type calls `clone` on each of the parts -of the type, so all of the fields or values in the type must also implement -`Clone` to derive `Clone`. + + + +The `Clone` trait allows you to explicitly create a deep copy of a value, and +the duplication process might involve running arbitrary code and copying heap +data. See the "Ways Variables and Data Interact: Clone" section in Chapter 4 +for more information on `Clone`. + +Deriving `Clone` implements the `clone` method which, when implemented for the +whole type, calls `clone` on each of the parts of the type. This means all of +the fields or values in the type must also implement `Clone` to derive `Clone`. An example of when `Clone` is required is when calling the `to_vec` method on a -slice containing instances of some type. The slice doesn’t own the instances -but the vector returned from `to_vec` will need to own its instances, so the -implementation of `to_vec` calls `clone` on each item. Thus, the type stored in -the slice must implement `Clone`. - -The `Copy` trait signifies that a value can be duplicated by only copying bits; -no other code is necessary. The `Copy` trait does not define any methods to -prevent programmers from overloading those methods violating the assumption -that no arbitrary code is being run. You can derive `Copy` on any type whose -parts all implement `Copy`. The `Copy` trait can only be applied to types that -also implement `Clone`, as a type that implements `Copy` has a trivial -implementation of `Clone`, doing the same thing as `Copy`. - -`Copy` is rarely required; when types implement `Copy`, there are optimizations -that can be applied and the code becomes nicer because you don’t have to call -`clone`. Everything possible with `Copy` can also be accomplished with `Clone`, -but the code might be slower or have to use `clone` in places. +slice. The slice doesn’t own the type instances it contains, but the vector +returned from `to_vec` will need to own its instances, so `to_vec` calls +`clone` on each item. Thus, the type stored in the slice must implement `Clone`. + +The `Copy` trait allows you to duplicate a value by only copying bits stored on +the stack; no arbitrary code is necessary. See the "Stack-Only Data: Copy" +section in Chapter 4 for more information on `Copy`. + + + + +The `Copy` trait does not define any methods to prevent programmers from +overloading those methods violating the assumption that no arbitrary code is +being run. That way, all programmers can assume that copying a value will be +very fast. + + + + +You can derive `Copy` on any type whose parts all implement `Copy`. The `Copy` +trait can only be applied to types that also implement `Clone`, as a type that +implements `Copy` has a trivial implementation of `Clone`, doing the same thing +as `Copy`. + +`Copy` is rarely required; types implement `Copy` have optimizations available +mean you don't have to call `clone`, making the code more concise. + + + + +Everything possible with `Copy` can also be accomplished with `Clone`, but the +code might be slower or have to use `clone` in places. ### `Hash` for Mapping a Value to a Value of Fixed Size -The `Hash` trait signifies there is a way to take an instance of a type that -takes up an arbitrary amount of size and map that instance to a value of fixed -size by using a hash function. Deriving `Hash` implements the `hash` method. -When derived, the implementation of `hash` for the whole type combines the -result of calling `hash` on each of the parts of the type, so all of the fields -or values in the type must also implement `Hash` to derive `Hash`. +The `Hash` trait allows you to take an instance of a type of arbitrary size and +map that instance to a value of fixed size, using a hash function. Deriving +`Hash` implements the `hash` method. The derived implementation of the `hash` +method combines the result of calling `hash` on each of the parts of the type, +meaning all fields or values must also implement `Hash` to derive `Hash`. -An example of when `Hash` is required is for keys in a `HashMap` so that the -`HashMap` can store data efficiently. +An example of when `Hash` is required is in storing keys in a `HashMap`, in +order to store data efficiently. ### `Default` for Default Values -The `Default` trait signifies there is a way to create a default value for a -type. Deriving `Default` implements the `default` method. When derived, the -implementation of `Default` for the whole type calls the `default` method on -each of the parts of the type, so all of the fields or values in the type must -also implement `Default` to derive `Default.` +The `Default` trait allows you to create a default value for a type. Deriving +`Default` implements the `default` method. The derived implementation of the +`default` method calls the `default` method on each part of the type, meaning +all fields or values in the type must also implement `Default` to derive +`Default.` -A common use of `Default::default` is in combination with the struct update +`Default::default` is commonly used in combination with the struct update syntax discussed in the “Creating Instances From Other Instances With Struct Update Syntax” section in Chapter 5. You can customize a few fields of a struct -and then use the default values for the rest by using `..Default::default()`. +and then set and use a default value for the rest of the fields by using +`..Default::default()`. -An example of when `Default` is required is the `unwrap_or_default` method on -`Option` instances. If the `Option` is `None`, the `unwrap_or_default` +`Default` is required when, for example, you use the `unwrap_or_default` method +on `Option` instances. If the `Option` is `None`, the `unwrap_or_default` method will return the result of `Default::default` for the type `T` stored in the `Option`. -## Standard Library Traits that Can’t Be Derived +## Appendix D: Macros -The rest of the traits defined in the standard library can’t be implemented on -your types using `derive`. These traits don’t have a sensible default behavior -they could have, so you are required to implement them in the way that makes -sense for what you are trying to accomplish with your code. - -An example of a trait that can’t be derived is `Display`, which handles -formatting of a type for end users of your programs. You should put thought -into the appropriate way to display a type to an end user: what parts of the -type should an end user be allowed to see? What parts would they find relevant? -What format of the data would be most relevant to them? The Rust compiler -doesn’t have this insight into your application, so you must provide it. - -## Making Custom Traits Derivable - -The above list is not comprehensive, however: libraries can implement `derive` -for their own types! In this way, the list of traits you can use `derive` with -is truly open-ended. Implementing `derive` involves using a procedural macro, -which is covered in the next appendix, “Macros.” - -# D - Macros - -We’ve used macros, such as `println!`, throughout this book. This appendix will -explain: +We’ve used macros like `println!` throughout this book, but haven't fully +explored what a macro is and how it works. This appendix will explain: - What macros are and how they differ from functions - How to define a declarative macro to do metaprogramming - How to define a procedural macro to create custom `derive` traits -Macros are covered in an appendix because they’re still evolving. They have -changed and will change more than the rest of the language and standard library -since Rust 1.0, so this section will likely get out of date more than the rest -of this book. The code shown here will still continue to work due to Rust’s +We're covering the details of macros in an appendix because they’re still +evolving in Rust. Macros have changed and, in the near future, will change at a +quicker rate than the rest of the language and standard library since Rust 1.0, +so this section is more likely to date than the rest of the book. The code +shown here will still continue to work with future versions, due to Rust’s stability guarantees, but there may be additional capabilities or easier ways -to write macros that aren’t available at the time of this publication. +to write macros that weren't available at the time of this publication. Bear +that in mind if you try to implement anything from this appendix. -## Macros are More Flexible and Complex than Functions +### The Difference Between Macros and Functions -Fundamentally, macros are a way of writing code that writes other code, which -is known as *metaprogramming*. In the previous appendix, we discussed the -`derive` attribute, which generates an implementation of various traits for -you. We’ve also used the `println!` and `vec!` macros. All of these macros -*expand* to produce more code than what you’ve written in your source code. +Fundamentally, macros are a way of writing code that writes other code, known +as *metaprogramming*. In Appendix C, we discussed the `derive` attribute, which +generates an implementation of various traits for you. We’ve also used the +`println!` and `vec!` macros throughout the book. All of these macros *expand* +to produce more code than the code you’ve written yourself. -Metaprogramming is useful to reduce the amount of code you have to write and +Metaprogramming is useful for reducing the amount of code you have to write and maintain, which is also one of the roles of functions. However, macros have -some additional powers that functions don’t have, as we discussed in Chapter 1. +some additional powers that functions don’t have. + A function signature has to declare the number and type of parameters the -function has. Macros can take a variable number of parameters: we can call -`println!("hello")` with one argument, or `println!("hello {}", name)` with two -arguments. Also, macros are expanded before the compiler interprets the meaning -of the code, so a macro can, for example, implement a trait on a given type, -whereas a function can’t because a function gets called at runtime and a trait -needs to be implemented at compile time. - -The downside to implementing a macro rather than a function is that macro -definitions are more complex than function definitions. You’re writing Rust -code that writes Rust code, and macro definitions are generally more difficult -to read, understand, and maintain than function definitions. +function has. Macros, on the other hand, can take a variable number of +parameters: we can call `println!("hello")` with one argument, or +`println!("hello {}", name)` with two arguments. Also, macros are expanded +before the compiler interprets the meaning of the code, so a macro can, for +example, implement a trait on a given type. A function can’t, because it gets +called at runtime and a trait needs to be implemented at compile time. + +The downside to implementing a macro over a function is that macro definitions +are more complex than function definitions because you’re writing Rust code +that writes Rust code. Due to this indirection, macro definitions are generally +more difficult to read, understand, and maintain than function definitions. Another difference between macros and functions is that macro definitions aren’t namespaced within modules like function definitions are. In order to -prevent unexpected name clashes when using a crate, when bringing an external -crate into the scope of your project, you have to explicitly bring the macros -into the scope of your project as well with the `#[macro_use]` annotation. This -example would bring all the macros defined in the `serde` crate into the scope -of the current crate: +prevent unexpected name clashes when using external crates, you have to +explicitly bring the macros into the scope of your project at the same time as +bringing the external crate into scope, using the `#[macro_use]` annotation. +The following example would bring all the macros defined in the `serde` crate +into the scope of the current crate: ``` #[macro_use] extern crate serde; ``` -If `extern crate` also brought macros into scope by default, you wouldn’t be -allowed to use two crates that happened to define macros with the same name. In -practice this conflict doesn’t come up much, but the more crates you use, the -more likely it is. +If `extern crate` was able to bring macros into scope by default without this +explicit annotation, you would be prevented from using two crates that happened +to define macros with the same name. In practice this conflict doesn’t come up +much, but the more crates you use, the more likely it is. One last important difference between macros and functions: macros must be -defined or brought into scope before they’re called in a file. Unlike -functions, where we can define a function at the bottom of a file yet call it -at the top, we always have to define macros before we’re able to call them. - -## Declarative Macros with `macro_rules!` for General Metaprogramming - -The first form of macros in Rust, and the one that’s most widely used, is -called *declarative macros*. These are also sometimes referred to as *macros by -example*, *`macro_rules!` macros*, or just plain *macros*. At their core, -declarative macros allow you to write something similar to a Rust `match` -expression. As discussed in Chapter 6, `match` expressions are control -structures that take an expression, compare the resulting value of the -expression to patterns, and then choose the code specified with the matching -pattern when the program runs. Macros also have a value that is compared to -patterns that have code associated with them, but the value is the literal Rust -code passed to the macro, the patterns match the structure of that source code, -and the code associated with each pattern is the code that is generated to -replace the code passed to the macro. This all happens during compilation. +defined or brought into scope *before* they’re called in a file, whereas +functions can be defined anywhere and called anywhere. + +### Declarative Macros with `macro_rules!` for General Metaprogramming + +The most widely used form of macros in Rust are *declarative macros*. These are +also sometimes referred to as *macros by example*, *`macro_rules!` macros*, or +just plain *macros*. At their core, declarative macros allow you to write +something similar to a Rust `match` expression. As discussed in Chapter 6, +`match` expressions are control structures that take an expression, compare the +resulting value of the expression to patterns, and then run the code associated +with the matching pattern. Macros also compare a value to patterns that have +code associated with them, but in this case the value is the literal Rust +source code passed to the macro, the patterns are compared with the structure +of that source code, and the code associated with each pattern is the code that +replaces the code passed to the macro. This all happens during compilation. To define a macro, you use the `macro_rules!` construct. Let’s explore how to use `macro_rules!` by taking a look at how the `vec!` macro is defined. Chapter -8 covered how we can use the `vec!` macro to create a new vector that holds +8 covered how we can use the `vec!` macro to create a new vector with particular values. For example, this macro creates a new vector with three integers inside: @@ -520,12 +575,12 @@ integers inside: let v: Vec = vec![1, 2, 3]; ``` -We can also use `vec!` to make a vector of two integers or a vector of five -string slices. Because we don’t know the number or type of values, we can’t -define a function that is able to create a new vector with the given elements -like `vec!` can. +We could also use the `vec!` macro to make a vector of two integers or a vector +of five string slices---we wouldn't be able to use a function to do the same +because we wouldn’t know the number or type of values up front. -Let’s take a look at a slightly simplified definition of the `vec!` macro: +Let’s take a look at a slightly simplified definition of the `vec!` macro in +Listing AD-1: ``` #[macro_export] @@ -542,44 +597,60 @@ macro_rules! vec { } ``` -> Note: the actual definition of the `vec!` macro in the standard library also -> has code to pre-allocate the correct amount of memory up-front. That code -> is an optimization that we’ve chosen not to include here for simplicity. +Listing AD-1: A simplified version of the `vec!` macro definition + +> Note: the actual definition of the `vec!` macro in the standard library +> includes code to pre-allocate the correct amount of memory up-front. That +> code is an optimization that we’ve chosen not to include here to make the +> example simpler. The `#[macro_export]` annotation indicates that this macro should be made -available when other crates import the crate in which we’re defining this -macro. Without this annotation, even if someone depending on this crate uses -the `#[macro_use]` annotation, this macro would not be brought into scope. - -Macro definitions start with `macro_rules!` and the name of the macro we’re -defining without the exclamation mark, which in this case is `vec`. This is -followed by curly brackets denoting the body of the macro definition. - -Inside the body is a structure similar to the structure of a `match` -expression. This macro definition has one arm with the pattern `( $( $x:expr -),* )`, followed by `=>` and the block of code associated with this pattern. If -this pattern matches, then the block of code will be emitted. Given that this +available whenever the crate in which we’re defining the macro is imported. +Without this annotation, even if someone depending on this crate uses the +`#[macro_use]` annotation, the macro would not be brought into scope. + +We then start the macro definition with `macro_rules!` and the name of the +macro we’re defining *without* the exclamation mark. The name---in this case +`vec`---is followed by curly brackets denoting the body of the macro definition. + +The structure in the `vec!` body is similar to the structure of a `match` +expression. Here we have one arm with the pattern `( $( $x:expr ),* )`, +followed by `=>` and the block of code associated with this pattern. If the +pattern matches, the associated block of code will be emitted. Given that this is the only pattern in this macro, there’s only one valid way to match; any other will be an error. More complex macros will have more than one arm. -The pattern syntax valid in macro definitions is different than the pattern -syntax covered in Chapter 18 because the patterns are for matching against Rust -code structure rather than values. Let’s walk through what the pieces of the -pattern used here mean; for the full macro pattern syntax, see the reference at +Valid pattern syntax in macro definitions is different than the pattern syntax +covered in Chapter 18 because macro patterns are matched against Rust code +structure rather than values. Let’s walk through what the pieces of the pattern +in Listing AD-1 mean; for the full macro pattern syntax, see the reference at *https://doc.rust-lang.org/stable/reference/macros.html*. -The `$x:expr` part of the pattern matches any Rust expression and gives the -expression the name `$x`. The `*` specifies that the pattern matches zero or -more of whatever precedes the `*`. In this case, `*` is preceded by `$(),` so -this pattern matches zero or more of whatever is inside the parentheses, -delimited by a comma. When we call this macro with `vec![1, 2, 3];`, the -pattern matches the three expressions `1`, `2`, and `3`. +First, a set of parentheses encompasses the whole pattern. Next comes a dollar +sign (`$`) followed by a set of parentheses, which captures values that match +the pattern within the parentheses for use in the replacement code. Within +`$()` is `$x:expr`, which matches any Rust expression and gives the expression +the name `$x`. + +The comma following `$()` indicates that a literal comma separator character +could optionally appear after the code that matches the code captured in `$()`. +The `*` following the comma specifies that the pattern matches zero or more of +whatever precedes the `*`. + +When we call this macro with `vec![1, 2, 3];`, the `$x` pattern matches three +times with the three expressions `1`, `2`, and `3`. -In the body of the code associated with this arm, the `$()*` part is generated -for each part that matches `$()` in the pattern, zero or more times depending -on how many times the pattern matches. The `$x` in the code associated with the -arm is replaced with each expression matched. When we call this macro with -`vec![1, 2, 3];`, the code generated that replaces this macro call will be: +Now let's look at the pattern in the body of the code associated with this arm: +The `temp_vec.push()` code within the `$()*` part is generated for each part +that matches `$()` in the pattern, zero or more times depending on how many +times the pattern matches. The `$x` is replaced with each expression matched. +When we call this macro with `vec![1, 2, 3];`, the code generated that replaces +this macro call will be: + + + ``` let mut temp_vec = Vec::new(); @@ -598,128 +669,128 @@ how to write macros, consult the online documentation or other resources such as The Little Book of Rust Macros at *https://danielkeep.github.io/tlborm/book/index.html*. -## Procedural Macros for Custom `derive` +### Procedural Macros for Custom `derive` The second form of macros is called *procedural macros* because they’re more like functions (which are a type of procedure). Procedural macros accept some Rust code as an input, operate on that code, and produce some Rust code as an output, rather than matching against patterns and replacing the code with other -code as declarative macros do. Today, the only thing you can define procedural -macros for is to allow your traits to be implemented on a type by specifying -the trait name in a `derive` annotation. - -Let’s create a crate named `hello-world` that defines a trait named -`HelloWorld` with one associated function named `hello_world`. Rather than -making users of our crate implement the `HelloWorld` trait for each of their -types, we’d like users to be able to annotate their type with -`#[derive(HelloWorld)]` to get a default implementation of the `hello_world` -function associated with their type. The default implementation will print -`Hello world, my name is TypeName!` where `TypeName` is the name of the type on -which this trait has been defined. +code as declarative macros do. At the time of writing, you can only really +define procedural macros to allow your traits to be implemented on a type by +specifying the trait name in a `derive` annotation. + +We're going to create a crate named `hello_macro` that defines a trait named +`HelloMacro` with one associated function named `hello_macro`. Rather than +making users of our crate implement the `HelloMacro` trait for each of their +types, we’ll provide a procedural macro so users can annotate their type with +`#[derive(HelloMacro)]` to get a default implementation of the `hello_macro` +function. The default implementation will print `Hello, Macro! My name is +TypeName!` where `TypeName` is the name of the type on which this trait has +been defined. In other words, we’re going to write a crate that enables another programmer to -write code that looks like Listing A4-1 using our crate: +write code like Listing AD-2 using our crate: Filename: src/main.rs ``` -extern crate hello_world; +extern crate hello_macro; #[macro_use] -extern crate hello_world_derive; +extern crate hello_macro_derive; -use hello_world::HelloWorld; +use hello_macro::HelloMacro; -#[derive(HelloWorld)] +#[derive(HelloMacro)] struct Pancakes; fn main() { - Pancakes::hello_world(); + Pancakes::hello_macro(); } ``` -Listing A4-1: The code a user of our crate will be able to write when we’ve -written the procedural macro - -This code will print `Hello world, my name is Pancakes!` when we’re done. Let’s -get started! +Listing AD-2: The code a user of our crate will be able +to write with use of our procedural macro -Let’s make a new library crate: +This code will print `Hello, Macro! My name is Pancakes!` when we’re done. Let’s +get started! First we need to make a new library crate: ``` -$ cargo new hello-world +$ cargo new hello_macro --lib ``` -First, we’ll define the `HelloWorld` trait and associated function: +Now we’ll define the `HelloMacro` trait and its associated function: Filename: src/lib.rs ``` -pub trait HelloWorld { - fn hello_world(); +pub trait HelloMacro { + fn hello_macro(); } ``` -At this point, a user of our crate could implement the trait themselves to -achieve the functionality we wanted to enable, like so: +We have a trait and its function. At this point, a user of our crate would be +able to implement the trait themselves to achieve the desired functionality, +like so: ``` -extern crate hello_world; +extern crate hello_macro; -use hello_world::HelloWorld; +use hello_macro::HelloMacro; struct Pancakes; -impl HelloWorld for Pancakes { - fn hello_world() { - println!("Hello world, my name is Pancakes!"); +impl HelloMacro for Pancakes { + fn hello_macro() { + println!("Hello, Macro! My name is Pancakes!"); } } fn main() { - Pancakes::hello_world(); + Pancakes::hello_macro(); } ``` However, they would need to write out the implementation block for each type -they wanted to be able to use with `hello_world`; we’d like to make using our -trait more convenient for other programmers by saving them this work. +they wanted to use with `hello_macro`; we’d like to save them this work. -Additionally, we can’t provide a default implementation for the `hello_world` -function that has the behavior we want of printing out the name of the type the -trait is implemented on: Rust doesn’t have reflection capabilities, so we can’t -look up the type’s name at runtime. We need a macro to generate code at compile -time. +Additionally, we can’t yet provide a default implementation for the +`hello_macro` function that will print out the name of the type the trait is +implemented on: Rust doesn’t have reflection capabilities, so can’t look up the +type’s name at runtime. We need a macro to generate code at compile time. -### Defining Procedural Macros Requires a Separate Crate + + + -The next step is to define the procedural macro. At the moment, procedural -macros need to be in their own crate. Eventually, this restriction may be -lifted, but for now, it’s required. As such, there’s a convention: for a crate -named `foo`, a custom derive procedural macro crate is called `foo-derive`. -Let’s start a new crate called `hello-world-derive` inside our `hello-world` -project: +The next step is to define the procedural macro. At the time of writing, +procedural macros need to be in their own crate. Eventually, this restriction +may be lifted. The convention for structuring crates and macro crates is as +such: for a crate named `foo`, a custom derive procedural macro crate is called +`foo-derive`. Let’s start a new crate called `hello_macro_derive` inside our +`hello_macro` project: ``` -$ cargo new hello-world-derive +$ cargo new hello_macro_derive --lib ``` -We’ve chosen to create the procedural macro crate within the directory of our -`hello-world` crate because the two crates are tightly related: if we change -the trait definition in `hello-world`, we’ll have to change the implementation -of the procedural macro in `hello-world-derive` as well. The two crates will -need to be published separately, and programmers using these crates will need -to add both as dependencies and bring them both into scope. It’s possible to -have the `hello-world` crate use `hello-world-derive` as a dependency and -re-export the procedural macro code, but structuring the project this way makes -it possible for programmers to easily decide they only want to use -`hello-world` if they don’t want the `derive` functionality. +Our two crates are tightly related, so we create the procedural macro crate +within the directory of our `hello_macro` crate. If we change the trait +definition in `hello_macro`, we’ll have to change the implementation of the +procedural macro in `hello_macro_derive` as well. The two crates will need to +be published separately, though, and programmers using these crates will need +to add both as dependencies and bring them both into scope. We could instead +have the `hello_macro` crate use `hello_macro_derive` as a dependency and +re-export the procedural macro code, but the way we've structured the project +makes it possible for programmers to use `hello_macro` even if they don’t want +the `derive` functionality. -We need to declare that the `hello-world-derive` crate is a procedural macro -crate. We also need to add dependencies on the `syn` and `quote` crates to get -useful functionality for operating on Rust code. To do these two things, add -the following to the *Cargo.toml* for `hello-world-derive`: +We need to declare the `hello_macro_derive` crate as a procedural macro crate. +We'll also need functionality from the `syn` and `quote` crates, as we'll see +in a moment, so we need to add them as dependencies. Add the following to the +*Cargo.toml* file for `hello_macro_derive`: -Filename: hello-world-derive/Cargo.toml +Filename: hello_macro_derive/Cargo.toml ``` [lib] @@ -730,16 +801,17 @@ syn = "0.11.11" quote = "0.3.15" ``` -To start defining the procedural macro, place the code from Listing A4-2 in -*src/lib.rs* for the `hello-world-derive` crate. Note that this won’t compile -until we add a definition for the `impl_hello_world` function. We’ve split the -code into functions in this way because the code in Listing A4-2 will be the -same for almost every procedural macro crate; it’s code that makes writing a +To start defining the procedural macro, place the code from Listing AD-3 in +your *src/lib.rs* for the `hello_macro_derive` crate. Note that this won’t +compile until we add a definition for the `impl_hello_macro` function. + +Note the way we've split the functions in AD-3; this will be the same for +almost every procedural macro crate you see or create, as it makes writing a procedural macro more convenient. What you choose to do in the place where the -`impl_hello_world` function is called will be different and depend on the +`impl_hello_macro` function is called will be different depending on the purpose of your procedural macro. -Filename: hello-world-derive/src/lib.rs +Filename: hello_macro_derive/src/lib.rs ``` extern crate proc_macro; @@ -749,8 +821,8 @@ extern crate quote; use proc_macro::TokenStream; -#[proc_macro_derive(HelloWorld)] -pub fn hello_world_derive(input: TokenStream) -> TokenStream { +#[proc_macro_derive(HelloMacro)] +pub fn hello_macro_derive(input: TokenStream) -> TokenStream { // Construct a string representation of the type definition let s = input.to_string(); @@ -758,15 +830,15 @@ pub fn hello_world_derive(input: TokenStream) -> TokenStream { let ast = syn::parse_derive_input(&s).unwrap(); // Build the impl - let gen = impl_hello_world(&ast); + let gen = impl_hello_macro(&ast); // Return the generated impl gen.parse().unwrap() } ``` -Listing A4-2: Code that most procedural macro crates will need to have for -processing Rust code +Listing AD-3: Code that most procedural macro crates will +need to have for processing Rust code We have introduced three new crates: `proc_macro`, `syn` (available from *https://crates.io/crates/syn*), and `quote` (available from @@ -779,27 +851,31 @@ structures and turns them back into Rust code. These crates make it much simpler to parse any sort of Rust code we might want to handle: writing a full parser for Rust code is no simple task. -The `hello_world_derive` function is the code that will get called when a user -of our library specifies the `#[derive(HelloWorld)]` annotation on a type -because we’ve annotated the `hello_world_derive` function here with -`proc_macro_derive` and specified the same name, `HelloWorld`. This name -matches our trait named `HelloWorld`; that’s the convention most procedural -macros follow. - -The first thing this function does is convert the `input` from a `TokenStream` -to a `String` by calling `to_string`. This `String` is a string representation -of the Rust code for which we are deriving `HelloWorld`. In the example in -Listing A4-1, `s` will have the `String` value `struct Pancakes;` because -that’s the Rust code we added the `#[derive(HelloWorld)]` annotation to. - -At the moment, the only thing you can do with a `TokenStream` is convert it to -a string. A richer API will exist in the future. - -What we really need is to be able to parse the Rust code `String` into a data -structure that we can then interpret and perform operations on. This is where -`syn` comes to play. The `parse_derive_input` function in `syn` takes a -`String` and returns a `DeriveInput` struct representing the parsed Rust code. -Here’s the relevant parts of the `DeriveInput` struct we get from parsing the +The `hello_macro_derive` function will get called when a user of our library +specifies `#[derive(HelloMacro)]` on a type, because we’ve annotated the +`hello_macro_derive` function here with `proc_macro_derive` and specified the +name, `HelloMacro`, which matches our trait name; that’s the convention most +procedural macros follow. + +This function first converts the `input` from a `TokenStream` to a `String` by +calling `to_string`. This `String` is a string representation of the Rust code +for which we are deriving `HelloMacro`. In the example in Listing AD-2, `s` +will have the `String` value `struct Pancakes;` because that’s the Rust code we +added the `#[derive(HelloMacro)]` annotation to. + + + + +> Note: At the time of writing, the only thing you can do with a `TokenStream` +> is convert it to a string. A richer API will exist in the future. + +Now we need to be able to parse the Rust code `String` into a data structure +that we can then interpret and perform operations on. This is where `syn` comes +to play. The `parse_derive_input` function in `syn` takes a `String` and +returns a `DeriveInput` struct representing the parsed Rust code. The following +shows the relevant parts of the `DeriveInput` struct we get from parsing the string `struct Pancakes;`: ``` @@ -821,92 +897,91 @@ fields on this struct for describing all sorts of Rust code; check the `syn` API docs for `DeriveInput` at *https://docs.rs/syn/0.11.11/syn/struct.DeriveInput.html* for more information. -We haven’t defined the `impl_hello_world` function; that’s where we’ll build -the new Rust code we want to include. Before we get to that, the last part of -this `hello_world_derive` function is using the `quote` crate’s `parse` -function to turn the output of the `impl_hello_world` function back into a -`TokenStream`. The returned `TokenStream` is added to the code that users of -our crate write so that when they compile their crate, they get extra -functionality we provide. +At this point we haven’t defined the `impl_hello_macro` function, which is +where we’ll build the new Rust code we want to include. Before we get to that, +the last part of this `hello_macro_derive` function is using the `parse` +function from the `quote` crate to turn the output of the `impl_hello_macro` +function back into a `TokenStream`. The returned `TokenStream` is added to the +code that users of our crate write so that when they compile their crate, they +get extra functionality we provide. You may have noticed that we’re calling `unwrap` to panic if the calls to the -`parse_derive_input` or `parse` functions fail because they’re unable to parse -the `TokenStream` or generate a `TokenStream`. Panicking on errors is necessary -in procedural macro code because `proc_macro_derive` functions must return -`TokenStream` rather than `Result` in order to conform to the procedural macro -API. We’ve chosen to keep this example simple by using `unwrap`; in production -code you should provide more specific error messages about what went wrong by -using `expect` or `panic!`. +`parse_derive_input` or `parse` functions fail here. Panicking on errors is +necessary in procedural macro code because `proc_macro_derive` functions must +return `TokenStream` rather than `Result` in order to conform to the procedural +macro API. We’ve chosen to keep this example simple by using `unwrap`; in +production code you should provide more specific error messages about what went +wrong by using `expect` or `panic!`. Now that we have the code to turn the annotated Rust code from a `TokenStream` -into a `String` and into a `DeriveInput` instance, let’s write the code that -will generate the code implementing the `HelloWorld` trait on the annotated -type: +into a `String` and a `DeriveInput` instance, let’s generate the code +implementing the `HelloMacro` trait on the annotated type: -Filename: hello-world-derive/src/lib.rs +Filename: hello_macro_derive/src/lib.rs ``` -fn impl_hello_world(ast: &syn::DeriveInput) -> quote::Tokens { +fn impl_hello_macro(ast: &syn::DeriveInput) -> quote::Tokens { let name = &ast.ident; quote! { - impl HelloWorld for #name { - fn hello_world() { - println!("Hello, World! My name is {}", stringify!(#name)); + impl HelloMacro for #name { + fn hello_macro() { + println!("Hello, Macro! My name is {}", stringify!(#name)); } } } } ``` -We are able to get an `Ident` struct instance containing the name (identifier) -of the annotated type using `ast.ident`. With the code from Listing A4-1, -`name` will be `Ident("Pancakes")`. - -The `quote!` macro from the `quote` crate lets us write up the Rust code that -we wish to return and convert it into `quote::Tokens`. The `quote!` macro lets -us use some really cool templating mechanics; we can write `#name` and `quote!` -will replace it with the value in the variable named `name`. You can even do -some repetition similar to the way regular macros work. Check out the `quote` -crate’s docs at *https://docs.rs/quote* for a thorough introduction. - -What we want to do for our procedural macro is generate an implementation of -our `HelloWorld` trait for the type the user of our crate has annotated, which -we can get by using `#name`. The trait implementation has one function, -`hello_world`, and the function body contains the functionality we want to -provide: printing `Hello, World! My name is` and then the name of the type the -user of our crate has annotated. The `stringify!` macro used here is built into -Rust. It takes a Rust expression, such as `1 + 2`, and at compile time turns -the expression into a string literal, such as `"1 + 2"`. This is different than -`format!` or `println!`, which evaluate the expression and then turn the result -into a `String`. There’s a possibility that `#name` would be an expression that -we would want to print out literally, and `stringify!` also saves an allocation -by converting `#name` to a string literal at compile time. - -At this point, `cargo build` should complete successfully in both `hello-world` -and `hello-world-derive`. Let’s hook these crates up to the code in Listing -A4-1 to see it in action! Create a new binary project in your `projects` -directory with `cargo new --bin pancakes`. We need to add both `hello-world` -and `hello-world-derive` as dependencies in the `pancakes` crate’s -*Cargo.toml*. If you’ve chosen to publish your versions of `hello-world` and -`hello-world-derive` to *https://crates.io* they would be regular dependencies; +We get an `Ident` struct instance containing the name (identifier) of the +annotated type using `ast.ident`. With the code from Listing AD-2, `name` will +be `Ident("Pancakes")`. + +The `quote!` macro lets us write up the Rust code that we want to return and +convert it into `quote::Tokens`. This macro also provides some really cool +templating mechanics; we can write `#name` and `quote!` will replace it with +the value in the variable named `name`. You can even do some repetition similar +to the way regular macros work. Check out the `quote` crate’s docs at +*https://docs.rs/quote* for a thorough introduction. + +We want our procedural macro to generate an implementation of our `HelloMacro` +trait for the type the user annotated, which we can get by using `#name`. The +trait implementation has one function, `hello_macro`, whose body contains the +functionality we want to provide: printing `Hello, Macro! My name is` and then +the name of the annotated type. + +The `stringify!` macro used here is built into Rust. It takes a Rust +expression, such as `1 + 2`, and at compile time turns the expression into a +string literal, such as `"1 + 2"`. This is different than `format!` or +`println!`, which evaluate the expression and then turn the result into a +`String`. There’s a possibility that the `#name` input might be an expression +to print out literally so we use `stringify!`. Using `stringify!` also saves an +allocation by converting `#name` to a string literal at compile time. + +At this point, `cargo build` should complete successfully in both `hello_macro` +and `hello_macro_derive`. Let’s hook these crates up to the code in Listing +AD-2 to see it in action! Create a new binary project in your `projects` +directory with `cargo new --bin pancakes`. We need to add both `hello_macro` +and `hello_macro_derive` as dependencies in the `pancakes` crate’s +*Cargo.toml*. If you’ve chosen to publish your versions of `hello_macro` and +`hello_macro_derive` to *https://crates.io* they would be regular dependencies; if not, you can specify them as `path` dependencies as follows: ``` [dependencies] -hello_world = { path = "../hello-world" } -hello_world_derive = { path = "../hello-world/hello-world-derive" } +hello_macro = { path = "../hello_macro" } +hello_macro_derive = { path = "../hello_macro/hello_macro_derive" } ``` -Put the code from Listing A4-1 into *src/main.rs*, and executing `cargo run` -should print `Hello, World! My name is Pancakes`! The implementation of the -`HelloWorld` trait from the procedural macro was included without the -`pancakes` crate needing to implement it; the `#[derive(HelloWorld)]` took care +Put the code from Listing AD-2 into *src/main.rs*, and when you run `cargo run` +it should print `Hello, Macro! My name is Pancakes!` The implementation of the +`HelloMacro` trait from the procedural macro was included without the +`pancakes` crate needing to implement it; the `#[derive(HelloMacro)]` took care of adding the trait implementation. -## The Future of Macros +### The Future of Macros -In the future, we’ll be expanding both declarative and procedural macros. A -better declarative macro system will be used with the `macro` keyword, and -we’ll add more types of procedural macros, for more powerful tasks than only +In the future, we’ll be expanding both declarative and procedural macros. Rust +will use better declarative macro system with the `macro` keyword, and we’ll +add more types of procedural macros, for more powerful tasks than just `derive`. These systems are still under development at the time of publication; please consult the online Rust documentation for the latest information. From 5e50630bf341f8e3dec3338ea91c43d03449af45 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sun, 25 Mar 2018 11:40:06 -0400 Subject: [PATCH 018/749] Small changes from chapter 10 first page review --- second-edition/src/ch10-01-syntax.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/second-edition/src/ch10-01-syntax.md b/second-edition/src/ch10-01-syntax.md index 9f9eca4a52..1c6bd1bd32 100644 --- a/second-edition/src/ch10-01-syntax.md +++ b/second-edition/src/ch10-01-syntax.md @@ -175,10 +175,10 @@ type in the struct definition where we would otherwise specify concrete data types. Note that because we’ve only used one generic type to define `Point`, this -says that the `Point` struct is generic over some type `T`, and the fields -`x` and `y` are *both* that same type, whatever that type may be. This means -that if we create an instance of a `Point` that has values of different -types, as in Listing 10-7, our code won’t compile: +definition says that the `Point` struct is generic over some type `T`, and +the fields `x` and `y` are *both* that same type, whatever that type may be. If +we create an instance of a `Point` that has values of different types, as in +Listing 10-7, our code won’t compile: Filename: src/main.rs @@ -384,8 +384,8 @@ fn main() { } ``` -Listing 10-11: Methods that use different generic types -than their struct’s definition +Listing 10-11: A method that uses different generic types +than its struct’s definition In `main`, we’ve defined a `Point` that has an `i32` for `x` (with value `5`) and an `f64` for `y` (with value `10.4`). The `p2` variable is a `Point` struct From b64de01431cdf1020ad3358d2f83e46af68a39ed Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sun, 25 Mar 2018 11:41:21 -0400 Subject: [PATCH 019/749] Fancy quotes --- second-edition/nostarch/appendix.md | 38 +++++++++---------- second-edition/nostarch/chapter03.md | 2 +- second-edition/nostarch/chapter04.md | 2 +- second-edition/nostarch/chapter16.md | 2 +- second-edition/nostarch/chapter20.md | 2 +- second-edition/nostarch/introduction.md | 16 ++++---- second-edition/src/appendix-02-operators.md | 6 +-- .../src/appendix-03-derivable-traits.md | 14 +++---- second-edition/src/appendix-04-macros.md | 18 ++++----- .../src/appendix-06-newest-features.md | 4 +- .../ch03-00-common-programming-concepts.md | 2 +- .../src/ch04-01-what-is-ownership.md | 2 +- second-edition/src/ch16-02-message-passing.md | 2 +- second-edition/src/ch20-01-single-threaded.md | 2 +- 14 files changed, 56 insertions(+), 56 deletions(-) diff --git a/second-edition/nostarch/appendix.md b/second-edition/nostarch/appendix.md index c9128e45d2..91caaf927a 100644 --- a/second-edition/nostarch/appendix.md +++ b/second-edition/nostarch/appendix.md @@ -88,7 +88,7 @@ potential future use. text about what this appendix contains? Quick example below --> -This appendix is a glossary of Rust's syntax, including operators and other +This appendix is a glossary of Rust’s syntax, including operators and other symbols that appear by themselves or in the context of paths, generics, trait bounds, macros, attributes, comments, tuples, and brackets. @@ -165,8 +165,8 @@ symbols/what counts as a non-operator symbol? --> -The following lists all non-letters that don't function as operators; that is, -they don't behave like a function or method call. +The following lists all non-letters that don’t function as operators; that is, +they don’t behave like a function or method call. #### Standalone Syntax @@ -257,7 +257,7 @@ they don't behave like a function or method call. ## C - Derivable Traits -In various places in the book, we've discussed the `derive` attribute +In various places in the book, we’ve discussed the `derive` attribute that you can apply to a struct or enum definition. The `Clone` trait allows you to explicitly create a deep copy of a value, and the duplication process might involve running arbitrary code and copying heap -data. See the "Ways Variables and Data Interact: Clone" section in Chapter 4 +data. See the “Ways Variables and Data Interact: Clone” section in Chapter 4 for more information on `Clone`. Deriving `Clone` implements the `clone` method which, when implemented for the @@ -424,7 +424,7 @@ returned from `to_vec` will need to own its instances, so `to_vec` calls `clone` on each item. Thus, the type stored in the slice must implement `Clone`. The `Copy` trait allows you to duplicate a value by only copying bits stored on -the stack; no arbitrary code is necessary. See the "Stack-Only Data: Copy" +the stack; no arbitrary code is necessary. See the “Stack-Only Data: Copy” section in Chapter 4 for more information on `Copy`. @@ -488,20 +488,20 @@ the `Option`. ## Appendix D: Macros -We’ve used macros like `println!` throughout this book, but haven't fully +We’ve used macros like `println!` throughout this book, but haven’t fully explored what a macro is and how it works. This appendix will explain: - What macros are and how they differ from functions - How to define a declarative macro to do metaprogramming - How to define a procedural macro to create custom `derive` traits -We're covering the details of macros in an appendix because they’re still +We’re covering the details of macros in an appendix because they’re still evolving in Rust. Macros have changed and, in the near future, will change at a quicker rate than the rest of the language and standard library since Rust 1.0, so this section is more likely to date than the rest of the book. The code shown here will still continue to work with future versions, due to Rust’s stability guarantees, but there may be additional capabilities or easier ways -to write macros that weren't available at the time of this publication. Bear +to write macros that weren’t available at the time of this publication. Bear that in mind if you try to implement anything from this appendix. ### The Difference Between Macros and Functions @@ -576,7 +576,7 @@ let v: Vec = vec![1, 2, 3]; ``` We could also use the `vec!` macro to make a vector of two integers or a vector -of five string slices---we wouldn't be able to use a function to do the same +of five string slices---we wouldn’t be able to use a function to do the same because we wouldn’t know the number or type of values up front. Let’s take a look at a slightly simplified definition of the `vec!` macro in @@ -640,7 +640,7 @@ whatever precedes the `*`. When we call this macro with `vec![1, 2, 3];`, the `$x` pattern matches three times with the three expressions `1`, `2`, and `3`. -Now let's look at the pattern in the body of the code associated with this arm: +Now let’s look at the pattern in the body of the code associated with this arm: The `temp_vec.push()` code within the `$()*` part is generated for each part that matches `$()` in the pattern, zero or more times depending on how many times the pattern matches. The `$x` is replaced with each expression matched. @@ -679,7 +679,7 @@ code as declarative macros do. At the time of writing, you can only really define procedural macros to allow your traits to be implemented on a type by specifying the trait name in a `derive` annotation. -We're going to create a crate named `hello_macro` that defines a trait named +We’re going to create a crate named `hello_macro` that defines a trait named `HelloMacro` with one associated function named `hello_macro`. Rather than making users of our crate implement the `HelloMacro` trait for each of their types, we’ll provide a procedural macro so users can annotate their type with @@ -781,12 +781,12 @@ procedural macro in `hello_macro_derive` as well. The two crates will need to be published separately, though, and programmers using these crates will need to add both as dependencies and bring them both into scope. We could instead have the `hello_macro` crate use `hello_macro_derive` as a dependency and -re-export the procedural macro code, but the way we've structured the project +re-export the procedural macro code, but the way we’ve structured the project makes it possible for programmers to use `hello_macro` even if they don’t want the `derive` functionality. We need to declare the `hello_macro_derive` crate as a procedural macro crate. -We'll also need functionality from the `syn` and `quote` crates, as we'll see +We’ll also need functionality from the `syn` and `quote` crates, as we’ll see in a moment, so we need to add them as dependencies. Add the following to the *Cargo.toml* file for `hello_macro_derive`: @@ -805,7 +805,7 @@ To start defining the procedural macro, place the code from Listing AD-3 in your *src/lib.rs* for the `hello_macro_derive` crate. Note that this won’t compile until we add a definition for the `impl_hello_macro` function. -Note the way we've split the functions in AD-3; this will be the same for +Note the way we’ve split the functions in AD-3; this will be the same for almost every procedural macro crate you see or create, as it makes writing a procedural macro more convenient. What you choose to do in the place where the `impl_hello_macro` function is called will be different depending on the diff --git a/second-edition/nostarch/chapter03.md b/second-edition/nostarch/chapter03.md index 9d86a8e50e..2350ce57b2 100644 --- a/second-edition/nostarch/chapter03.md +++ b/second-edition/nostarch/chapter03.md @@ -6,7 +6,7 @@ This chapter covers concepts that appear in almost every programming language and how they work in Rust. Many programming languages have much in common at their core. None of the concepts presented in this chapter are unique to Rust, -but we'll discuss them in the context of Rust and explain the conventions +but we’ll discuss them in the context of Rust and explain the conventions around using these concepts. Specifically, you’ll learn about variables, basic types, functions, comments, diff --git a/second-edition/nostarch/chapter04.md b/second-edition/nostarch/chapter04.md index e5cccae7a0..e70dc21555 100644 --- a/second-edition/nostarch/chapter04.md +++ b/second-edition/nostarch/chapter04.md @@ -19,7 +19,7 @@ Some languages have garbage collection that constantly looks for no longer used memory as the program runs; in other languages, the programmer must explicitly allocate and free the memory. Rust uses a third approach: memory is managed through a system of ownership with a set of rules that the compiler checks at -compile time. None of the ownership features slow down your program while it's +compile time. None of the ownership features slow down your program while it’s running. Because ownership is a new concept for many programmers, it does take some time diff --git a/second-edition/nostarch/chapter16.md b/second-edition/nostarch/chapter16.md index e6f2a55db6..530ce57a49 100644 --- a/second-edition/nostarch/chapter16.md +++ b/second-edition/nostarch/chapter16.md @@ -643,7 +643,7 @@ Listing 16-9: Attempting to use `val` after we’ve sent it down the channel Here, we try to print `val` after we’ve sent it down the channel via `tx.send`. Allowing this would be a bad idea: once the value has been sent to another thread, that thread could modify or drop it before we try to use the value -again. Potentially, the other thread's modifications could cause errors or +again. Potentially, the other thread’s modifications could cause errors or unexpected results due to inconsistent or nonexistent data. However, Rust gives us an error if we try to compile the code in Listing 16-9: diff --git a/second-edition/nostarch/chapter20.md b/second-edition/nostarch/chapter20.md index 4c3b9b6feb..ab4ec59c8a 100644 --- a/second-edition/nostarch/chapter20.md +++ b/second-edition/nostarch/chapter20.md @@ -97,7 +97,7 @@ listen to the address `127.0.0.1:7878`. Breaking this address down, the section before the colon is an IP address representing your own computer (this is the same on each computer, and doesn’t represent the authors’ computer specifically), and `7878` is the port. We’ve chosen this port for two reasons: -HTTP is normally accepted on this port and 7878 is "rust" typed on a telephone. +HTTP is normally accepted on this port and 7878 is “rust” typed on a telephone. Note that connecting to port 80 requires administrator privileges; non-administrators can only listen on ports higher than 1024. diff --git a/second-edition/nostarch/introduction.md b/second-edition/nostarch/introduction.md index b2890fd8ff..f014a1c123 100644 --- a/second-edition/nostarch/introduction.md +++ b/second-edition/nostarch/introduction.md @@ -115,26 +115,26 @@ Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match` expressions, and the `if let` control flow construct. Structs and enums are the ways to make custom types in Rust. -In Chapter 7, you'll learn about Rust's module system and privacy for +In Chapter 7, you’ll learn about Rust’s module system and privacy for organizing your code and its public API. Chapter 8 discusses some common collection data structures provided by the standard library: vectors, strings, -and hash maps. Chapter 9 is all about Rust's error handling philosophy and +and hash maps. Chapter 9 is all about Rust’s error handling philosophy and techniques. Chapter 10 digs into generics, traits, and lifetimes, which give you the power to define code that applies to multiple types. Chapter 11 is all about testing, -which is still necessary even with Rust's safety guarantees to ensure your -program's logic is correct. In Chapter 12, we'll build a subset of the +which is still necessary even with Rust’s safety guarantees to ensure your +program’s logic is correct. In Chapter 12, we’ll build a subset of the functionality of the `grep` command line tool that searches for text within -files and we'll use many of the concepts we discussed in the previous chapters. +files and we’ll use many of the concepts we discussed in the previous chapters. Chapter 13 explores closures and iterators: features of Rust that come from -functional programming languages. In Chapter 14, we'll explore more about Cargo +functional programming languages. In Chapter 14, we’ll explore more about Cargo and talk about best practices for sharing your libraries with others. Chapter 15 discusses smart pointers provided by the standard library and the traits that enable their functionality. -In Chapter 16, we'll go through different models of concurrent programming and +In Chapter 16, we’ll go through different models of concurrent programming and how Rust helps you to program using multiple threads fearlessly. Chapter 17 looks at how Rust idioms compare to Object Oriented Programming principles you may be familiar with. @@ -144,7 +144,7 @@ ways of expressing ideas throughout Rust programs. Chapter 19 is a smorgasbord of advanced topics that you might be interested in, including unsafe Rust and more about lifetimes, traits, types, functions, and closures. -In Chapter 20, we'll finish up with a project where we'll implement a low-level +In Chapter 20, we’ll finish up with a project where we’ll implement a low-level multithreaded web server! Finally, there are some appendices. These contain useful information about the diff --git a/second-edition/src/appendix-02-operators.md b/second-edition/src/appendix-02-operators.md index 56f10ea915..73c429163b 100644 --- a/second-edition/src/appendix-02-operators.md +++ b/second-edition/src/appendix-02-operators.md @@ -4,7 +4,7 @@ text about what this appendix contains? Quick example below --> -This appendix is a glossary of Rust's syntax, including operators and other +This appendix is a glossary of Rust’s syntax, including operators and other symbols that appear by themselves or in the context of paths, generics, trait bounds, macros, attributes, comments, tuples, and brackets. @@ -81,8 +81,8 @@ symbols/what counts as a non-operator symbol? --> -The following lists all non-letters that don't function as operators; that is, -they don't behave like a function or method call. +The following lists all non-letters that don’t function as operators; that is, +they don’t behave like a function or method call. #### Standalone Syntax diff --git a/second-edition/src/appendix-03-derivable-traits.md b/second-edition/src/appendix-03-derivable-traits.md index 88ccea5b90..58daaeec47 100644 --- a/second-edition/src/appendix-03-derivable-traits.md +++ b/second-edition/src/appendix-03-derivable-traits.md @@ -1,6 +1,6 @@ ## C - Derivable Traits -In various places in the book, we've discussed the `derive` attribute +In various places in the book, we’ve discussed the `derive` attribute that you can apply to a struct or enum definition. The `Clone` trait allows you to explicitly create a deep copy of a value, and the duplication process might involve running arbitrary code and copying heap -data. See the "Ways Variables and Data Interact: Clone" section in Chapter 4 +data. See the “Ways Variables and Data Interact: Clone” section in Chapter 4 for more information on `Clone`. Deriving `Clone` implements the `clone` method which, when implemented for the @@ -167,7 +167,7 @@ returned from `to_vec` will need to own its instances, so `to_vec` calls `clone` on each item. Thus, the type stored in the slice must implement `Clone`. The `Copy` trait allows you to duplicate a value by only copying bits stored on -the stack; no arbitrary code is necessary. See the "Stack-Only Data: Copy" +the stack; no arbitrary code is necessary. See the “Stack-Only Data: Copy” section in Chapter 4 for more information on `Copy`. diff --git a/second-edition/src/appendix-04-macros.md b/second-edition/src/appendix-04-macros.md index 32d6ae2d67..5f8bfbff88 100644 --- a/second-edition/src/appendix-04-macros.md +++ b/second-edition/src/appendix-04-macros.md @@ -1,19 +1,19 @@ ## Appendix D: Macros -We’ve used macros like `println!` throughout this book, but haven't fully +We’ve used macros like `println!` throughout this book, but haven’t fully explored what a macro is and how it works. This appendix will explain: - What macros are and how they differ from functions - How to define a declarative macro to do metaprogramming - How to define a procedural macro to create custom `derive` traits -We're covering the details of macros in an appendix because they’re still +We’re covering the details of macros in an appendix because they’re still evolving in Rust. Macros have changed and, in the near future, will change at a quicker rate than the rest of the language and standard library since Rust 1.0, so this section is more likely to date than the rest of the book. The code shown here will still continue to work with future versions, due to Rust’s stability guarantees, but there may be additional capabilities or easier ways -to write macros that weren't available at the time of this publication. Bear +to write macros that weren’t available at the time of this publication. Bear that in mind if you try to implement anything from this appendix. ### The Difference Between Macros and Functions @@ -88,7 +88,7 @@ let v: Vec = vec![1, 2, 3]; ``` We could also use the `vec!` macro to make a vector of two integers or a vector -of five string slices---we wouldn't be able to use a function to do the same +of five string slices---we wouldn’t be able to use a function to do the same because we wouldn’t know the number or type of values up front. Let’s take a look at a slightly simplified definition of the `vec!` macro in @@ -153,7 +153,7 @@ whatever precedes the `*`. When we call this macro with `vec![1, 2, 3];`, the `$x` pattern matches three times with the three expressions `1`, `2`, and `3`. -Now let's look at the pattern in the body of the code associated with this arm: +Now let’s look at the pattern in the body of the code associated with this arm: The `temp_vec.push()` code within the `$()*` part is generated for each part that matches `$()` in the pattern, zero or more times depending on how many times the pattern matches. The `$x` is replaced with each expression matched. @@ -193,7 +193,7 @@ code as declarative macros do. At the time of writing, you can only really define procedural macros to allow your traits to be implemented on a type by specifying the trait name in a `derive` annotation. -We're going to create a crate named `hello_macro` that defines a trait named +We’re going to create a crate named `hello_macro` that defines a trait named `HelloMacro` with one associated function named `hello_macro`. Rather than making users of our crate implement the `HelloMacro` trait for each of their types, we’ll provide a procedural macro so users can annotate their type with @@ -294,12 +294,12 @@ procedural macro in `hello_macro_derive` as well. The two crates will need to be published separately, though, and programmers using these crates will need to add both as dependencies and bring them both into scope. We could instead have the `hello_macro` crate use `hello_macro_derive` as a dependency and -re-export the procedural macro code, but the way we've structured the project +re-export the procedural macro code, but the way we’ve structured the project makes it possible for programmers to use `hello_macro` even if they don’t want the `derive` functionality. We need to declare the `hello_macro_derive` crate as a procedural macro crate. -We'll also need functionality from the `syn` and `quote` crates, as we'll see +We’ll also need functionality from the `syn` and `quote` crates, as we’ll see in a moment, so we need to add them as dependencies. Add the following to the *Cargo.toml* file for `hello_macro_derive`: @@ -318,7 +318,7 @@ To start defining the procedural macro, place the code from Listing AD-3 in your *src/lib.rs* for the `hello_macro_derive` crate. Note that this won’t compile until we add a definition for the `impl_hello_macro` function. -Note the way we've split the functions in AD-3; this will be the same for +Note the way we’ve split the functions in AD-3; this will be the same for almost every procedural macro crate you see or create, as it makes writing a procedural macro more convenient. What you choose to do in the place where the `impl_hello_macro` function is called will be different depending on the diff --git a/second-edition/src/appendix-06-newest-features.md b/second-edition/src/appendix-06-newest-features.md index 4c345b5dd5..af226c896f 100644 --- a/second-edition/src/appendix-06-newest-features.md +++ b/second-edition/src/appendix-06-newest-features.md @@ -63,7 +63,7 @@ fn main() { If you have a complex module tree with many different submodules and you need to import a few items from each one, it might be useful to group all the imports in the same declaration to keep your code clean and avoid repeating the -base modules' name. +base modules’ name. The `use` declaration supports nesting to help you in those cases, both with simple imports and glob ones. For example this snippets imports `bar`, `Foo`, @@ -121,7 +121,7 @@ Rust 1.26.0 added 128-bit integer primitives: - `i128`: A 128-bit signed integer with range [-(2^127), 2^127 - 1] These primitives are implemented efficiently via LLVM support. They are -available even on platforms that don't natively support 128-bit integers and +available even on platforms that don’t natively support 128-bit integers and can be used like the other integer types. These primitives can be very useful for algorithms that need to use very large diff --git a/second-edition/src/ch03-00-common-programming-concepts.md b/second-edition/src/ch03-00-common-programming-concepts.md index a5d537bd75..69005de2ca 100644 --- a/second-edition/src/ch03-00-common-programming-concepts.md +++ b/second-edition/src/ch03-00-common-programming-concepts.md @@ -3,7 +3,7 @@ This chapter covers concepts that appear in almost every programming language and how they work in Rust. Many programming languages have much in common at their core. None of the concepts presented in this chapter are unique to Rust, -but we'll discuss them in the context of Rust and explain the conventions +but we’ll discuss them in the context of Rust and explain the conventions around using these concepts. Specifically, you’ll learn about variables, basic types, functions, comments, diff --git a/second-edition/src/ch04-01-what-is-ownership.md b/second-edition/src/ch04-01-what-is-ownership.md index 27bdc6f457..1d26b920e9 100644 --- a/second-edition/src/ch04-01-what-is-ownership.md +++ b/second-edition/src/ch04-01-what-is-ownership.md @@ -8,7 +8,7 @@ Some languages have garbage collection that constantly looks for no longer used memory as the program runs; in other languages, the programmer must explicitly allocate and free the memory. Rust uses a third approach: memory is managed through a system of ownership with a set of rules that the compiler checks at -compile time. None of the ownership features slow down your program while it's +compile time. None of the ownership features slow down your program while it’s running. Because ownership is a new concept for many programmers, it does take some time diff --git a/second-edition/src/ch16-02-message-passing.md b/second-edition/src/ch16-02-message-passing.md index 3c4e1c2a23..629ee3e19d 100644 --- a/second-edition/src/ch16-02-message-passing.md +++ b/second-edition/src/ch16-02-message-passing.md @@ -195,7 +195,7 @@ down the channel Here, we try to print `val` after we’ve sent it down the channel via `tx.send`. Allowing this would be a bad idea: once the value has been sent to another thread, that thread could modify or drop it before we try to use the value -again. Potentially, the other thread's modifications could cause errors or +again. Potentially, the other thread’s modifications could cause errors or unexpected results due to inconsistent or nonexistent data. However, Rust gives us an error if we try to compile the code in Listing 16-9: diff --git a/second-edition/src/ch20-01-single-threaded.md b/second-edition/src/ch20-01-single-threaded.md index d65413ba20..61d5082ef2 100644 --- a/second-edition/src/ch20-01-single-threaded.md +++ b/second-edition/src/ch20-01-single-threaded.md @@ -59,7 +59,7 @@ listen to the address `127.0.0.1:7878`. Breaking this address down, the section before the colon is an IP address representing your own computer (this is the same on each computer, and doesn’t represent the authors’ computer specifically), and `7878` is the port. We’ve chosen this port for two reasons: -HTTP is normally accepted on this port and 7878 is "rust" typed on a telephone. +HTTP is normally accepted on this port and 7878 is “rust” typed on a telephone. Note that connecting to port 80 requires administrator privileges; non-administrators can only listen on ports higher than 1024. From ebfb294cc952a37c81df605f0cc6bb65d9c23975 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sun, 25 Mar 2018 20:59:02 -0400 Subject: [PATCH 020/749] Small changes made in chapter 10's first page review --- second-edition/nostarch/chapter10.md | 49 ++++++++++--------- second-edition/src/ch10-02-traits.md | 15 +++--- second-edition/src/ch10-03-lifetime-syntax.md | 24 ++++----- 3 files changed, 45 insertions(+), 43 deletions(-) diff --git a/second-edition/nostarch/chapter10.md b/second-edition/nostarch/chapter10.md index 6ad017e2f4..3883a089b7 100644 --- a/second-edition/nostarch/chapter10.md +++ b/second-edition/nostarch/chapter10.md @@ -345,10 +345,10 @@ type in the struct definition where we would otherwise specify concrete data types. Note that because we’ve only used one generic type to define `Point`, this -says that the `Point` struct is generic over some type `T`, and the fields -`x` and `y` are *both* that same type, whatever that type may be. This means -that if we create an instance of a `Point` that has values of different -types, as in Listing 10-7, our code won’t compile: +definition says that the `Point` struct is generic over some type `T`, and +the fields `x` and `y` are *both* that same type, whatever that type may be. If +we create an instance of a `Point` that has values of different types, as in +Listing 10-7, our code won’t compile: Filename: src/main.rs @@ -548,7 +548,7 @@ fn main() { } ``` -Listing 10-11: Methods that use different generic types than their struct’s +Listing 10-11: A method that uses different generic types than its struct’s definition In `main`, we’ve defined a `Point` that has an `i32` for `x` (with value `5`) @@ -662,8 +662,8 @@ pub trait Summary { } ``` -Listing 10-12: Definition of a `Summary` trait that consists of the behavior -provided by a `summarize` method +Listing 10-12: A `Summary` trait that consists of the behavior provided by a +`summarize` method Here, we declare a trait using the `trait` keyword and then the trait’s name, which is `Summary` in this case. Inside the curly brackets we declare the @@ -760,7 +760,7 @@ crate to implement it, which it is because we put the `pub` keyword before `trait` in Listing 10-12. One restriction to note with trait implementations is that we can implement a -trait on a type only if either the trait or the type is local to your crate. +trait on a type only if either the trait or the type is local to our crate. For example, we can implement standard library traits like `Display` on a custom type like `Tweet` as part of our `aggregator` crate functionality, because the type `Tweet` is local to our `aggregator` crate. We can also @@ -990,12 +990,13 @@ error[E0507]: cannot move out of borrowed content The key line in this error is `cannot move out of type [T], a non-copy slice`. With our non-generic versions of the `largest` function, we were only trying to -find the largest `i32` or `char`. As discussed in “Stack-Only Data: Copy” +find the largest `i32` or `char`. As discussed in the “Stack-Only Data: Copy” section in Chapter 4, types like `i32` and `char` that have a known size can be stored on the stack, so they implement the `Copy` trait. But when we made the -`largest` function generic, the `list` parameter could have types in it that -don’t implement the `Copy` trait. Consequently, we wouldn’t be able to move the -value out of `list[0]` and into the `largest` variable, resulting in this error. +`largest` function generic, it became possible for the `list` parameter to have +types in it that don’t implement the `Copy` trait. Consequently, we wouldn’t be +able to move the value out of `list[0]` and into the `largest` variable, +resulting in this error. To call this code with only those types that implement the `Copy` trait, we can add `Copy` to the trait bounds of `T`! Listing 10-15 shows the complete code of @@ -1356,7 +1357,7 @@ separate the annotation from the reference’s type. Here are some examples: a reference to an `i32` without a lifetime parameter, a reference to an `i32` that has a lifetime parameter named `'a`, and a mutable -reference to an `i32` that also has the lifetime `'a`: +reference to an `i32` that also has the lifetime `'a`. ``` &i32 // a reference @@ -1405,14 +1406,13 @@ The function signature now tells Rust that for some lifetime `'a`, the function takes two parameters, both of which are string slices that live at least as long as lifetime `'a`. The function signature also tells Rust that the string slice returned from the function will live at least as long as lifetime `'a`. -These constraints are what we want Rust to enforce. - -As discussed earlier, by specifying the lifetime parameters in this function -signature, we’re not changing the lifetimes of any values passed in or -returned. Instead, we’re specifying that the borrow checker should reject any -values that don’t adhere to these constraints. Note that the `longest` function -doesn’t need to know exactly how long `x` and `y` will live, only that some -scope can be substituted for `'a` that will satisfy this signature. +These constraints are what we want Rust to enforce. Remember, when we specify +the lifetime parameters in this function signature, we’re not changing the +lifetimes of any values passed in or returned. Rather, we’re specifying that +the borrow checker should reject any values that don’t adhere to these +constraints. Note that the `longest` function doesn’t need to know exactly how +long `x` and `y` will live, only that some scope can be substituted for `'a` +that will satisfy this signature. When annotating lifetimes in functions, the annotations go in the function signature, not in the function body. Rust can analyze the code within the @@ -1666,7 +1666,7 @@ fn first_word<'a>(s: &'a str) -> &'a str { ``` After writing a lot of Rust code, the Rust team found that Rust programmers -were entering the same lifetime annotations repeatedly in particular +were entering the same lifetime annotations over and over in particular situations. These situations were predictable and followed a few deterministic patterns. The developers programmed these patterns into the compiler’s code so the borrow checker could infer the lifetimes in these situations and not need @@ -1818,7 +1818,8 @@ and all lifetimes have been accounted for. One special lifetime we need to discuss is `'static`, which denotes the entire duration of the program. All string literals have the `'static` lifetime, which -we can annotate as follows: `let s: &'static str = "I have a static lifetime.";` +we can annotate as follows: `let s: &'static str = "I have a static +lifetime.";`. The text of this string is stored directly in the binary of your program, which is always available. Therefore, the lifetime of all string literals is @@ -1866,7 +1867,7 @@ the declarations of the lifetime parameter `'a` and the generic type parameter We covered a lot in this chapter! Now that you know about generic type parameters, traits and trait bounds, and generic lifetime parameters, you’re -ready to write code without repetition yet works in many different situations. +ready to write code without repetition that works in many different situations. Generic type parameters let you apply the code to different types. Traits and trait bounds ensure that even though the types are generic, they’ll have the behavior the code needs. You learned how to use lifetime annotations to ensure diff --git a/second-edition/src/ch10-02-traits.md b/second-edition/src/ch10-02-traits.md index d46bd1e095..e58ac981c0 100644 --- a/second-edition/src/ch10-02-traits.md +++ b/second-edition/src/ch10-02-traits.md @@ -35,8 +35,8 @@ pub trait Summary { } ``` -Listing 10-12: Definition of a `Summary` trait that -consists of the behavior provided by a `summarize` method +Listing 10-12: A `Summary` trait that consists of the +behavior provided by a `summarize` method Here, we declare a trait using the `trait` keyword and then the trait’s name, which is `Summary` in this case. Inside the curly brackets we declare the @@ -137,7 +137,7 @@ crate to implement it, which it is because we put the `pub` keyword before `trait` in Listing 10-12. One restriction to note with trait implementations is that we can implement a -trait on a type only if either the trait or the type is local to your crate. +trait on a type only if either the trait or the type is local to our crate. For example, we can implement standard library traits like `Display` on a custom type like `Tweet` as part of our `aggregator` crate functionality, because the type `Tweet` is local to our `aggregator` crate. We can also @@ -367,12 +367,13 @@ error[E0507]: cannot move out of borrowed content The key line in this error is `cannot move out of type [T], a non-copy slice`. With our non-generic versions of the `largest` function, we were only trying to -find the largest `i32` or `char`. As discussed in “Stack-Only Data: Copy” +find the largest `i32` or `char`. As discussed in the “Stack-Only Data: Copy” section in Chapter 4, types like `i32` and `char` that have a known size can be stored on the stack, so they implement the `Copy` trait. But when we made the -`largest` function generic, the `list` parameter could have types in it that -don’t implement the `Copy` trait. Consequently, we wouldn’t be able to move the -value out of `list[0]` and into the `largest` variable, resulting in this error. +`largest` function generic, it became possible for the `list` parameter to have +types in it that don’t implement the `Copy` trait. Consequently, we wouldn’t be +able to move the value out of `list[0]` and into the `largest` variable, +resulting in this error. To call this code with only those types that implement the `Copy` trait, we can add `Copy` to the trait bounds of `T`! Listing 10-15 shows the complete code of diff --git a/second-edition/src/ch10-03-lifetime-syntax.md b/second-edition/src/ch10-03-lifetime-syntax.md index a9e9cb88f2..7fd80971bc 100644 --- a/second-edition/src/ch10-03-lifetime-syntax.md +++ b/second-edition/src/ch10-03-lifetime-syntax.md @@ -226,7 +226,7 @@ separate the annotation from the reference’s type. Here are some examples: a reference to an `i32` without a lifetime parameter, a reference to an `i32` that has a lifetime parameter named `'a`, and a mutable -reference to an `i32` that also has the lifetime `'a`: +reference to an `i32` that also has the lifetime `'a`. ```rust,ignore &i32 // a reference @@ -276,14 +276,13 @@ The function signature now tells Rust that for some lifetime `'a`, the function takes two parameters, both of which are string slices that live at least as long as lifetime `'a`. The function signature also tells Rust that the string slice returned from the function will live at least as long as lifetime `'a`. -These constraints are what we want Rust to enforce. - -As discussed earlier, by specifying the lifetime parameters in this function -signature, we’re not changing the lifetimes of any values passed in or -returned. Instead, we’re specifying that the borrow checker should reject any -values that don’t adhere to these constraints. Note that the `longest` function -doesn’t need to know exactly how long `x` and `y` will live, only that some -scope can be substituted for `'a` that will satisfy this signature. +These constraints are what we want Rust to enforce. Remember, when we specify +the lifetime parameters in this function signature, we’re not changing the +lifetimes of any values passed in or returned. Rather, we’re specifying that +the borrow checker should reject any values that don’t adhere to these +constraints. Note that the `longest` function doesn’t need to know exactly how +long `x` and `y` will live, only that some scope can be substituted for `'a` +that will satisfy this signature. When annotating lifetimes in functions, the annotations go in the function signature, not in the function body. Rust can analyze the code within the @@ -546,7 +545,7 @@ fn first_word<'a>(s: &'a str) -> &'a str { ``` After writing a lot of Rust code, the Rust team found that Rust programmers -were entering the same lifetime annotations repeatedly in particular +were entering the same lifetime annotations over and over in particular situations. These situations were predictable and followed a few deterministic patterns. The developers programmed these patterns into the compiler’s code so the borrow checker could infer the lifetimes in these situations and not need @@ -706,7 +705,8 @@ and all lifetimes have been accounted for. One special lifetime we need to discuss is `'static`, which denotes the entire duration of the program. All string literals have the `'static` lifetime, which -we can annotate as follows: `let s: &'static str = "I have a static lifetime.";` +we can annotate as follows: `let s: &'static str = "I have a static +lifetime.";`. The text of this string is stored directly in the binary of your program, which is always available. Therefore, the lifetime of all string literals is @@ -753,7 +753,7 @@ the declarations of the lifetime parameter `'a` and the generic type parameter We covered a lot in this chapter! Now that you know about generic type parameters, traits and trait bounds, and generic lifetime parameters, you’re -ready to write code without repetition yet works in many different situations. +ready to write code without repetition that works in many different situations. Generic type parameters let you apply the code to different types. Traits and trait bounds ensure that even though the types are generic, they’ll have the behavior the code needs. You learned how to use lifetime annotations to ensure From e28edb48a51e5cd2e4724814ea3f8e97f36d959e Mon Sep 17 00:00:00 2001 From: Joseph Lyons Date: Sun, 25 Mar 2018 23:04:10 -0400 Subject: [PATCH 021/749] Minor wording tweak --- second-edition/src/ch01-03-hello-cargo.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/second-edition/src/ch01-03-hello-cargo.md b/second-edition/src/ch01-03-hello-cargo.md index b6051c6687..7143668112 100644 --- a/second-edition/src/ch01-03-hello-cargo.md +++ b/second-edition/src/ch01-03-hello-cargo.md @@ -30,7 +30,8 @@ installation to determine how to install Cargo separately. Let’s create a new project using Cargo and look at how it differs from our original Hello World project. Navigate back to your *projects* directory (or -wherever you decided to put your code) and then on any operating system run: +whichever location you decided to place your code) and then on any operating +system run: ```text $ cargo new hello_cargo --bin From e39ba2d02e1f7ba1c0c6f78841ad7357a577dc6b Mon Sep 17 00:00:00 2001 From: Joseph Lyons Date: Sun, 25 Mar 2018 23:07:59 -0400 Subject: [PATCH 022/749] Divided sentence into two with semicolon --- second-edition/src/ch01-03-hello-cargo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/second-edition/src/ch01-03-hello-cargo.md b/second-edition/src/ch01-03-hello-cargo.md index 7143668112..1cc5e124c6 100644 --- a/second-edition/src/ch01-03-hello-cargo.md +++ b/second-edition/src/ch01-03-hello-cargo.md @@ -115,7 +115,7 @@ Listing 1-1! So far, the differences between our previous project and the project generated by Cargo are that with Cargo our code goes in the *src* directory, and we have a *Cargo.toml* configuration file in the top directory. -Cargo expects your source files to live inside the *src* directory so that the +Cargo expects your source files to live inside the *src* directory; the top-level project directory is just for READMEs, license information, configuration files, and anything else not related to your code. In this way, using Cargo helps you keep your projects nice and tidy. There’s a place for From 3d9580b308554ef42f03512bae7ac6d690597748 Mon Sep 17 00:00:00 2001 From: Joseph Lyons Date: Sun, 25 Mar 2018 23:09:18 -0400 Subject: [PATCH 023/749] A little more formal wording on this sentence --- second-edition/src/ch01-03-hello-cargo.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/second-edition/src/ch01-03-hello-cargo.md b/second-edition/src/ch01-03-hello-cargo.md index 1cc5e124c6..c2206767bd 100644 --- a/second-edition/src/ch01-03-hello-cargo.md +++ b/second-edition/src/ch01-03-hello-cargo.md @@ -210,8 +210,8 @@ providing specific instructions for Linux and Mac versus Windows. When your project is finally ready for release, you can use `cargo build --release` to compile your project with optimizations. This will create an executable in *target/release* instead of *target/debug*. These optimizations -make your Rust code run faster, but turning them on makes your program take -longer to compile. This is why there are two different profiles: one for +make your Rust code run faster, but turning them on increases the compilation +time of your program. This is why there are two different profiles: one for development when you want to be able to rebuild quickly and often, and one for building the final program you’ll give to a user that won’t be rebuilt repeatedly and that will run as fast as possible. If you’re benchmarking the From d0f8a29f4cb80186361a0b5b29a7f74d9c1559ef Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Mon, 26 Mar 2018 16:15:30 -0400 Subject: [PATCH 024/749] Chapter 19 as received from nostarch after copyediting --- second-edition/nostarch/odt/chapter19.docx | Bin 0 -> 186912 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 second-edition/nostarch/odt/chapter19.docx diff --git a/second-edition/nostarch/odt/chapter19.docx b/second-edition/nostarch/odt/chapter19.docx new file mode 100644 index 0000000000000000000000000000000000000000..10eb5fd4f592c7a7b97fe4fc809f94dded240393 GIT binary patch literal 186912 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%0DptST;(X=TF9n5KHbpZZR%0leXAKruA=6%@I+ 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 z

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 z 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 aGr*e_SQLQ{6c%BS1|BT@{tB>2V*mip*OxB< literal 0 HcmV?d00001 From 905b73fbd08ec1aaa5358551c863b2deee0c501a Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Mon, 26 Mar 2018 16:27:39 -0400 Subject: [PATCH 025/749] Remove review comments --- second-edition/nostarch/chapter19.md | 120 ------------------ .../src/ch19-00-advanced-features.md | 13 -- second-edition/src/ch19-01-unsafe-rust.md | 28 ---- .../src/ch19-02-advanced-lifetimes.md | 29 ----- second-edition/src/ch19-03-advanced-traits.md | 25 ---- second-edition/src/ch19-04-advanced-types.md | 20 --- ...ch19-05-advanced-functions-and-closures.md | 5 - 7 files changed, 240 deletions(-) diff --git a/second-edition/nostarch/chapter19.md b/second-edition/nostarch/chapter19.md index 68c4e6d2b1..52e3f8c171 100644 --- a/second-edition/nostarch/chapter19.md +++ b/second-edition/nostarch/chapter19.md @@ -1,19 +1,6 @@ [TOC] - - - # Advanced Features We’ve come a long way! By now, you’ve learned 99% of the things you’ll need to @@ -123,13 +110,6 @@ By opting out of having Rust enforce these guarantees, you are able to make the tradeoff of giving up guaranteed safety to gain performance or the ability to interface with another language or hardware where Rust’s guarantees don’t apply. - - - Listing 19-1 shows how to create both an immutable and a mutable raw pointer from references. @@ -142,11 +122,6 @@ let r2 = &mut num as *mut i32; Listing 19-1: Creating raw pointers from references - - - Notice we don’t include the `unsafe` keyword here---you can *create* raw pointers in safe code, you just can’t *dereference* raw pointers outside of an unsafe block, as we’ll see in a bit. @@ -219,10 +194,6 @@ an unsafe function within an `unsafe` block, we are saying that we’ve read thi function’s documentations and take responsibility for upholding the function’s contracts ourselves. - - - Here’s an unsafe function named `dangerous` that doesn’t do anything in its body: @@ -406,9 +377,6 @@ and use of a *Foreign Function Interface* (FFI). A Foreign Function Interface is a way for a programming language to define functions and enable a different (foreign) programming language to call those functions. - - - Listing 19-8 demonstrates how to set up an integration with the `abs` function from the C standard library. Functions declared within `extern` blocks are always unsafe to call from Rust code, because other languages don`t enforce @@ -438,8 +406,6 @@ defines which *application binary interface* (ABI) the external function uses---the ABI defines how to call the function at the assembly level. The `"C"` ABI is the most common, and follows the C programming language’s ABI. - - ##### Calling Rust Functions from Other Languages You can also use `extern` to create an interface that allows other languages to @@ -453,11 +419,6 @@ programming language compiler mangles names slightly differently, so for a Rust function to be nameable from other languages, we have to disable the Rust compiler’s name mangling. - - - In this example we make the `call_from_c` function accessible from C code, once it’s compiled to a shared library and linked from C: @@ -470,8 +431,6 @@ pub extern "C" fn call_from_c() { This usage of `extern` does not require `unsafe`. - - ### Accessing or Modifying a Mutable Static Variable We’ve managed to go this entire book without talking about *global variables*, @@ -601,10 +560,6 @@ look at three advanced features of lifetimes that we haven’t covered yet: * Trait object lifetimes, how they’re inferred, and when they need to be specified - - - ### Lifetime Subtyping Ensures One Lifetime Outlives Another Lifetime subtyping is a way to specify that one lifetime should outlive another @@ -637,12 +592,6 @@ Compiling the code results in errors saying that Rust expected lifetime parameters on the string slice in `Context` and the reference to a `Context` in `Parser`. - - - For simplicity’s sake, our `parse` function returns a `Result<(), &str>`. That is, it will do nothing on success, and on failure will return the part of the string slice that didn’t parse correctly. A real implementation would have more @@ -659,10 +608,6 @@ input is invalid after the first byte. Note that this code may panic if the first byte is not on a valid character boundary; again, we’re simplifying the example in order to concentrate on the lifetimes involved. - - - To get this code compiling, we need to fill in the lifetime parameters for the string slice in `Context` and the reference to the `Context` in `Parser`. The most straightforward way to do this is to use the same lifetime everywhere, as @@ -693,10 +638,6 @@ lives as long as the reference to the `Context` in `Parser`. Rust’s compiler error message said lifetime parameters were required for these references, and we have now added lifetime parameters. - - - Next, in Listing 19-14, let’s add a function that takes an instance of `Context`, uses a `Parser` to parse that context, and returns what `parse` returns. This won’t quite work: @@ -760,11 +701,6 @@ all the references in this code to always be valid. Both the `Parser` we’re creating and the `context` parameter go out of scope at the end of the function, though (because `parse_context` takes ownership of `context`). - - - To figure out why we’re getting these errors, let’s look at the definitions in Listing 19-13 again, specifically the references in the signature of the `parse` method: @@ -773,9 +709,6 @@ Listing 19-13 again, specifically the references in the signature of the fn parse(&self) -> Result<(), &str> { ``` - - - Remember the elision rules? If we annotate the lifetimes of the references rather than eliding, the signature would be: @@ -921,9 +854,6 @@ generic types. We can also add lifetime parameters as constraints on generic types, and these are called *lifetime bounds*. Lifetime bounds help Rust verify that references in generic types won’t outlive the data they’re referencing. - - - For an example, consider a type that is a wrapper over references. Recall the `RefCell` type from the “`RefCell` and the Interior Mutability Pattern” section of Chapter 15: its `borrow` and `borrow_mut` methods return the types @@ -1070,10 +1000,6 @@ used in this type’s place for the particular implementation. That way, we can define a trait that uses some types without needing to know exactly what those types are until the trait is implemented. - - - We’ve described most of the things in this chapter as being needed very rarely. Associated types are somewhere in the middle; they’re used more rarely than the rest of the book, but more commonly than many of the things in this chapter. @@ -1157,10 +1083,6 @@ A great example of a situation where this is useful is with operator overloading. Operator overloading is customizing the behavior of an operator (like `+`) in particular situations. - - - Rust does not allow you to create your own operators or overload arbitrary operators, but you *can* overload the operations and corresponding traits listed in `std::ops` by implementing the traits associated with the operator. @@ -1222,9 +1144,6 @@ parameter---short for “right hand side”---that’s used to define the type o `RHS` when we implement the `Add` trait, the type of `RHS` will default to `Self`, which will be the type we’re implementing `Add` on. - - - When we implemented `Add` for `Point`, we made use of the default for `RHS` because we wanted to add two `Point` instances together. Let’s look at an example of implementing the `Add` trait where we want to customize the `RHS` @@ -1265,10 +1184,6 @@ Default type parameters are used in two main ways: 1. To extend a type without breaking existing code. 2. To allow customization in specific cases most users won’t need. - - - The standard library’s `Add` trait is an example of the second purpose: most of the time, you’re adding two like types together, but it gives the ability for customizing beyond that. Using a default type parameter in the `Add` trait @@ -1287,10 +1202,6 @@ another trait’s method, nor can it prevent us from implementing both of these traits on one type. It’s also possible to have a method implemented directly on the type with the same name as methods from traits as well! - - - When calling methods with the same name, then, we need to tell Rust which one we want to use. Consider the code in Listing 19-24 where we’ve defined two traits, `Pilot` and `Wizard`, that both have a method called `fly`. We then @@ -1650,12 +1561,6 @@ The implementation of `Display` uses `self.0` to access the inner `Vec`, because `Wrapper` is a tuple struct and the `Vec` is the item at index 0 in the tuple. Then we can use the functionality of the `Display` type on `Wrapper`. - - - The downside of this method is that, because `Wrapper` is a new type, it doesn’t have the methods of the value it’s holding; we’d have to implement all the methods of `Vec` directly on `Wrapper`, so that it can delegate to @@ -1890,14 +1795,6 @@ be coerced into any other type. We’re allowed to end this `match` arm with control back to the top of the loop, so in the `Err` case, we never actually assign a value to `guess`. - - - The never type is also useful with `panic!`. Remember the `unwrap` function that we call on `Option` values to produce a value or panic? Here’s its definition: @@ -1952,11 +1849,6 @@ let s1: str = "Hello there!"; let s2: str = "How's it going?"; ``` - - - Rust needs to know how much memory to allocate for any value of a particular type, and all values of a type must use the same amount of memory. If we were allowed to write this code, that would mean these two `str` values would need @@ -1990,13 +1882,6 @@ the reason we have to do that! #### The `Sized` Trait - - - - - To work with DSTs, Rust has a particular trait to determine if a type’s size is known at compile time or not: the `Sized` trait. This trait is automatically implemented for everything whose size is known at compile time. In addition, @@ -2044,11 +1929,6 @@ closures: function pointers, diverging functions, and returning closures. ### Function Pointers - - - We’ve talked about how to pass closures to functions; you can also pass regular functions to functions! This is useful when we want to pass a function we’ve already defined rather than defining a new closure. We do this using function diff --git a/second-edition/src/ch19-00-advanced-features.md b/second-edition/src/ch19-00-advanced-features.md index 1eb8daf223..74682b9a57 100644 --- a/second-edition/src/ch19-00-advanced-features.md +++ b/second-edition/src/ch19-00-advanced-features.md @@ -1,16 +1,3 @@ - - - # Advanced Features We’ve come a long way! By now, you’ve learned 99% of the things you’ll need to diff --git a/second-edition/src/ch19-01-unsafe-rust.md b/second-edition/src/ch19-01-unsafe-rust.md index 449665a7cd..1c1d963c17 100644 --- a/second-edition/src/ch19-01-unsafe-rust.md +++ b/second-edition/src/ch19-01-unsafe-rust.md @@ -84,13 +84,6 @@ By opting out of having Rust enforce these guarantees, you are able to make the tradeoff of giving up guaranteed safety to gain performance or the ability to interface with another language or hardware where Rust’s guarantees don’t apply. - - - Listing 19-1 shows how to create both an immutable and a mutable raw pointer from references. @@ -103,11 +96,6 @@ let r2 = &mut num as *mut i32; Listing 19-1: Creating raw pointers from references - - - Notice we don’t include the `unsafe` keyword here---you can *create* raw pointers in safe code, you just can’t *dereference* raw pointers outside of an unsafe block, as we’ll see in a bit. @@ -182,10 +170,6 @@ an unsafe function within an `unsafe` block, we are saying that we’ve read thi function’s documentations and take responsibility for upholding the function’s contracts ourselves. - - - Here’s an unsafe function named `dangerous` that doesn’t do anything in its body: @@ -372,9 +356,6 @@ and use of a *Foreign Function Interface* (FFI). A Foreign Function Interface is a way for a programming language to define functions and enable a different (foreign) programming language to call those functions. - - - Listing 19-8 demonstrates how to set up an integration with the `abs` function from the C standard library. Functions declared within `extern` blocks are always unsafe to call from Rust code, because other languages don`t enforce @@ -404,8 +385,6 @@ defines which *application binary interface* (ABI) the external function uses---the ABI defines how to call the function at the assembly level. The `"C"` ABI is the most common, and follows the C programming language’s ABI. - - ##### Calling Rust Functions from Other Languages You can also use `extern` to create an interface that allows other languages to @@ -419,11 +398,6 @@ programming language compiler mangles names slightly differently, so for a Rust function to be nameable from other languages, we have to disable the Rust compiler’s name mangling. - - - In this example we make the `call_from_c` function accessible from C code, once it’s compiled to a shared library and linked from C: @@ -436,8 +410,6 @@ pub extern "C" fn call_from_c() { This usage of `extern` does not require `unsafe`. - - ### Accessing or Modifying a Mutable Static Variable We’ve managed to go this entire book without talking about *global variables*, diff --git a/second-edition/src/ch19-02-advanced-lifetimes.md b/second-edition/src/ch19-02-advanced-lifetimes.md index e15e4cd456..6eaf6276ed 100644 --- a/second-edition/src/ch19-02-advanced-lifetimes.md +++ b/second-edition/src/ch19-02-advanced-lifetimes.md @@ -12,10 +12,6 @@ look at three advanced features of lifetimes that we haven’t covered yet: * Trait object lifetimes, how they’re inferred, and when they need to be specified - - - ### Lifetime Subtyping Ensures One Lifetime Outlives Another Lifetime subtyping is a way to specify that one lifetime should outlive another @@ -49,12 +45,6 @@ Compiling the code results in errors saying that Rust expected lifetime parameters on the string slice in `Context` and the reference to a `Context` in `Parser`. - - - For simplicity’s sake, our `parse` function returns a `Result<(), &str>`. That is, it will do nothing on success, and on failure will return the part of the string slice that didn’t parse correctly. A real implementation would have more @@ -71,10 +61,6 @@ input is invalid after the first byte. Note that this code may panic if the first byte is not on a valid character boundary; again, we’re simplifying the example in order to concentrate on the lifetimes involved. - - - To get this code compiling, we need to fill in the lifetime parameters for the string slice in `Context` and the reference to the `Context` in `Parser`. The most straightforward way to do this is to use the same lifetime everywhere, as @@ -105,10 +91,6 @@ lives as long as the reference to the `Context` in `Parser`. Rust’s compiler error message said lifetime parameters were required for these references, and we have now added lifetime parameters. - - - Next, in Listing 19-14, let’s add a function that takes an instance of `Context`, uses a `Parser` to parse that context, and returns what `parse` returns. This won’t quite work: @@ -172,11 +154,6 @@ all the references in this code to always be valid. Both the `Parser` we’re creating and the `context` parameter go out of scope at the end of the function, though (because `parse_context` takes ownership of `context`). - - - To figure out why we’re getting these errors, let’s look at the definitions in Listing 19-13 again, specifically the references in the signature of the `parse` method: @@ -185,9 +162,6 @@ Listing 19-13 again, specifically the references in the signature of the fn parse(&self) -> Result<(), &str> { ``` - - - Remember the elision rules? If we annotate the lifetimes of the references rather than eliding, the signature would be: @@ -335,9 +309,6 @@ generic types. We can also add lifetime parameters as constraints on generic types, and these are called *lifetime bounds*. Lifetime bounds help Rust verify that references in generic types won’t outlive the data they’re referencing. - - - For an example, consider a type that is a wrapper over references. Recall the `RefCell` type from the “`RefCell` and the Interior Mutability Pattern” section of Chapter 15: its `borrow` and `borrow_mut` methods return the types diff --git a/second-edition/src/ch19-03-advanced-traits.md b/second-edition/src/ch19-03-advanced-traits.md index 473e23a2a9..b353f1e4b0 100644 --- a/second-edition/src/ch19-03-advanced-traits.md +++ b/second-edition/src/ch19-03-advanced-traits.md @@ -13,10 +13,6 @@ used in this type’s place for the particular implementation. That way, we can define a trait that uses some types without needing to know exactly what those types are until the trait is implemented. - - - We’ve described most of the things in this chapter as being needed very rarely. Associated types are somewhere in the middle; they’re used more rarely than the rest of the book, but more commonly than many of the things in this chapter. @@ -101,10 +97,6 @@ A great example of a situation where this is useful is with operator overloading. Operator overloading is customizing the behavior of an operator (like `+`) in particular situations. - - - Rust does not allow you to create your own operators or overload arbitrary operators, but you *can* overload the operations and corresponding traits listed in `std::ops` by implementing the traits associated with the operator. @@ -166,9 +158,6 @@ parameter---short for “right hand side”---that’s used to define the type o `RHS` when we implement the `Add` trait, the type of `RHS` will default to `Self`, which will be the type we’re implementing `Add` on. - - - When we implemented `Add` for `Point`, we made use of the default for `RHS` because we wanted to add two `Point` instances together. Let’s look at an example of implementing the `Add` trait where we want to customize the `RHS` @@ -209,10 +198,6 @@ Default type parameters are used in two main ways: 1. To extend a type without breaking existing code. 2. To allow customization in specific cases most users won’t need. - - - The standard library’s `Add` trait is an example of the second purpose: most of the time, you’re adding two like types together, but it gives the ability for customizing beyond that. Using a default type parameter in the `Add` trait @@ -231,10 +216,6 @@ another trait’s method, nor can it prevent us from implementing both of these traits on one type. It’s also possible to have a method implemented directly on the type with the same name as methods from traits as well! - - - When calling methods with the same name, then, we need to tell Rust which one we want to use. Consider the code in Listing 19-24 where we’ve defined two traits, `Pilot` and `Wizard`, that both have a method called `fly`. We then @@ -679,12 +660,6 @@ The implementation of `Display` uses `self.0` to access the inner `Vec`, because `Wrapper` is a tuple struct and the `Vec` is the item at index 0 in the tuple. Then we can use the functionality of the `Display` type on `Wrapper`. - - - The downside of this method is that, because `Wrapper` is a new type, it doesn’t have the methods of the value it’s holding; we’d have to implement all the methods of `Vec` directly on `Wrapper`, so that it can delegate to diff --git a/second-edition/src/ch19-04-advanced-types.md b/second-edition/src/ch19-04-advanced-types.md index 84e16f89c5..9ae8597054 100644 --- a/second-edition/src/ch19-04-advanced-types.md +++ b/second-edition/src/ch19-04-advanced-types.md @@ -224,14 +224,6 @@ be coerced into any other type. We’re allowed to end this `match` arm with control back to the top of the loop, so in the `Err` case, we never actually assign a value to `guess`. - - - The never type is also useful with `panic!`. Remember the `unwrap` function that we call on `Option` values to produce a value or panic? Here’s its definition: @@ -286,11 +278,6 @@ let s1: str = "Hello there!"; let s2: str = "How's it going?"; ``` - - - Rust needs to know how much memory to allocate for any value of a particular type, and all values of a type must use the same amount of memory. If we were allowed to write this code, that would mean these two `str` values would need @@ -324,13 +311,6 @@ the reason we have to do that! #### The `Sized` Trait - - - - - To work with DSTs, Rust has a particular trait to determine if a type’s size is known at compile time or not: the `Sized` trait. This trait is automatically implemented for everything whose size is known at compile time. In addition, diff --git a/second-edition/src/ch19-05-advanced-functions-and-closures.md b/second-edition/src/ch19-05-advanced-functions-and-closures.md index fc4ac5a22d..26ca4ae8bb 100644 --- a/second-edition/src/ch19-05-advanced-functions-and-closures.md +++ b/second-edition/src/ch19-05-advanced-functions-and-closures.md @@ -5,11 +5,6 @@ closures: function pointers, diverging functions, and returning closures. ### Function Pointers - - - We’ve talked about how to pass closures to functions; you can also pass regular functions to functions! This is useful when we want to pass a function we’ve already defined rather than defining a new closure. We do this using function From f04c1f9a90557be16581f04e364a18ebc787dfa8 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Tue, 27 Mar 2018 15:14:50 -0400 Subject: [PATCH 026/749] Carol's edits after copyediting --- second-edition/nostarch/odt/chapter19.docx | Bin 186912 -> 148978 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/second-edition/nostarch/odt/chapter19.docx b/second-edition/nostarch/odt/chapter19.docx index 10eb5fd4f592c7a7b97fe4fc809f94dded240393..6332c874d3c515124a36819c0d5460e5da8bb809 100644 GIT binary patch literal 148978 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%0DptST;(X=TF9n5KHbpZZR%0leXAKruA=6%@I+ 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 z

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 z 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 aGr*e_SQLQ{6c%BS1|BT@{tB>2V*mip*OxB< From 18438cd31f03d9aacdf27d20b9129a0ad8edddbf Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Tue, 27 Mar 2018 15:47:09 -0400 Subject: [PATCH 027/749] Propagate copyedit and carol's changes to markdown --- second-edition/nostarch/chapter19.md | 1365 ++++++++--------- .../src/ch19-00-advanced-features.md | 30 +- second-edition/src/ch19-01-unsafe-rust.md | 366 ++--- .../src/ch19-02-advanced-lifetimes.md | 248 ++- second-edition/src/ch19-03-advanced-traits.md | 367 ++--- second-edition/src/ch19-04-advanced-types.md | 259 ++-- ...ch19-05-advanced-functions-and-closures.md | 92 +- 7 files changed, 1362 insertions(+), 1365 deletions(-) diff --git a/second-edition/nostarch/chapter19.md b/second-edition/nostarch/chapter19.md index 52e3f8c171..c1dbb66e78 100644 --- a/second-edition/nostarch/chapter19.md +++ b/second-edition/nostarch/chapter19.md @@ -3,115 +3,116 @@ # Advanced Features -We’ve come a long way! By now, you’ve learned 99% of the things you’ll need to -know when writing Rust. Before we do one more project in Chapter 20, let’s talk -about a few things you may run into that last 1% of the time. Feel free to use -this chapter as a reference for when you run into something unknown in the -wild; the features you’ll learn to use here are useful in very specific -situations. We don’t want to leave these features out, but you won’t find -yourself reaching for them often. - -In this chapter, we’re going to cover: - -* Unsafe Rust: for when you need to opt out of some of Rust’s guarantees and - make yourself responsible for upholding the guarantees instead -* Advanced Lifetimes: syntax for complex lifetime situations -* Advanced Traits: Associated Types, default type parameters, fully qualified +By now, you’ve learned the most commonly used parts of the Rust programming +language. Before we do one more project in Chapter 20, we’ll look at a few +aspects of the language you might run into every once in a while. You can use +this chapter as a reference for when you encounter any unknowns when using +Rust. The features you’ll learn to use in this chapter are useful in very +specific situations. Although you might not reach for them often, we want to +make sure you have a grasp of all the features Rust has to offer. + +In this chapter, we’ll cover: + +* Unsafe Rust: Opt out of some of Rust’s guarantees and manually uphold the + guarantees +* Advanced lifetimes: Syntax for complex lifetime situations +* Advanced traits: Associated types, default type parameters, fully qualified syntax, supertraits, and the newtype pattern in relation to traits -* Advanced Types: some more about the newtype pattern, type aliases, the - “never” type, and dynamically sized types -* Advanced Functions and Closures: function pointers and returning closures +* Advanced types: More about the newtype pattern, type aliases, the *never* + type, and dynamically sized types +* Advanced functions and closures: Function pointers and returning closures It’s a panoply of Rust features with something for everyone! Let’s dive in! ## Unsafe Rust All the code we’ve discussed so far has had Rust’s memory safety guarantees -enforced at compile time. However, Rust has a second language hiding inside of -it that does not enforce these memory safety guarantees: unsafe Rust. This -works just like regular Rust, but gives you extra superpowers. +enforced at compile time. However, Rust has a second language hidden inside it +that doesn’t enforce these memory safety guarantees: it’s called *unsafe Rust* +and works just like regular Rust, but gives us extra superpowers. Unsafe Rust exists because, by nature, static analysis is conservative. When -the compiler is trying to determine if code upholds the guarantees or not, it’s -better for it to reject some programs that are valid than accept some programs -that are invalid. That inevitably means there are some times when your code -might be okay, but Rust thinks it’s not! In these cases, you can use unsafe -code to tell the compiler, “trust me, I know what I’m doing.” The downside is -that you’re on your own; if you get unsafe code wrong, problems due to memory -unsafety, like null pointer dereferencing, can occur. - -There’s another reason Rust has an unsafe alter ego: the underlying hardware of -computers is inherently not safe. If Rust didn’t let you do unsafe operations, -there would be some tasks that you simply could not do. Rust needs to allow you -to do low-level systems programming like directly interacting with your -operating system, or even writing your own operating system! That’s one of the -goals of the language. Let’s see what you can do with unsafe Rust, and how to -do it. +the compiler tries to determine whether or not code upholds the guarantees, +it’s better for it to reject some valid programs rather than accepting some +invalid programs. Although the code might be okay, as far as Rust is able to +tell, it’s not! In these cases, we can use unsafe code to tell the compiler, +“trust me, I know what I’m doing.” The downside is that we use it at our own +risk: if we use unsafe code incorrectly, problems due to memory unsafety, such +as null pointer dereferencing, can occur. + +Another reason Rust has an unsafe alter ego is that the underlying computer +hardware is inherently unsafe. If Rust didn’t let us do unsafe operations, we +couldn’t do certain tasks. Rust needs to allow us to do low-level systems +programming, such as directly interacting with the operating system or even +writing our own operating system. Working with low-level systems programming is +one of the goals of the language. Let’s explore what we can do with unsafe Rust +and how to do it. ### Unsafe Superpowers -To switch into unsafe Rust we use the `unsafe` keyword, and then we can start a -new block that holds the unsafe code. There are four actions that you can take -in unsafe Rust that you can’t in safe Rust that we call “unsafe superpowers.” -Those superpowers are the ability to: +To switch to unsafe Rust, we use the `unsafe` keyword, and then start a new +block that holds the unsafe code. We can take four actions in unsafe Rust, +which we call *unsafe superpowers*, that we can’t in safe Rust. Those +superpowers include the ability to: -1. Dereference a raw pointer -2. Call an unsafe function or method -3. Access or modify a mutable static variable -4. Implement an unsafe trait +* Dereference a raw pointer +* Call an unsafe function or method +* Access or modify a mutable static variable +* Implement an unsafe trait It’s important to understand that `unsafe` doesn’t turn off the borrow checker or disable any other of Rust’s safety checks: if you use a reference in unsafe -code, it will still be checked. The `unsafe` keyword only gives you access to +code, it will still be checked. The `unsafe` keyword only gives us access to these four features that are then not checked by the compiler for memory -safety. You still get some degree of safety inside of an unsafe block! +safety. We still get some degree of safety inside of an unsafe block. -Furthermore, `unsafe` does not mean the code inside the block is necessarily +In addition, `unsafe` does not mean the code inside the block is necessarily dangerous or that it will definitely have memory safety problems: the intent is -that you as the programmer will ensure the code inside an `unsafe` block will +that as the programmer, we’ll ensure the code inside an `unsafe` block will access memory in a valid way. People are fallible, and mistakes will happen, but by requiring these four -unsafe operations to be inside blocks annotated with `unsafe`, you’ll know that +unsafe operations to be inside blocks annotated with `unsafe` we’ll know that any errors related to memory safety must be within an `unsafe` block. Keep -`unsafe` blocks small and you’ll thank yourself later when you go to -investigate memory bugs. +`unsafe` blocks small; you’ll be thankful later when you investigate memory +bugs. -To isolate unsafe code as much as possible, it’s a good idea to enclose unsafe -code within a safe abstraction and provide a safe API, which we’ll be -discussing once we get into unsafe functions and methods. Parts of the standard +To isolate unsafe code as much as possible, it’s best to enclose unsafe code +within a safe abstraction and provide a safe API, which we’ll discuss later in +the chapter when we examine unsafe functions and methods. Parts of the standard library are implemented as safe abstractions over unsafe code that has been -audited. This technique prevents uses of `unsafe` from leaking out into all the -places that you or your users might want to make use of the functionality -implemented with `unsafe` code, because using a safe abstraction is safe. +audited. Wrapping unsafe code in a safe abstraction prevents uses of `unsafe` +from leaking out into all the places that you or your users might want to use +the functionality implemented with `unsafe` code, because using a safe +abstraction is safe. -Let’s talk about each of the four unsafe superpowers in turn, and along the way -we’ll look at some abstractions that provide a safe interface to unsafe code. +Let’s look at each of the four unsafe superpowers in turn: we’ll also look at +some abstractions that provide a safe interface to unsafe code. ### Dereferencing a Raw Pointer -Way back in Chapter 4, in the “Dangling References” section, we covered that -the compiler ensures references are always valid. Unsafe Rust has two new types -similar to references called *raw pointers*. Just like with references, raw -pointers can be immutable or mutable, written as `*const T` and `*mut T`, -respectively. The asterisk isn’t the dereference operator; it’s part of the +In Chapter 4, in the “Dangling References” section, we mentioned that the +compiler ensures references are always valid. Unsafe Rust has two new types +called *raw pointers* that are similar to references. As with references, raw +pointers can be immutable or mutable and are written as `*const T` and `*mut +T`, respectively. The asterisk isn’t the dereference operator; it’s part of the type name. In the context of raw pointers, “immutable” means that the pointer can’t be directly assigned to after being dereferenced. Different from references and smart pointers, keep in mind that raw pointers: -- Are allowed to ignore the borrowing rules and have both immutable and - mutable pointers, or multiple mutable pointers to the same location -- Aren’t guaranteed to point to valid memory -- Are allowed to be null -- Don’t implement any automatic clean-up +* Are allowed to ignore the borrowing rules by having both immutable and + mutable pointers or multiple mutable pointers to the same location +* Aren’t guaranteed to point to valid memory +* Are allowed to be null +* Don’t implement any automatic cleanup -By opting out of having Rust enforce these guarantees, you are able to make the -tradeoff of giving up guaranteed safety to gain performance or the ability to +By opting out of having Rust enforce these guarantees, we can make the +trade-off of giving up guaranteed safety to gain performance or the ability to interface with another language or hardware where Rust’s guarantees don’t apply. -Listing 19-1 shows how to create both an immutable and a mutable raw pointer -from references. +Listing 19-1 shows how to create an immutable and a mutable raw pointer from +references: ``` let mut num = 5; @@ -122,22 +123,22 @@ let r2 = &mut num as *mut i32; Listing 19-1: Creating raw pointers from references -Notice we don’t include the `unsafe` keyword here---you can *create* raw -pointers in safe code, you just can’t *dereference* raw pointers outside of an -unsafe block, as we’ll see in a bit. +Notice that we don’t include the `unsafe` keyword in this code. We can create +raw pointers in safe code; we just can’t dereference raw pointers outside an +unsafe block, as you’ll see in a bit. We’ve created raw pointers by using `as` to cast an immutable and a mutable reference into their corresponding raw pointer types. Because we created them -directly from references that are guaranteed to be valid, we can know that -these particular raw pointers are valid, but we can’t make that assumption -about just any raw pointer. +directly from references guaranteed to be valid, we know these particular raw +pointers are valid, but we can’t make that assumption about just any raw +pointer. -Next we’ll create a raw pointer whose validity we can’t be so certain of. +Next, we’ll create a raw pointer whose validity we can’t be so certain of. Listing 19-2 shows how to create a raw pointer to an arbitrary location in -memory. Trying to use arbitrary memory is undefined: there may be data at that -address or there may not, the compiler might optimize the code so that there is -no memory access, or your program might segfault. There’s not usually a good -reason to be writing code like this, but it is possible: +memory. Trying to use arbitrary memory is undefined: there might be data at +that address or there might not, the compiler might optimize the code so there +is no memory access, or the program might error with a segmentation fault. +Usually, there is no good reason to write code like this, but it is possible: ``` let address = 0x012345usize; @@ -146,10 +147,9 @@ let r = address as *const i32; Listing 19-2: Creating a raw pointer to an arbitrary memory address -Remember that we said you can create raw pointers in safe code, but you can’t -*dereference* raw pointers and read the data being pointed to. We’ll do so now -using the dereference operator, `*`, on a raw pointer, which does require an -`unsafe` block, as shown in Listing 19-3: +Recall that we can create raw pointers in safe code, but we can’t *dereference* +raw pointers and read the data being pointed to. In Listing 19-3, we use the +dereference operator `*` on a raw pointer that requires an `unsafe` block: ``` let mut num = 5; @@ -165,36 +165,37 @@ unsafe { Listing 19-3: Dereferencing raw pointers within an `unsafe` block -Creating a pointer can’t do any harm; it’s only when accessing the value that -it points at that you might end up dealing with an invalid value. +Creating a pointer does no harm; it’s only when we try to access the value that +it points at that we might end up dealing with an invalid value. Note also that in Listing 19-1 and 19-3 we created `*const i32` and `*mut i32` -raw pointers that both pointed to the same memory location, that of `num`. If -instead we’d tried to create an immutable and a mutable reference to `num`, -this would not have compiled because Rust’s ownership rules don’t allow a -mutable reference at the same time as any immutable references. With raw -pointers, we are able to create a mutable pointer and an immutable pointer to -the same location, and change data through the mutable pointer, potentially +raw pointers that both pointed to the same memory location, where `num` is +stored. If we instead tried to create an immutable and a mutable reference to +`num`, the code would not have compiled because Rust’s ownership rules don’t +allow a mutable reference at the same time as any immutable references. With +raw pointers, we can create a mutable pointer and an immutable pointer to the +same location, and change data through the mutable pointer, potentially creating a data race. Be careful! With all of these dangers, why would we ever use raw pointers? One major use -case is when interfacing with C code, as we’ll see in the next section on -unsafe functions. Another case is when building up safe abstractions that the -borrow checker doesn’t understand. Let’s introduce unsafe functions then look -at an example of a safe abstraction that uses unsafe code. +case is when interfacing with C code, as you’ll see in the next section, +“Calling an Unsafe Function or Method.” Another case is when building up safe +abstractions that the borrow checker doesn’t understand. We’ll introduce unsafe +functions and then look at an example of a safe abstraction that uses unsafe +code. ### Calling an Unsafe Function or Method The second type of operation that requires an unsafe block is calls to unsafe functions. Unsafe functions and methods look exactly like regular functions and -methods, but they have an extra `unsafe` out front. That `unsafe` indicates the -function has requirements we as programmers need to uphold when we call this -function, because Rust can’t guarantee we’ve met these requirements. By calling -an unsafe function within an `unsafe` block, we are saying that we’ve read this -function’s documentations and take responsibility for upholding the function’s -contracts ourselves. - -Here’s an unsafe function named `dangerous` that doesn’t do anything in its +methods, but they have an extra `unsafe` before the rest of the definition. The +`unsafe` keyword in this context indicates the function has requirements we +need to uphold when we call this function, because Rust can’t guarantee we’ve +met these requirements. By calling an unsafe function within an `unsafe` block, +we’re saying that we’ve read this function’s documentation and take +responsibility for upholding the function’s contracts. + +Here is an unsafe function named `dangerous` that doesn’t do anything in its body: ``` @@ -217,22 +218,23 @@ error[E0133]: call to unsafe function requires unsafe function or block ``` By inserting the `unsafe` block around our call to `dangerous`, we’re asserting -to Rust that we’ve read the documentation for this function, we understand how -to use it properly, and we’ve verified that everything is correct. +to Rust that we’ve read the function’s documentation, we understand how to use +it properly, and we’ve verified that we’re fulfilling the contract of the +function. Bodies of unsafe functions are effectively `unsafe` blocks, so to perform other unsafe operations within an unsafe function, we don’t need to add another `unsafe` block. -#### Creating a Safe Abstraction Over Unsafe Code +#### Creating a Safe Abstraction over Unsafe Code -Just because a function contains unsafe code doesn’t mean the whole function -needs to be marked as unsafe. In fact, wrapping unsafe code in a safe function -is a common abstraction. As an example, let’s check out a function from the -standard library, `split_at_mut`, that requires some unsafe code and explore -how we might implement it. This safe method is defined on mutable slices: it -takes one slice and makes it into two by splitting the slice at the index given -as an argument. Using `split_at_mut` is demonstrated in Listing 19-4: +Just because a function contains unsafe code doesn’t mean we need to mark the +entire function as unsafe. In fact, wrapping unsafe code in a safe function is +a common abstraction. As an example, let’s study a function from the standard +library, `split_at_mut`, that requires some unsafe code and explore how we +might implement it. This safe method is defined on mutable slices: it takes one +slice and makes it two by splitting the slice at the index given as an +argument. Listing 19-4 shows how to use `split_at_mut`: ``` let mut v = vec![1, 2, 3, 4, 5, 6]; @@ -247,10 +249,10 @@ assert_eq!(b, &mut [4, 5, 6]); Listing 19-4: Using the safe `split_at_mut` function -This function can’t be implemented using only safe Rust. An attempt might look -something like Listing 19-5, which will not compile. For simplicity, we’re -implementing `split_at_mut` as a function rather than a method, and only for -slices of `i32` values rather than for a generic type `T`. +We can’t implement this function using only safe Rust. An attempt might look +something like Listing 19-5, which won’t compile. For simplicity, we’ll +implement `split_at_mut` as a function rather than a method and only for slices +of `i32` values rather than for a generic type `T`. ``` fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) { @@ -265,17 +267,17 @@ fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) { Listing 19-5: An attempted implementation of `split_at_mut` using only safe Rust -This function first gets the total length of the slice, then asserts that the -index given as a parameter is within the slice by checking that it’s less than -or equal to the length. The assertion means that if we pass an index that’s -greater than the index to split the slice at, the function will panic before it -attempts to use that index. +This function first gets the total length of the slice, then it asserts that +the index given as a parameter is within the slice by checking that it’s less +than or equal to the length. The assertion means that if we pass an index that +is greater than the index to split the slice at, the function will panic before +it attempts to use that index. Then we return two mutable slices in a tuple: one from the start of the -original slice to the `mid` index, and another from `mid` to the end of the +original slice to the `mid` index and another from `mid` to the end of the slice. -If we try to compile this, we’ll get an error: +When we try to compile the code in Listing 19-5, we’ll get an error: ``` error[E0499]: cannot borrow `*slice` as mutable more than once at a time @@ -291,9 +293,9 @@ error[E0499]: cannot borrow `*slice` as mutable more than once at a time Rust’s borrow checker can’t understand that we’re borrowing different parts of the slice; it only knows that we’re borrowing from the same slice twice. -Borrowing different parts of a slice is fundamentally okay because our two +Borrowing different parts of a slice is fundamentally okay because the two slices aren’t overlapping, but Rust isn’t smart enough to know this. When we -know something is okay, but Rust doesn’t, it’s time to reach for unsafe code. +know code is okay, but Rust doesn’t, it’s time to reach for unsafe code. Listing 19-6 shows how to use an `unsafe` block, a raw pointer, and some calls to unsafe functions to make the implementation of `split_at_mut` work: @@ -319,14 +321,14 @@ function Recall from the “Slices” section in Chapter 4 that slices are a pointer to some data and the length of the slice. We use the `len` method to get the length of -a slice, and the `as_mut_ptr` method to access the raw pointer of a slice. In +a slice and the `as_mut_ptr` method to access the raw pointer of a slice. In this case, because we have a mutable slice to `i32` values, `as_mut_ptr` returns a raw pointer with the type `*mut i32`, which we’ve stored in the variable `ptr`. We keep the assertion that the `mid` index is within the slice. Then we get to the unsafe code: the `slice::from_raw_parts_mut` function takes a raw pointer -and a length and creates a slice. We use this function to create a slice that +and a length, and creates a slice. We use this function to create a slice that starts from `ptr` and is `mid` items long. Then we call the `offset` method on `ptr` with `mid` as an argument to get a raw pointer that starts at `mid`, and we create a slice using that pointer and the remaining number of items after @@ -335,17 +337,17 @@ we create a slice using that pointer and the remaining number of items after The function `slice::from_raw_parts_mut` is unsafe because it takes a raw pointer and must trust that this pointer is valid. The `offset` method on raw pointers is also unsafe, because it must trust that the offset location is also -a valid pointer. We therefore had to put an `unsafe` block around our calls to -`slice::from_raw_parts_mut` and `offset` to be allowed to call them. We can -tell, by looking at the code and by adding the assertion that `mid` must be -less than or equal to `len`, that all the raw pointers used within the `unsafe` -block will be valid pointers to data within the slice. This is an acceptable -and appropriate use of `unsafe`. +a valid pointer. Therefore, we had to put an `unsafe` block around our calls to +`slice::from_raw_parts_mut` and `offset` so we could call them. By looking at +the code and by adding the assertion that `mid` must be less than or equal to +`len`, we can tell that all the raw pointers used within the `unsafe` block +will be valid pointers to data within the slice. This is an acceptable and +appropriate use of `unsafe`. Note that we don’t need to mark the resulting `split_at_mut` function as `unsafe`, and we can call this function from safe Rust. We’ve created a safe abstraction to the unsafe code with an implementation of the function that uses -`unsafe` code in a safe way because it creates only valid pointers from the +`unsafe` code in a safe way, because it creates only valid pointers from the data this function has access to. In contrast, the use of `slice::from_raw_parts_mut` in Listing 19-7 would @@ -365,23 +367,23 @@ let slice = unsafe { Listing 19-7: Creating a slice from an arbitrary memory location -We don’t own the memory at this arbitrary location, and there’s no guarantee +We don’t own the memory at this arbitrary location, and there is no guarantee that the slice this code creates contains valid `i32` values. Attempting to use -`slice` as if it was a valid slice would result in undefined behavior. +`slice` as though it’s a valid slice results in undefined behavior. #### Using `extern` Functions to Call External Code -Sometimes, your Rust code may need to interact with code written in another +Sometimes, your Rust code might need to interact with code written in another language. For this, Rust has a keyword, `extern`, that facilitates the creation -and use of a *Foreign Function Interface* (FFI). A Foreign Function Interface -is a way for a programming language to define functions and enable a different -(foreign) programming language to call those functions. +and use of a *Foreign Function Interface (FFI)*. An FFI is a way for a +programming language to define functions and enable a different (foreign) +programming language to call those functions. Listing 19-8 demonstrates how to set up an integration with the `abs` function from the C standard library. Functions declared within `extern` blocks are -always unsafe to call from Rust code, because other languages don`t enforce -Rust's rules and guarantees and Rust can't check them, so responsibility falls -on the programmer to ensure safety: +always unsafe to call from Rust code. The reason is that other languages don`t +enforce Rust’s rules and guarantees, and Rust can’t check them, so +responsibility falls on the programmer to ensure safety. Filename: src/main.rs @@ -401,26 +403,26 @@ Listing 19-8: Declaring and calling an `extern` function defined in another language Within the `extern "C"` block, we list the names and signatures of external -functions from another language we want to be able to call. The `"C"` part -defines which *application binary interface* (ABI) the external function -uses---the ABI defines how to call the function at the assembly level. The -`"C"` ABI is the most common, and follows the C programming language’s ABI. +functions from another language we want to call. The `"C"` part defines which +*application binary interface (ABI)* the external function uses: the ABI +defines how to call the function at the assembly level. The `"C"` ABI is the +most common and follows the C programming language’s ABI. -##### Calling Rust Functions from Other Languages +#### Calling Rust Functions from Other Languages -You can also use `extern` to create an interface that allows other languages to +We can also use `extern` to create an interface that allows other languages to call Rust functions. Instead of an `extern` block, we add the `extern` keyword and specify the ABI to use just before the `fn` keyword. We also need to add a `#[no_mangle]` annotation to tell the Rust compiler not to mangle the name of -this function. Mangling is when a compiler changes the name we’ve given a +this function. *Mangling* is when a compiler changes the name we’ve given a function to a different name that contains more information for other parts of the compilation process to consume but is less human readable. Every programming language compiler mangles names slightly differently, so for a Rust -function to be nameable from other languages, we have to disable the Rust -compiler’s name mangling. +function to be nameable by other languages, we must disable the Rust compiler’s +name mangling. -In this example we make the `call_from_c` function accessible from C code, once -it’s compiled to a shared library and linked from C: +In the following example, we make the `call_from_c` function accessible from C +code, after it’s compiled to a shared library and linked from C: ``` #[no_mangle] @@ -433,13 +435,13 @@ This usage of `extern` does not require `unsafe`. ### Accessing or Modifying a Mutable Static Variable -We’ve managed to go this entire book without talking about *global variables*, -which Rust does support, but which can be problematic with Rust’s ownership -rules. If you have two threads accessing the same mutable global variable, it -can cause a data race. +Until now, we’ve not talked about *global variables*, which Rust does support +but can be problematic with Rust’s ownership rules. If two threads are +accessing the same mutable global variable, it can cause a data race. -Global variables are called *static* variables in Rust. Listing 19-9 shows an -example declaration and use of a static variable with a string slice as a value: +In Rust, global variables are called *static* variables. Listing 19-9 shows an +example declaration and use of a static variable with a string slice as a +value: Filename: src/main.rs @@ -453,22 +455,22 @@ fn main() { Listing 19-9: Defining and using an immutable static variable -`static` variables are similar to constants, which we discussed in the +Static variables are similar to constants, which we discussed in the “Differences Between Variables and Constants” section in Chapter 3. The names of static variables are in `SCREAMING_SNAKE_CASE` by convention, and we *must* -annotate the variable’s type, which is `&'static str` in this case. Static -variables may only store references with the `'static` lifetime, which means -the Rust compiler can figure out the lifetime by itself and we don’t need to -annotate it explicitly. Accessing an immutable static variable is safe. +annotate the variable’s type, which is `&'static str` in this example. Static +variables can only store references with the `'static` lifetime, which means +the Rust compiler can figure out the lifetime; we don’t need to annotate it +explicitly. Accessing an immutable static variable is safe. -Constants and immutable static variables may seem similar, but a subtle +Constants and immutable static variables might seem similar, but a subtle difference is that values in a static variable have a fixed address in memory. Using the value will always access the same data. Constants, on the other hand, -are allowed to duplicate their data whenever they are used. +are allowed to duplicate their data whenever they’re used. Another difference between constants and static variables is that static -variables can be mutable. Both accessing and modifying mutable static variables -is *unsafe*. Listing 19-10 shows how to declare, access, and modify a mutable +variables can be mutable. Accessing and modifying mutable static variables is +*unsafe*. Listing 19-10 shows how to declare, access, and modify a mutable static variable named `COUNTER`: Filename: src/main.rs @@ -493,25 +495,25 @@ fn main() { Listing 19-10: Reading from or writing to a mutable static variable is unsafe -Just like with regular variables, we specify mutability using the `mut` -keyword. Any code that reads or writes from `COUNTER` must be within an -`unsafe` block. This code compiles and prints `COUNTER: 3` as we would expect -because it’s single threaded. Having multiple threads access `COUNTER` would -likely result in data races. +As with regular variables, we specify mutability using the `mut` keyword. Any +code that reads or writes from `COUNTER` must be within an `unsafe` block. This +code compiles and prints `COUNTER: 3` as we would expect because it’s single +threaded. Having multiple threads access `COUNTER` would likely result in data +races. -With mutable data that’s globally accessible, it’s difficult to ensure there +With mutable data that is globally accessible, it’s difficult to ensure there are no data races, which is why Rust considers mutable static variables to be unsafe. Where possible, it’s preferable to use the concurrency techniques and -threadsafe smart pointers we discussed in Chapter 16, so the compiler checks +thread-safe smart pointers we discussed in Chapter 16, so the compiler checks that data accessed from different threads is done safely. ### Implementing an Unsafe Trait -Finally, the last action that only works with `unsafe` is implementing an -unsafe trait. A trait is unsafe when at least one of its methods has some -invariant that the compiler can’t verify. We can declare that a trait is -`unsafe` by adding the `unsafe` keyword before `trait`, and then implementation -of the trait must be marked as `unsafe` too, as shown in Listing 19-11: +The final action that only works with `unsafe` is implementing an unsafe trait. +A trait is unsafe when at least one of its methods has some invariant that the +compiler can’t verify. We can declare that a trait is `unsafe` by adding the +`unsafe` keyword before `trait`; then implementation of the trait must be +marked as `unsafe` too, as shown in Listing 19-11: ``` unsafe trait Foo { @@ -528,47 +530,46 @@ Listing 19-11: Defining and implementing an unsafe trait By using `unsafe impl`, we’re promising that we’ll uphold the invariants that the compiler can’t verify. -As an example, recall the `Sync` and `Send` marker traits from the “Extensible -Concurrency with the `Sync` and `Send` Traits” section of Chapter 16, and that -the compiler implements these automatically if our types are composed entirely -of `Send` and `Sync` types. If we implement a type that contains something -that’s not `Send` or `Sync`, such as raw pointers, and we want to mark that -type as `Send` or `Sync`, we must use `unsafe`. Rust can’t verify that our type -upholds the guarantees that it can be safely sent across threads or accessed -from multiple threads, so we need to do those checks ourselves and indicate as -such with `unsafe`. +As an example, recall the `Sync` and `Send` marker traits we discussed in the +“Extensible Concurrency with the `Sync` and `Send` Traits” section in Chapter +16: the compiler implements these traits automatically if our types are +composed entirely of `Send` and `Sync` types. If we implement a type that +contains a type that is not `Send` or `Sync`, such as raw pointers, and we want +to mark that type as `Send` or `Sync`, we must use `unsafe`. Rust can’t verify +that our type upholds the guarantees that it can be safely sent across threads +or accessed from multiple threads; therefore, we need to do those checks +manually and indicate as such with `unsafe`. ### When to Use Unsafe Code -Using `unsafe` to take one of these four actions isn’t wrong or even frowned -upon, but it is trickier to get `unsafe` code correct because the compiler isn’t -able to help uphold memory safety. When you have a reason to use `unsafe` code, -it is possible to do so, and having the explicit `unsafe` annotation makes it -easier to track down the source of problems if they occur. +Using `unsafe` to take one of the four actions (superpowers) just discussed +isn’t wrong or even frowned upon. But it is trickier to get `unsafe` code +correct because the compiler can’t help uphold memory safety. When you have a +reason to use `unsafe` code, you can do so, and having the explicit `unsafe` +annotation makes it easier to track down the source of problems if they occur. ## Advanced Lifetimes -Back in Chapter 10 in the “Validating References with Lifetimes” section, we +In Chapter 10 in the “Validating References with Lifetimes” section, you learned how to annotate references with lifetime parameters to tell Rust how -lifetimes of different references relate. We saw how every reference has a -lifetime but, most of the time, Rust will let you elide lifetimes. Here we’ll +lifetimes of different references relate. You saw how every reference has a +lifetime, but most of the time, Rust will let you elide lifetimes. Now we’ll look at three advanced features of lifetimes that we haven’t covered yet: -* Lifetime subtyping, a way to ensure that one lifetime outlives another - lifetime -* Lifetime bounds, to specify a lifetime for a reference to a generic type -* Trait object lifetimes, how they’re inferred, and when they need to be - specified +* Lifetime subtyping: Ensures that one lifetime outlives another lifetime +* Lifetime bounds: Specifies a lifetime for a reference to a generic type +* Inference of trait object lifetimes: How the compiler infers trait object + lifetimes and when they need to be specified ### Lifetime Subtyping Ensures One Lifetime Outlives Another -Lifetime subtyping is a way to specify that one lifetime should outlive another +*Lifetime subtyping* specifies that one lifetime should outlive another lifetime. To explore lifetime subtyping, imagine we want to write a parser. -We’ll have a structure called `Context` that holds a reference to the string +We’ll use a structure called `Context` that holds a reference to the string we’re parsing. We’ll write a parser that will parse this string and return -success or failure. The parser will need to borrow the context to do the -parsing. Implementing this would look like the code in Listing 19-12, except -this code doesn’t have the required lifetime annotations so it won’t compile: +success or failure. The parser will need to borrow the `Context` to do the +parsing. Listing 19-12 implements this parser code, except the code doesn’t +have the required lifetime annotations, so it won’t compile: Filename: src/lib.rs @@ -588,27 +589,26 @@ impl Parser { Listing 19-12: Defining a parser without lifetime annotations -Compiling the code results in errors saying that Rust expected lifetime -parameters on the string slice in `Context` and the reference to a `Context` in -`Parser`. - -For simplicity’s sake, our `parse` function returns a `Result<(), &str>`. That -is, it will do nothing on success, and on failure will return the part of the -string slice that didn’t parse correctly. A real implementation would have more -error information than that, and would actually return something when parsing -succeeds, but we’ll leave those off because they aren’t relevant to the -lifetimes part of this example. - -To keep this code simple, we’re not going to actually write any parsing logic. -It’s very likely that somewhere in parsing logic we’d handle invalid input by -returning an error that references the part of the input that’s invalid, and -this reference is what makes the code example interesting with regards to -lifetimes. So we’re going to pretend that the logic of our parser is that the -input is invalid after the first byte. Note that this code may panic if the -first byte is not on a valid character boundary; again, we’re simplifying the -example in order to concentrate on the lifetimes involved. - -To get this code compiling, we need to fill in the lifetime parameters for the +Compiling the code results in errors because Rust expects lifetime parameters +on the string slice in `Context` and the reference to a `Context` in `Parser`. + +For simplicity’s sake, the `parse` function returns `Result<(), &str>`. That +is, the function will do nothing on success, and on failure will return the +part of the string slice that didn’t parse correctly. A real implementation +would provide more error information and would return a structured data type +when parsing succeeds. We won’t be discussing those details because they aren’t +relevant to the lifetimes part of this example. + +To keep this code simple, we won’t write any parsing logic. However, it’s very +likely that somewhere in the parsing logic we would handle invalid input by +returning an error that references the part of the input that is invalid; this +reference is what makes the code example interesting in regard to lifetimes. +Let’s pretend that the logic of our parser is that the input is invalid after +the first byte. Note that this code might panic if the first byte is not on a +valid character boundary; again, we’re simplifying the example to focus on the +lifetimes involved. + +To get this code to compile, we need to fill in the lifetime parameters for the string slice in `Context` and the reference to the `Context` in `Parser`. The most straightforward way to do this is to use the same lifetime everywhere, as shown in Listing 19-13: @@ -632,15 +632,15 @@ impl<'a> Parser<'a> { Listing 19-13: Annotating all references in `Context` and `Parser` with the same lifetime parameter -This compiles fine, and tells Rust that a `Parser` holds a reference to a -`Context` with lifetime `'a`, and that `Context` holds a string slice that also -lives as long as the reference to the `Context` in `Parser`. Rust’s compiler -error message said lifetime parameters were required for these references, and -we have now added lifetime parameters. +This code compiles just fine. It tells Rust that a `Parser` holds a reference +to a `Context` with lifetime `'a`, and that `Context` holds a string slice that +also lives as long as the reference to the `Context` in `Parser`. Rust’s +compiler error message stated that lifetime parameters were required for these +references, and we’ve now added lifetime parameters. -Next, in Listing 19-14, let’s add a function that takes an instance of +Next, in Listing 19-14, we’ll add a function that takes an instance of `Context`, uses a `Parser` to parse that context, and returns what `parse` -returns. This won’t quite work: +returns. This code doesn’t quite work: Filename: src/lib.rs @@ -653,8 +653,8 @@ fn parse_context(context: Context) -> Result<(), &str> { Listing 19-14: An attempt to add a `parse_context` function that takes a `Context` and uses a `Parser` -We get two quite verbose errors when we try to compile the code with the -addition of the `parse_context` function: +We get two verbose errors when we try to compile the code with the addition of +the `parse_context` function: ``` error[E0597]: borrowed value does not live long enough @@ -690,27 +690,25 @@ note: borrowed value must be valid for the anonymous lifetime #1 defined on the | |_^ ``` -These errors are saying that both the `Parser` instance that’s created and the -`context` parameter live only from when the `Parser` is created until the end -of the `parse_context` function, but they both need to live for the entire -lifetime of the function. +These errors state that the `Parser` instance that is created and the `context` +parameter live only until the end of the `parse_context` function. But they +both need to live for the entire lifetime of the function. In other words, `Parser` and `context` need to *outlive* the entire function -and be valid before the function starts as well as after it ends in order for -all the references in this code to always be valid. Both the `Parser` we’re -creating and the `context` parameter go out of scope at the end of the -function, though (because `parse_context` takes ownership of `context`). +and be valid before the function starts as well as after it ends for all the +references in this code to always be valid. The `Parser` we’re creating and the +`context` parameter go out of scope at the end of the function, because +`parse_context` takes ownership of `context`. -To figure out why we’re getting these errors, let’s look at the definitions in -Listing 19-13 again, specifically the references in the signature of the -`parse` method: +To figure out why these errors occur, let’s look at the definitions in Listing +19-13 again, specifically the references in the signature of the `parse` method: ``` fn parse(&self) -> Result<(), &str> { ``` Remember the elision rules? If we annotate the lifetimes of the references -rather than eliding, the signature would be: +rather than eliding, the signature would be as follows: ``` fn parse<'a>(&'a self) -> Result<(), &'a str> { @@ -733,29 +731,29 @@ temporary), and `context` will go out of scope at the end of the function Rust thinks we’re trying to return a reference to a value that goes out of scope at the end of the function, because we annotated all the lifetimes with -the same lifetime parameter. That told Rust the lifetime of the string slice -that `Context` holds is the same as that of the lifetime of the reference to -`Context` that `Parser` holds. +the same lifetime parameter. The annotations told Rust the lifetime of the +string slice that `Context` holds is the same as that of the lifetime of the +reference to `Context` that `Parser` holds. The `parse_context` function can’t see that within the `parse` function, the -string slice returned will outlive both `Context` and `Parser`, and that the +string slice returned will outlive `Context` and `Parser`, and that the reference `parse_context` returns refers to the string slice, not to `Context` or `Parser`. By knowing what the implementation of `parse` does, we know that the only reason the return value of `parse` is tied to the `Parser` is because it’s -referencing the `Parser`’s `Context`, which is referencing the string slice, so -it’s really the lifetime of the string slice that `parse_context` needs to care -about. We need a way to tell Rust that the string slice in `Context` and the -reference to the `Context` in `Parser` have different lifetimes and that the -return value of `parse_context` is tied to the lifetime of the string slice in -`Context`. - -First we’ll try giving `Parser` and `Context` different lifetime parameters as -shown in Listing 19-15. We’ll use `'s` and `'c` as lifetime parameter names to -be clear about which lifetime goes with the string slice in `Context` and which -goes with the reference to `Context` in `Parser`. Note that this won’t -completely fix the problem, but it’s a start and we’ll look at why this isn’t +referencing the `Parser`’s `Context`, which is referencing the string slice. +So, it’s really the lifetime of the string slice that `parse_context` needs to +care about. We need a way to tell Rust that the string slice in `Context` and +the reference to the `Context` in `Parser` have different lifetimes and that +the return value of `parse_context` is tied to the lifetime of the string slice +in `Context`. + +First, we’ll try giving `Parser` and `Context` different lifetime parameters, +as shown in Listing 19-15. We’ll use `'s` and `'c` as lifetime parameter names +to clarify which lifetime goes with the string slice in `Context` and which +goes with the reference to `Context` in `Parser`. Note that this solution won’t +completely fix the problem, but it’s a start. We’ll look at why this fix isn’t sufficient when we try to compile. Filename: src/lib.rs @@ -782,12 +780,13 @@ Listing 19-15: Specifying different lifetime parameters for the references to the string slice and to `Context` We’ve annotated the lifetimes of the references in all the same places that we -annotated them in Listing 19-13, but used different parameters depending on -whether the reference goes with the string slice or with `Context`. We’ve also -added an annotation to the string slice part of the return value of `parse` to -indicate that it goes with the lifetime of the string slice in `Context`. +annotated them in Listing 19-13. But this time we used different parameters +depending on whether the reference goes with the string slice or with +`Context`. We’ve also added an annotation to the string slice part of the +return value of `parse` to indicate that it goes with the lifetime of the +string slice in `Context`. -The following is the error we get now when we try to compile: +When we try to compile now, we get the following error: ``` error[E0491]: in type `&'c Context<'s>`, reference has a longer lifetime than the data it references @@ -812,23 +811,20 @@ note: but the referenced data is only valid for the lifetime 's as defined on th | |_^ ``` -Rust doesn’t know of any relationship between `'c` and `'s`. In order to be -valid, the referenced data in `Context` with lifetime `'s` needs to be -constrained, to guarantee that it lives longer than the reference with lifetime -`'c`. If `'s` is not longer than `'c`, the reference to `Context` might not be -valid. +Rust doesn’t know of any relationship between `'c` and `'s`. To be valid, the +referenced data in `Context` with lifetime `'s` needs to be constrained to +guarantee that it lives longer than the reference with lifetime `'c`. If `'s` +is not longer than `'c`, the reference to `Context` might not be valid. -Which gets us to the point of this section: the Rust feature *lifetime -subtyping* is a way to specify that one lifetime parameter lives at least as -long as another one. In the angle brackets where we declare lifetime -parameters, we can declare a lifetime `'a` as usual, and declare a lifetime -`'b` that lives at least as long as `'a` by declaring `'b` with the syntax `'b: -'a`. +Now we get to the point of this section: the Rust feature *lifetime* +*subtyping* specifies that one lifetime parameter lives at least as long as +another one. In the angle brackets where we declare lifetime parameters, we can +declare a lifetime `'a` as usual and declare a lifetime `'b` that lives at +least as long as `'a` by declaring `'b` using the syntax `'b: 'a`. -In our definition of `Parser`, in order to say that `'s` (the lifetime of the -string slice) is guaranteed to live at least as long as `'c` (the lifetime of -the reference to `Context`), we change the lifetime declarations to look like -this: +In our definition of `Parser`, to say that `'s` (the lifetime of the string +slice) is guaranteed to live at least as long as `'c` (the lifetime of the +reference to `Context`), we change the lifetime declarations to look like this: Filename: src/lib.rs @@ -838,25 +834,25 @@ struct Parser<'c, 's: 'c> { } ``` -Now, the reference to `Context` in the `Parser` and the reference to the string -slice in the `Context` have different lifetimes, and we’ve ensured that the +Now the reference to `Context` in the `Parser` and the reference to the string +slice in the `Context` have different lifetimes; we’ve ensured that the lifetime of the string slice is longer than the reference to the `Context`. That was a very long-winded example, but as we mentioned at the start of this -chapter, these features are pretty niche. You won’t often need this syntax, but -it can come up in situations like this one, where you need to refer to -something you have a reference to. +chapter, Rust’s advanced features are very specific. You won’t often need the +syntax we described in this example, but in such situations, you’ll know how to +refer to something you have a reference to. ### Lifetime Bounds on References to Generic Types -In the “Trait Bounds” section of Chapter 10, we discussed using trait bounds on +In the “Trait Bounds” section in Chapter 10, we discussed using trait bounds on generic types. We can also add lifetime parameters as constraints on generic -types, and these are called *lifetime bounds*. Lifetime bounds help Rust verify +types; these are called *lifetime bounds*. Lifetime bounds help Rust verify that references in generic types won’t outlive the data they’re referencing. -For an example, consider a type that is a wrapper over references. Recall the +As an example, consider a type that is a wrapper over references. Recall the `RefCell` type from the “`RefCell` and the Interior Mutability Pattern” -section of Chapter 15: its `borrow` and `borrow_mut` methods return the types +section in Chapter 15: its `borrow` and `borrow_mut` methods return the types `Ref` and `RefMut`, respectively. These types are wrappers over references that keep track of the borrowing rules at runtime. The definition of the `Ref` struct is shown in Listing 19-16, without lifetime bounds for now: @@ -867,7 +863,7 @@ Filename: src/lib.rs struct Ref<'a, T>(&'a T); ``` -Listing 19-16: Defining a struct to wrap a reference to a generic type; without +Listing 19-16: Defining a struct to wrap a reference to a generic type, without lifetime bounds to start Without explicitly constraining the lifetime `'a` in relation to the generic @@ -889,11 +885,11 @@ note: ...so that the reference type `&'a T` does not outlive the data it points | ^^^^^^ ``` -Because `T` can be any type, `T` could itself be a reference or a type that -holds one or more references, each of which could have their own lifetimes. -Rust can’t be sure `T` will live as long as `'a`. +Because `T` can be any type, `T` could be a reference or a type that holds one +or more references, each of which could have their own lifetimes. Rust can’t be +sure `T` will live as long as `'a`. -Fortunately, that error gave us helpful advice on how to specify the lifetime +Fortunately, the error provides helpful advice on how to specify the lifetime bound in this case: ``` @@ -902,7 +898,7 @@ consider adding an explicit lifetime bound `T: 'a` so that the reference type ``` Listing 19-17 shows how to apply this advice by specifying the lifetime bound -when we declare the generic type `T`. +when we declare the generic type `T`: ``` struct Ref<'a, T: 'a>(&'a T); @@ -915,7 +911,7 @@ This code now compiles because the `T: 'a` syntax specifies that `T` can be any type, but if it contains any references, the references must live at least as long as `'a`. -We could solve this in a different way, shown in the definition of a +We could solve this problem in a different way, as shown in the definition of a `StaticRef` struct in Listing 19-18, by adding the `'static` lifetime bound on `T`. This means if `T` contains any references, they must have the `'static` lifetime: @@ -930,11 +926,10 @@ types that have only `'static` references or no references Because `'static` means the reference must live as long as the entire program, a type that contains no references meets the criteria of all references living as long as the entire program (because there are no references). For the borrow -checker concerned about references living long enough, there’s no real +checker concerned about references living long enough, there is no real distinction between a type that has no references and a type that has -references that live forever; both of them are the same for the purpose of -determining whether or not a reference has a shorter lifetime than what it -refers to. +references that live forever: both are the same for determining whether or not +a reference has a shorter lifetime than what it refers to. ### Inference of Trait Object Lifetimes @@ -942,10 +937,10 @@ In Chapter 17 in the “Using Trait Objects that Allow for Values of Different Types” section, we discussed trait objects, consisting of a trait behind a reference, that allow us to use dynamic dispatch. We haven’t yet discussed what happens if the type implementing the trait in the trait object has a lifetime -of its own. Consider Listing 19-19, where we have a trait `Red` and a struct -`Ball`. `Ball` holds a reference (and thus has a lifetime parameter) and also -implements trait `Red`. We want to use an instance of `Ball` as the trait -object `Box`: +of its own. Consider Listing 19-19 where we have a trait `Red` and a struct +`Ball`. The `Ball` struct holds a reference (and thus has a lifetime parameter) +and also implements trait `Red`. We want to use an instance of `Ball` as the +trait object `Box`: Filename: src/main.rs @@ -967,48 +962,50 @@ fn main() { Listing 19-19: Using a type that has a lifetime parameter with a trait object -This code compiles without any errors, even though we haven’t said anything -explicit about the lifetimes involved in `obj`. This works because there are -rules having to do with lifetimes and trait objects: +This code compiles without any errors, even though we haven’t explicitly +annotated the lifetimes involved in `obj`. This code works because there are +rules for working with lifetimes and trait objects: * The default lifetime of a trait object is `'static`. * With `&'a Trait` or `&'a mut Trait`, the default lifetime is `'a`. * With a single `T: 'a` clause, the default lifetime is `'a`. -* With multiple `T: 'a`-like clauses, there is no default; we must - be explicit. +* With multiple `T: 'a`-like clauses, there is no default; we must be explicit. When we must be explicit, we can add a lifetime bound on a trait object like -`Box` with the syntax `Box` or `Box`, depending -on what’s needed. Just as with the other bounds, this means that any -implementor of the `Red` trait that has references inside must have the -same lifetime specified in the trait object bounds as those references. +`Box` using the syntax `Box` or `Box`, depending +on whether the reference lives for the entire program or not. As with the other +bounds, the syntax adding a lifetime bound means that any implementor of the +`Red` trait that has references inside the type must have the same lifetime +specified in the trait object bounds as those references. -Next, let’s take a look at some other advanced features dealing with traits! +Next, let’s look at some other advanced features that manage traits. ## Advanced Traits We first covered traits in the “Traits: Defining Shared Behavior” section of -Chapter 10 but, like lifetimes, we didn’t get to some of the more advanced -details. Now that we know more Rust, we can get into the nitty-gritty. +Chapter 10, but as with lifetimes, we didn’t discuss the more advanced details. +Now that you know more about Rust, we can get into the nitty-gritty. ### Associated Types Specify Placeholder Types in Trait Definitions -*Associated types* are a way of associating a type placeholder with a trait -such that the trait method definitions can use these placeholder types in their -signatures. The implementor of a trait will specify the concrete type to be -used in this type’s place for the particular implementation. That way, we can -define a trait that uses some types without needing to know exactly what those -types are until the trait is implemented. +*Associated types* connect a type placeholder with a trait such that the trait +method definitions can use these placeholder types in their signatures. The +implementor of a trait will specify the concrete type to be used in this type’s +place for the particular implementation. That way, we can define a trait that +uses some types without needing to know exactly what those types are until the +trait is implemented. -We’ve described most of the things in this chapter as being needed very rarely. -Associated types are somewhere in the middle; they’re used more rarely than the -rest of the book, but more commonly than many of the things in this chapter. +We’ve described most of the advanced features in this chapter as being rarely +needed. Associated types are somewhere in the middle: they’re used more rarely +than features explained in the rest of the book, but more commonly than many of +the other features discussed in this chapter. -One example of a trait with an associated type is the `Iterator` trait provided -by the standard library. This has an associated type named `Item` that stands -in for the type of the values it’s iterating over. In “The `Iterator` Trait and -the `next` Method” section of Chapter 13, we mentioned that the definition of -the `Iterator` trait is as shown in Listing 19-20: +One example of a trait with an associated type is the `Iterator` trait that the +standard library provides. This trait has an associated type named `Item` that +stands in for the type of the values the type implementing the `Iterator` trait +is iterating over. In “The `Iterator` Trait and the `next` Method” section of +Chapter 13, we mentioned that the definition of the `Iterator` trait is as +shown in Listing 19-20: ``` pub trait Iterator { @@ -1020,20 +1017,20 @@ pub trait Iterator { Listing 19-20: The definition of the `Iterator` trait that has an associated type `Item` -The `Iterator` trait has an associated type named `Item`. This is a placeholder -type, and the `next` method will return values of type `Option`. -Implementors of this trait will specify the concrete type for `Item`, and the -`next` method will return an `Option` containing a value of that concrete type. +The type `Item` is a placeholder type, and the `next` method’s definition shows +that it will return values of type `Option`. Implementors of the +`Iterator` trait will specify the concrete type for `Item`, and the `next` +method will return an `Option` containing a value of that concrete type. -#### Associated Types Versus Generics +#### Associated Types vs. Generics -This may seem like a similar concept to generics, in that it allows us to -define a function without specifying what types it can deal with. So why use -associated types? +Associated types might seem like a similar concept to generics, in that they +allow us to define a function without specifying what types it can handle. So +why use associated types? -Let’s examine the difference with an example that implements the `Iterator` -trait on the `Counter` struct from Chapter 13. In Listing 13-21, we specified -that the `Item` type was `u32`: +Let’s examine the difference between the two concepts with an example from +Chapter 13 that implements the `Iterator` trait on the `Counter` struct. In +Listing 13-21, we specified that the `Item` type was `u32`: Filename: src/lib.rs @@ -1045,8 +1042,8 @@ impl Iterator for Counter { // --snip-- ``` -This feels similar to generics. So why not just define the `Iterator` trait -with generics as shown in Listing 19-21? +This syntax seems comparable to generics. So why not just define the `Iterator` +trait with generics, as shown in Listing 19-21? ``` pub trait Iterator { @@ -1056,37 +1053,38 @@ pub trait Iterator { Listing 19-21: A hypothetical definition of the `Iterator` trait using generics -The difference lies in the fact that when using generics like in Listing 19-21, -we have to annotate the types in each implementation. This is because we can -also implement `Iterator for Counter`, or any other type, which would -give us multiple implementations of `Iterator` for `Counter`. In other words, -when a trait has a generic parameter, it can be implemented for a type multiple -times, changing the concrete types of the generic type parameters each time. -When we use the `next` method on `Counter`, we’d then have to provide type -annotations to indicate which implementation of `Iterator` we wanted to use. +The difference is that when using generics, as in Listing 19-21, we must +annotate the types in each implementation. The reason is that we can also +implement `Iterator for Counter` or any other type, which would give us +multiple implementations of `Iterator` for `Counter`. In other words, when a +trait has a generic parameter, it can be implemented for a type multiple times, +changing the concrete types of the generic type parameters each time. When we +use the `next` method on `Counter`, we would have to provide type annotations +to indicate which implementation of `Iterator` we want to use. With associated types, we don’t need to annotate types because we can’t -implement a trait on a type multiple times. With Listing 19-20, we can only -choose once what the type of `Item` will be, because there can only be one `impl -Iterator for Counter`. We don’t have to specify that we want an iterator of -`u32` values everywhere that we call `next` on `Counter`. +implement a trait on a type multiple times. In Listing 19-20 with the +definition that uses associated types, we can only choose what the type of +`Item` will be once, because there can only be one `impl Iterator for Counter`. +We don’t have to specify that we want an iterator of `u32` values everywhere +that we call `next` on `Counter`. ### Default Generic Type Parameters and Operator Overloading When we use generic type parameters, we can specify a default concrete type for the generic type. This eliminates the need for implementors of the trait to specify a concrete type if the default type works. The syntax for specifying a -default type for a generic type is to put `` when +default type for a generic type is `` when declaring the generic type. -A great example of a situation where this is useful is with operator -overloading. Operator overloading is customizing the behavior of an operator -(like `+`) in particular situations. +A great example of a situation where this technique is useful is with operator +overloading. *Operator overloading* is customizing the behavior of an operator +(such as `+`) in particular situations. -Rust does not allow you to create your own operators or overload arbitrary -operators, but you *can* overload the operations and corresponding traits -listed in `std::ops` by implementing the traits associated with the operator. -For example, in Listing 19-22 we overload the `+` operator to add two `Point` +Rust doesn’t allow you to create your own operators or overload arbitrary +operators. But you can overload the operations and corresponding traits listed +in `std::ops` by implementing the traits associated with the operator. For +example, in Listing 19-22 we overload the `+` operator to add two `Point` instances together. We do this by implementing the `Add` trait on a `Point` struct: @@ -1121,12 +1119,13 @@ fn main() { Listing 19-22: Implementing the `Add` trait to overload the `+` operator for `Point` instances -The `add` method adds the `x` values of two `Point` instances together and the -`y` values of two `Point` instances together to create a new `Point`. The `Add` -trait has an associated type named `Output` that determines the type returned -from the `add` method. +The `add` method adds the `x` values of two `Point` instances and the `y` +values of two `Point` instances to create a new `Point`. The `Add` trait has an +associated type named `Output` that determines the type returned from the `add` +method. -The default generic type here is within the `Add` trait. Here’s its definition: +The default generic type in this code is within the `Add` trait. Here is its +definition: ``` trait Add { @@ -1136,24 +1135,23 @@ trait Add { } ``` -This should look generally familiar, as a trait with one method and an -associated type. The new part here is the `RHS=Self` in the angle brackets: -this syntax is called *default type parameters*. The `RHS` generic type -parameter---short for “right hand side”---that’s used to define the type of the -`rhs` parameter in the `add` method. If we don’t specify a concrete type for -`RHS` when we implement the `Add` trait, the type of `RHS` will default to -`Self`, which will be the type we’re implementing `Add` on. +This code should look generally familiar: a trait with one method and an +associated type. The new part is `RHS=Self` in the angle brackets: this syntax +is called *default type parameters*. The `RHS` generic type parameter (short +for “right hand side”) defines the type of the `rhs` parameter in the `add` +method. If we don’t specify a concrete type for `RHS` when we implement the +`Add` trait, the type of `RHS` will default to `Self`, which will be the type +we’re implementing `Add` on. -When we implemented `Add` for `Point`, we made use of the default for `RHS` -because we wanted to add two `Point` instances together. Let’s look at an -example of implementing the `Add` trait where we want to customize the `RHS` -type rather than using the default. +When we implemented `Add` for `Point`, we used the default for `RHS` because we +wanted to add two `Point` instances. Let’s look at an example of implementing +the `Add` trait where we want to customize the `RHS` type rather than using the +default. We have two structs holding values in different units, `Millimeters` and -`Meters`. We want to be able to add values in millimeters to values in meters, -and have the implementation of `Add` do the conversion correctly. We can -implement `Add` for `Millimeters` with `Meters` as the right hand side as shown -in Listing 19-23: +`Meters`. We want to add values in millimeters to values in meters and have the +implementation of `Add` do the conversion correctly. We can implement `Add` for +`Millimeters` with `Meters` as the `RHS`, as shown in Listing 19-23: Filename: src/lib.rs @@ -1172,41 +1170,41 @@ impl Add for Millimeters { } ``` -Listing 19-23: Implementing the `Add` trait on `Millimeters` to be able to add +Listing 19-23: Implementing the `Add` trait on `Millimeters` to add `Millimeters` to `Meters` -To be able to add `Millimeters` and `Meters`, we specify `impl Add` to -set the value of the `RHS` type parameter instead of using the default of -`Self`. +To add `Millimeters` and `Meters`, we specify `impl Add` to set the +value of the `RHS` type parameter instead of using the default of `Self`. -Default type parameters are used in two main ways: +We use default type parameters in two main ways: -1. To extend a type without breaking existing code. -2. To allow customization in specific cases most users won’t need. +* To extend a type without breaking existing code +* To allow customization in specific cases most users won’t need -The standard library’s `Add` trait is an example of the second purpose: most of -the time, you’re adding two like types together, but it gives the ability for -customizing beyond that. Using a default type parameter in the `Add` trait +The standard library’s `Add` trait is an example of the second purpose: +usually, you’ll add two like types, but the `Add` trait provides the ability +for customizing beyond that. Using a default type parameter in the `Add` trait definition means you don’t have to specify the extra parameter most of the -time. In other words, a little bit of implementation boilerplate isn’t needed, -making it easier to use the trait. +time. In other words, a bit of implementation boilerplate isn’t needed, making +it easier to use the trait. -The first purpose is similar, but in reverse: if we want to add a type -parameter to an existing trait, we can give it a default to let us extend the -functionality of the trait without breaking the existing implementation code. +The first purpose is similar to the second but in reverse: if we want to add a +type parameter to an existing trait, we can give it a default to let us extend +the functionality of the trait without breaking the existing implementation +code. ### Fully Qualified Syntax for Disambiguation: Calling Methods with the Same Name Nothing in Rust prevents a trait from having a method with the same name as -another trait’s method, nor can it prevent us from implementing both of these -traits on one type. It’s also possible to have a method implemented directly on -the type with the same name as methods from traits as well! +another trait’s method, nor does Rust prevent us from implementing both traits +on one type. It’s also possible to implement a method directly on the type with +the same name as methods from traits. -When calling methods with the same name, then, we need to tell Rust which one -we want to use. Consider the code in Listing 19-24 where we’ve defined two -traits, `Pilot` and `Wizard`, that both have a method called `fly`. We then -implement both traits on a type `Human` that itself already has a method named -`fly` implemented on it. Each `fly` method does something different: +When calling methods with the same name, we need to tell Rust which one we want +to use. Consider the code in Listing 19-24 where we’ve defined two traits, +`Pilot` and `Wizard`, that both have a method called `fly`. We then implement +both traits on a type `Human` that already has a method named `fly` implemented +on it. Each `fly` method does something different: Filename: src/main.rs @@ -1240,8 +1238,8 @@ impl Human { } ``` -Listing 19-24: Two traits defined to have a `fly` method, and implementations -of those traits on the `Human` type in addition to a `fly` method on `Human` +Listing 19-24: Two traits defined to have a `fly` method and implementations of +those traits on the `Human` type in addition to a `fly` method on `Human` directly When we call `fly` on an instance of `Human`, the compiler defaults to calling @@ -1258,12 +1256,12 @@ fn main() { Listing 19-25: Calling `fly` on an instance of `Human` -Running this will print out `*waving arms furiously*`, which shows that Rust +Running this code will print `*waving arms furiously*`, which shows that Rust called the `fly` method implemented on `Human` directly. -In order to call the `fly` methods from either the `Pilot` trait or the -`Wizard` trait, we need to use more explicit syntax in order to specify which -`fly` method we mean. This syntax is demonstrated in Listing 19-26: +To call the `fly` methods from either the `Pilot` trait or the `Wizard` trait, +we need to use more explicit syntax to specify which `fly` method we mean. +Listing 19-26 demonstrates this syntax: Filename: src/main.rs @@ -1279,11 +1277,11 @@ fn main() { Listing 19-26: Specifying which trait’s `fly` method we want to call Specifying the trait name before the method name clarifies to Rust which -implementation of `fly` we want to call. We could also choose to write -`Human::fly(&person)`, which is equivalent to `person.fly()` that we had in -Listing 19-26, but is a bit longer to write if we don’t need to disambiguate. +implementation of `fly` we want to call. We could also write +`Human::fly(&person)`, which is equivalent to `person.fly()` that we used in +Listing 19-26 but is a bit longer to write if we don’t need to disambiguate. -Running this code will print: +Running this code prints the following: ``` This is your captain speaking. @@ -1298,9 +1296,9 @@ to use based on the type of `self`. However, associated functions that are part of traits don’t have a `self` parameter. When two types in the same scope implement that trait, Rust can’t figure out which type we mean unless we use *fully qualified syntax*. For -example, take the `Animal` trait in Listing 19-27 that has the associated -function `baby_name`, the implementation of `Animal` for the struct `Dog`, and -the associated function `baby_name` defined on `Dog` directly: +example, the `Animal` trait in Listing 19-27 has the associated function +`baby_name`, the implementation of `Animal` for the struct `Dog`, and the +associated function `baby_name` defined on `Dog` directly: Filename: src/main.rs @@ -1331,25 +1329,25 @@ fn main() { Listing 19-27: A trait with an associated function and a type that has an associated function with the same name that also implements the trait -This code is for an animal shelter where they want to give all puppies the name -Spot, which is implemented in the `baby_name` associated function that is -defined on `Dog`. The `Dog` type also implements the trait `Animal`, which -describes characteristics that all animals have. Baby dogs are called puppies, -and that is expressed in the implementation of the `Animal` trait on `Dog` in -the `baby_name` function associated with the `Animal` trait. +This code is for an animal shelter that wants to name all puppies Spot, which +is implemented in the `baby_name` associated function that is defined on `Dog`. +The `Dog` type also implements the trait `Animal`, which describes +characteristics that all animals have. Baby dogs are called puppies, and that +is expressed in the implementation of the `Animal` trait on `Dog` in the +`baby_name` function associated with the `Animal` trait. -In `main`, we’re calling the `Dog::baby_name` function, which calls the -associated function defined on `Dog` directly. This code prints: +In `main`, we call the `Dog::baby_name` function, which calls the associated +function defined on `Dog` directly. This code prints the following: ``` A baby dog is called a Spot ``` -This isn’t what we wanted. We want to call the `baby_name` function that’s part -of the `Animal` trait that we implemented on `Dog` so that we print `A baby dog -is called a puppy`. The technique we used in Listing 19-26 doesn’t help here; -if we change `main` to be the code in Listing 19-28, we’ll get a compilation -error: +This output isn’t what we wanted. We want to call the `baby_name` function that +is part of the `Animal` trait that we implemented on `Dog` so the code prints +`A baby dog is called a puppy`. The technique of specifying the trait name that +we used in Listing 19-26 doesn’t help here; if we change `main` to the code in +Listing 19-28, we’ll get a compilation error: Filename: src/main.rs @@ -1363,7 +1361,7 @@ Listing 19-28: Attempting to call the `baby_name` function from the `Animal` trait, but Rust doesn’t know which implementation to use Because `Animal::baby_name` is an associated function rather than a method, and -thus doesn’t have a `self` parameter, Rust has no way to figure out which +thus doesn’t have a `self` parameter, Rust can’t figure out which implementation of `Animal::baby_name` we want. We’ll get this compiler error: ``` @@ -1392,39 +1390,39 @@ fn main() { Listing 19-29: Using fully qualified syntax to specify that we want to call the `baby_name` function from the `Animal` trait as implemented on `Dog` -We’re providing Rust with a type annotation within the angle brackets, and -we’re specifying that we want to call the `baby_name` method from the `Animal` -trait as implemented on `Dog` by saying that we want to treat the `Dog` type as -an `Animal` for this function call. This code will now print what we want: +We’re providing Rust with a type annotation within the angle brackets, which +indicates we want to call the `baby_name` method from the `Animal` trait as +implemented on `Dog` by saying that we want to treat the `Dog` type as an +`Animal` for this function call. This code will now print what we want: ``` A baby dog is called a puppy ``` -In general, fully qualified syntax is defined as: +In general, fully qualified syntax is defined as follows: ``` ::function(receiver_if_method, next_arg, ...); ``` -For associated functions, there would not be a `receiver`, there would only be -the list of other arguments. We could choose to use fully qualified syntax -everywhere that we call functions or methods. However, we’re allowed to leave -out any part of this syntax that Rust is able to figure out from other -information in the program. We only need to use this more verbose syntax in -cases where there are multiple implementations that use the same name and Rust -needs help in order to know which implementation we want to call. +For associated functions, there would not be a `receiver`: there would only be +the list of other arguments. We could use fully qualified syntax everywhere +that we call functions or methods. However, we’re allowed to omit any part of +this syntax that Rust can figure out from other information in the program. We +only need to use this more verbose syntax in cases where there are multiple +implementations that use the same name and Rust needs help to identify which +implementation we want to call. ### Using Supertraits to Require One Trait’s Functionality Within Another Trait -Sometimes, we may need one trait to use another trait’s functionality. In this -case, we need to be able to rely on the dependent trait also being implemented. -The trait we’re relying on is a *supertrait* of the trait we’re implementing. +Sometimes, we might need one trait to use another trait’s functionality. In +this case, we need to rely on the dependent trait also being implemented. The +trait we’re relying on is a *supertrait* of the trait we’re implementing. For example, let’s say we want to make an `OutlinePrint` trait with an -`outline_print` method that will print out a value framed in asterisks. That -is, given a `Point` struct that implements `Display` to result in `(x, y)`, -when we call `outline_print` on a `Point` instance that has 1 for `x` and 3 for +`outline_print` method that will print a value framed in asterisks. That is, +given a `Point` struct that implements `Display` to result in `(x, y)`, when we +call `outline_print` on a `Point` instance that has `1` for `x` and `3` for `y`, it should print the following: ``` @@ -1436,11 +1434,11 @@ when we call `outline_print` on a `Point` instance that has 1 for `x` and 3 for ``` In the implementation of `outline_print`, we want to use the `Display` trait’s -functionality. We therefore need to specify that the `OutlinePrint` trait will -only work for types that also implement `Display` and therefore provide the -functionality that `OutlinePrint` needs. We can do that in the trait definition -by specifying `OutlinePrint: Display`. This is similar to adding a trait bound -to the trait. Listing 19-30 shows an implementation of the `OutlinePrint` trait: +functionality. Therefore, we need to specify that the `OutlinePrint` trait will +only work for types that also implement `Display` and provide the functionality +that `OutlinePrint` needs. We can do that in the trait definition by specifying +`OutlinePrint: Display`. This technique is similar to adding a trait bound to +the trait. Listing 19-30 shows an implementation of the `OutlinePrint` trait: Filename: src/main.rs @@ -1464,12 +1462,12 @@ Listing 19-30: Implementing the `OutlinePrint` trait that requires the functionality from `Display` Because we’ve specified that `OutlinePrint` requires the `Display` trait, we -can use the `to_string` function that’s automatically implemented for any type +can use the `to_string` function that is automatically implemented for any type that implements `Display`. If we tried to use `to_string` without adding`: -Display` after the trait name we’d get an error saying that no method named +Display` after the trait name, we’d get an error saying that no method named `to_string` was found for the type `&Self` in the current scope. -Let’s see what happens if we try to implement `OutlinePrint` on a type that +Let’s see what happens when we try to implement `OutlinePrint` on a type that doesn’t implement `Display`, such as the `Point` struct: Filename: src/main.rs @@ -1483,7 +1481,7 @@ struct Point { impl OutlinePrint for Point {} ``` -We’ll get an error saying that `Display` is required but not implemented: +We get an error saying that `Display` is required but not implemented: ``` error[E0277]: the trait bound `Point: std::fmt::Display` is not satisfied @@ -1496,7 +1494,7 @@ error[E0277]: the trait bound `Point: std::fmt::Display` is not satisfied = help: the trait `std::fmt::Display` is not implemented for `Point` ``` -Once we implement `Display` on `Point` and satisfy the constraint that +To fix this, we implement `Display` on `Point` and satisfy the constraint that `OutlinePrint` requires, like so: Filename: src/main.rs @@ -1511,29 +1509,29 @@ impl fmt::Display for Point { } ``` -then implementing the `OutlinePrint` trait on `Point` will compile successfully -and we can call `outline_print` on a `Point` instance to display it within an -outline of asterisks. +Then implementing the `OutlinePrint` trait on `Point` will compile +successfully, and we can call `outline_print` on a `Point` instance to display +it within an outline of asterisks. ### The Newtype Pattern to Implement External Traits on External Types In Chapter 10 in the “Implementing a Trait on a Type” section, we mentioned the -orphan rule that says we’re allowed to implement a trait on a type as long as -either the trait or the type are local to our crate. It is possible to get +orphan rule that states we’re allowed to implement a trait on a type as long as +either the trait or the type are local to our crate. It’s possible to get around this restriction using the *newtype pattern*, which involves creating a -new type in a tuple struct (we covered tuple structs in the “Tuple Structs -without Named Fields to Create Different Types” section of Chapter 5). The -tuple struct will have one field and will be a thin wrapper around the type we -want to implement a trait for. Then the wrapper type is local to our crate, and -we can implement the trait on the wrapper. “Newtype” is a term originating from -the Haskell programming language. There’s no runtime performance penalty for -using this pattern, and the wrapper type is elided at compile time. - -As an example, we want to implement `Display` on `Vec`, which the orphan rule -prevents us from doing directly because the `Display` trait and the `Vec` type -are both defined outside of our crate. We can make a `Wrapper` struct that -holds an instance of `Vec`, then we can implement `Display` on `Wrapper` and -use the `Vec` value as shown in Listing 19-31: +new type in a tuple struct. (We covered tuple structs in the “Tuple Structs +without Named Fields to Create Different Types” section of Chapter 5.) The +tuple struct will have one field and be a thin wrapper around the type we want +to implement a trait for. Then the wrapper type is local to our crate, and we +can implement the trait on the wrapper. *Newtype* is a term that originates +from the Haskell programming language. There is no runtime performance penalty +for using this pattern, and the wrapper type is elided at compile time. + +As an example, let’s say we want to implement `Display` on `Vec`, which the +orphan rule prevents us from doing directly because the `Display` trait and the +`Vec` type are defined outside our crate. We can make a `Wrapper` struct that +holds an instance of `Vec`; then we can implement `Display` on `Wrapper` and +use the `Vec` value, as shown in Listing 19-31: Filename: src/main.rs @@ -1554,67 +1552,68 @@ fn main() { } ``` -Listing 19-31: Creating a `Wrapper` type around `Vec` to be able to -implement `Display` +Listing 19-31: Creating a `Wrapper` type around `Vec` to implement +`Display` The implementation of `Display` uses `self.0` to access the inner `Vec`, -because `Wrapper` is a tuple struct and the `Vec` is the item at index 0 in the +because `Wrapper` is a tuple struct and `Vec` is the item at index 0 in the tuple. Then we can use the functionality of the `Display` type on `Wrapper`. -The downside of this method is that, because `Wrapper` is a new type, it -doesn’t have the methods of the value it’s holding; we’d have to implement all -the methods of `Vec` directly on `Wrapper`, so that it can delegate to -`self.0`--- this allows us to treat `Wrapper` exactly like a `Vec`. If we -wanted the new type to have every single method that the inner type has, -implementing the `Deref` trait (discussed in Chapter 15 in the “Treating Smart -Pointers like Regular References with the `Deref` Trait” section) on the -wrapper to return the inner type can be a solution. If we don’t want the -wrapper type to have all the methods of the inner type, in order to restrict -the wrapper type’s behavior for example, we’d have to implement just the -methods we do want ourselves. - -That’s how the newtype pattern is used in relation to traits; it’s also a -useful pattern without having traits involved. Let’s switch focus now to talk -about some advanced ways to interact with Rust’s type system. +The downside of using this technique is that `Wrapper` is a new type, so it +doesn’t have the methods of the value it’s holding. We would have to implement +all the methods of `Vec` directly on `Wrapper` so it can delegate to `self.0`, +allowing us to treat `Wrapper` exactly like a `Vec`. If we wanted the new type +to have every method the inner type has, implementing the `Deref` trait +(discussed in Chapter 15 in the “Treating Smart Pointers like Regular +References with the `Deref` Trait” section) on the `Wrapper` to return the +inner type would be a solution. If we don’t want the `Wrapper` type to have all +the methods of the inner type, in order to restrict the `Wrapper` type’s +behavior for example, we would have to implement just the methods we do want +manually. + +Now you know how the newtype pattern is used in relation to traits; it’s also a +useful pattern even when traits are not involved. Let’s switch focus and look +at some advanced ways to interact with Rust’s type system. ## Advanced Types The Rust type system has some features that we’ve mentioned in this book but -haven’t yet discussed. We’ll start our discussion on advanced types with a more -general discussion about why newtypes are useful as types. We’ll then move to -type aliases, a feature similar to newtypes but with slightly different -semantics. We’ll also discuss the `!` type and dynamically sized types. +haven’t yet discussed. We’ll start by discussing newtypes in general as we +examine why newtypes are useful as types. Then we’ll move on to type aliases, a +feature similar to newtypes but with slightly different semantics. We’ll also +discuss the `!` type and dynamically sized types. ### Using the Newtype Pattern for Type Safety and Abstraction -> This section assumes you’ve read the newtype pattern section in the “Advanced -> Traits” section. +> Note: This section assumes you’ve read the earlier section “The Newtype +> Pattern to Implement External Traits on External Types”. -The newtype pattern is useful for other things beyond what we’ve discussed so -far, including statically enforcing that values are never confused, and as -indication of the units of a value. We actually had an example of this in -Listing 19-23: the `Millimeters` and `Meters` structs both wrap `u32` values in -a newtype. If we write a function with a parameter of type `Millimeters`, we -won’t be able to compile a program that accidentally tries to call that -function with a value of type `Meters` or a plain `u32`. +The newtype pattern is useful for other tasks beyond what we’ve discussed so +far, including statically enforcing that values are never confused and as an +indication of the units of a value. You saw an example of using newtypes to +indicate units in Listing 19-23: recall that the `Millimeters` and `Meters` +structs wrapped `u32` values in a newtype. If we wrote a function with a +parameter of type `Millimeters`, we couldn’t compile a program that +accidentally tried to call that function with a value of type `Meters` or a +plain `u32`. -Another use is in abstracting away some implementation details of a type: the -wrapper type can expose a public API that’s different to the API of the private -inner type, if we used it directly to restrict the available functionality, for -example. +Another use of the newtype pattern is in abstracting away some implementation +details of a type: the new type can expose a public API that is different from +the API of the private inner type if we used the new type directly to restrict +the available functionality, for example. -Newtypes can also hide internal generic types. For example, we could provide a +Newtypes can also hide internal implementation. For example, we could provide a `People` type to wrap a `HashMap` that stores a person’s ID associated with their name. Code using `People` would only interact with the public API we provide, such as a method to add a name string to the `People` -collection, and that code wouldn’t need to know that we assign an `i32` ID to -names internally. The newtype pattern is a lightweight way to achieve -encapsulation to hide implementation details that we discussed in the -“Encapsulation that Hides Implementation Details” section of Chapter 17. +collection; that code wouldn’t need to know that we assign an `i32` ID to names +internally. The newtype pattern is a lightweight way to achieve encapsulation +to hide implementation details, which we discussed in the “Encapsulation that +Hides Implementation Details” section of Chapter 17. ### Type Aliases Create Type Synonyms -Alongside the newtype pattern, Rust provides the ability to declare a *type +Along with the newtype pattern, Rust provides the ability to declare a *type alias* to give an existing type another name. For this we use the `type` keyword. For example, we can create the alias `Kilometers` to `i32` like so: @@ -1622,10 +1621,10 @@ keyword. For example, we can create the alias `Kilometers` to `i32` like so: type Kilometers = i32; ``` -This means `Kilometers` is a *synonym* for `i32`; unlike the `Millimeters` and -`Meters` types we created in Listing 19-23, `Kilometers` is not a separate, new -type. Values that have the type `Kilometers` will be treated exactly the same -as values of type `i32`: +Now, the alias `Kilometers` is a *synonym* for `i32`; unlike the `Millimeters` +and `Meters` types we created in Listing 19-23, `Kilometers` is not a separate, +new type. Values that have the type `Kilometers` will be treated the same as +values of type `i32`: ``` type Kilometers = i32; @@ -1636,21 +1635,21 @@ let y: Kilometers = 5; println!("x + y = {}", x + y); ``` -Because `Kilometers` and `i32`, are the same type, we can add values of both -types, and we can also pass `Kilometers` values to functions that take `i32` -parameters. With this method, though, we don’t get the type checking benefits -that we get from the newtype pattern discussed in the previous section. +Because `Kilometers` and `i32` are the same type, we can add values of both +types and we can pass `Kilometers` values to functions that take `i32` +parameters. However, using this method, we don’t get the type checking benefits +that we get from the newtype pattern discussed earlier. The main use case for type synonyms is to reduce repetition. For example, we -may have a lengthy type like this: +might have a lengthy type like this: ``` Box ``` -Writing this out in function signatures and as type annotations all over the -place can be tiresome and error-prone. Imagine having a project full of code -like that in Listing 19-32: +Writing this lengthy type in function signatures and as type annotations all +over the code can be tiresome and error prone. Imagine having a project full of +code like that in Listing 19-32: ``` let f: Box = Box::new(|| println!("hi")); @@ -1666,9 +1665,9 @@ fn returns_long_type() -> Box { Listing 19-32: Using a long type in many places -A type alias makes this code more manageable by reducing the repetition. Here, -we’ve introduced an alias named `Thunk` for the verbose type, and can replace -all uses of the type with the shorter `Thunk` as shown in Listing 19-33: +A type alias makes this code more manageable by reducing the repetition. In +Listing 19-33, we’ve introduced an alias named `Thunk` for the verbose type and +can replace all uses of the type with the shorter alias `Thunk`: ``` type Thunk = Box; @@ -1686,9 +1685,10 @@ fn returns_long_type() -> Thunk { Listing 19-33: Introducing a type alias `Thunk` to reduce repetition -Much easier to read and write! Choosing a good name for a type alias can help -communicate your intent as well (*thunk* is a word for code to be evaluated at -a later time, so it’s an appropriate name for a closure that gets stored). +This code is much easier to read and write! Choosing a meaningful name for a +type alias can help communicate your intent as well (*thunk* is a word for code +to be evaluated at a later time, so it’s an appropriate name for a closure that +gets stored). Type aliases are also commonly used with the `Result` type for reducing repetition. Consider the `std::io` module in the standard library. I/O @@ -1711,17 +1711,17 @@ pub trait Write { } ``` -We have `Result<..., Error>` repeated a lot. As such, `std::io` has this type +The `Result<..., Error>` is repeated a lot. As such, `std::io` has this type of alias declaration: ``` type Result = Result; ``` -Because this is in the `std::io` module, we can use the fully qualified alias -`std::io::Result`; that is, a `Result` with the `E` filled in as -`std::io::Error`. The `Write` trait function signatures end up looking like -this: +Because this declaration is in the `std::io` module, we can use the fully +qualified alias `std::io::Result`; that is, a `Result` with the `E` +filled in as `std::io::Error`. The `Write` trait function signatures end up +looking like this: ``` pub trait Write { @@ -1733,17 +1733,17 @@ pub trait Write { } ``` -The type alias helps in two ways: this is easier to write *and* it gives us a -consistent interface across all of `std::io`. Because it’s an alias, it is just -another `Result`, which means we can use any methods that work on +The type alias helps in two ways: it makes code easier to write *and* it gives +us a consistent interface across all of `std::io`. Because it’s an alias, it’s +just another `Result`, which means we can use any methods that work on `Result` with it, as well as special syntax like `?`. ### The `!` Never Type that Never Returns Rust has a special type named `!` that’s known in type theory lingo as the -*empty type*, because it has no values. We prefer to call it the *never type*, +*empty type* because it has no values. We prefer to call it the *never type* because it stands in the place of the return type when a function will never -return. For example: +return. Here is an example: ``` fn bar() -> ! { @@ -1751,13 +1751,13 @@ fn bar() -> ! { } ``` -This is read as “the function `bar` returns never.” Functions that return never -are called *diverging functions*. We can’t create values of the type `!`, so -`bar` can never possibly return. +This code is read as “the function `bar` returns never.” Functions that return +never are called *diverging functions*. We can’t create values of the type `!` +so `bar` can never possibly return. -But what use is a type you can never create values for? If you think all the -way back to Chapter 2, we had some code that looked like the code we’ve -reproduced here in Listing 19-34: +But what use is a type you can never create values for? Recall the code in +Chapter 2 that we added in the “Handling Invalid Input” section; we’ve +reproduced it here in Listing 19-34: ``` let guess: u32 = match guess.trim().parse() { @@ -1769,35 +1769,35 @@ let guess: u32 = match guess.trim().parse() { Listing 19-34: A `match` with an arm that ends in `continue` At the time, we skipped over some details in this code. In Chapter 6 in “The -`match` Control Flow Operator” section, we covered that `match` arms must all -return the same type. This, for example, doesn’t work: +`match` Control Flow Operator” section, we discussed that `match` arms must all +return the same type. So, for example, the following code doesn’t work: ``` -let guess = match guess.trim().parse() { +let guess = match guess.trim().parse() { Ok(_) => 5, Err(_) => "hello", } ``` -The type of `guess` here would have to be both an integer and a string, and -Rust requires that `guess` can only have one type. So what does `continue` +The type of `guess` in this code would have to be an integer *and* a string, +and Rust requires that `guess` can only have one type. So what does `continue` return? How were we allowed to return a `u32` from one arm and have another arm that ends with `continue` in Listing 19-34? -As you may have guessed, `continue` has a value of `!`. That is, when Rust goes -to compute the type of `guess`, it looks at both of the match arms, the former -with a value of `u32`, and the latter a value of `!`. Because `!` can never -have a value, Rust decides that the type of `guess` is `u32`. +As you might have guessed, `continue` has a `!` value. That is, when Rust +computes the type of `guess`, it looks at both match arms, the former with a +value of `u32` and the latter with a `!` value. Because `!` can never have a +value, Rust decides that the type of `guess` is `u32`. The formal way of describing this behavior is that expressions of type `!` can be coerced into any other type. We’re allowed to end this `match` arm with -`continue` because `continue` doesn’t actually return a value; it instead moves -control back to the top of the loop, so in the `Err` case, we never actually -assign a value to `guess`. +`continue` because `continue` doesn’t return a value; instead, it moves control +back to the top of the loop, so in the `Err` case, we never assign a value to +`guess`. -The never type is also useful with `panic!`. Remember the `unwrap` function -that we call on `Option` values to produce a value or panic? Here’s its -definition: +The never type is useful with the `panic!` macro as well. Remember the `unwrap` +function that we call on `Option` values to produce a value or panic? Here +is its definition: ``` impl Option { @@ -1810,11 +1810,11 @@ impl Option { } ``` -Here, the same thing happens as in the `match` in Listing 19-34: we know that -`val` has the type `T`, and `panic!` has the type `!`, so the result of the -overall `match` expression is `T`. This works because `panic!` doesn’t produce -a value; it ends the program. In the `None` case, we won’t be returning a value -from `unwrap`, so this code is valid. +In this code, the same thing happens as in the `match` in Listing 19-34: Rust +sees that `val` has the type `T` and `panic!` has the type `!` so the result of +the overall `match` expression is `T`. This code works because `panic!` doesn’t +produce a value; it ends the program. In the `None` case, we won’t be returning +a value from `unwrap`, so this code is valid. One final expression that has the type `!` is a `loop`: @@ -1826,23 +1826,23 @@ loop { } ``` -Here, the loop never ends, so the value of the expression is `!`. This wouldn’t -be true if we included a `break`, however, as the loop would terminate when it -got to the `break`. +Here, the loop never ends, so `!` is the value of the expression. However, this +wouldn’t be true if we included a `break`, because the loop would terminate +when it got to the `break`. -### Dynamically Sized Types & `Sized` +### Dynamically Sized Types and `Sized` -Due to Rust’s need to know things like how much space to allocate for a value -of a particular type, there’s a corner of its type system that can be -confusing: the concept of *dynamically sized types*. Sometimes referred to as -‘DSTs’ or ‘unsized types’, these types let us talk about types whose size we -can only know at runtime. +Due to Rust’s need to know certain details, such as how much space to allocate +for a value of a particular type, there is a corner of its type system that can +be confusing: the concept of *dynamically sized types*. Sometimes referred to +as *DSTs* or *unsized types*, these types let us write code using values whose +size we can only know at runtime. -Let’s dig into the details of a dynamically sized type that we’ve been using -this whole book: `str`. That’s right, not `&str`, but `str` on its own, is a -DST. We can’t know how long the string is until runtime, meaning we can’t -create a variable of type `str`, nor can we take an argument of type `str`. -Consider this code, which does not work: +Let’s dig into the details of a dynamically sized type called `str`, which +we’ve been using throughout the book. That’s right, not `&str`, but `str` on +its own, is a DST. We can’t know how long the string is until runtime, meaning +we can’t create a variable of type `str`, nor can we take an argument of type +`str`. Consider the following code, which does not work: ``` let s1: str = "Hello there!"; @@ -1850,43 +1850,40 @@ let s2: str = "How's it going?"; ``` Rust needs to know how much memory to allocate for any value of a particular -type, and all values of a type must use the same amount of memory. If we were -allowed to write this code, that would mean these two `str` values would need -to take up the exact same amount of space, but they have different lengths: -`s1` needs 12 bytes of storage, and `s2` needs 15. This is why it’s not -possible to create a variable holding a dynamically sized type. - -So what to do? You already know the answer in this case: we make the types of -`s1` and `s2` a `&str` rather than `str`. If you think back to the “String -Slices” section of Chapter 4, we said that the slice data structure stores the +type, and all values of a type must use the same amount of memory. If Rust +allowed us to write this code, these two `str` values would need to take up the +same amount of space. But they have different lengths: `s1` needs 12 bytes of +storage and `s2` needs 15. This is why it’s not possible to create a variable +holding a dynamically sized type. + +So what do we do? In this case, you already know the answer: we make the types +of `s1` and `s2` a `&str` rather than a `str`. Recall that in the “String +Slices” section of Chapter 4 we said the slice data structure stores the starting position and the length of the slice. -So while a `&T` is a single value that stores the memory address of where the -`T` is located, a `&str` is *two* values: the address of the `str` and its -length. As such, a `&str` has a size we can know at compile time: it’s two -times the size of a `usize` in length. That is, we always know the size of a -`&str`, no matter how long the string it refers to is. This is the general way -in which dynamically sized types are used in Rust; they have an extra bit of -metadata that stores the size of the dynamic information. This leads us to the -golden rule of dynamically sized types: we must always put values of +So although a `&T` is a single value that stores the memory address of where +the `T` is located, a `&str` is *two* values: the address of the `str` and its +length. As such, we can know the size of a `&str` value at compile time: it’s +two times the size of a `usize` in length. That is, we always know the size of +a `&str`, no matter how long the string it refers to is. In general, this is +the way in which dynamically sized types are used in Rust: they have an extra +bit of metadata that stores the size of the dynamic information. The golden +rule of dynamically sized types is that we must always put values of dynamically sized types behind a pointer of some kind. -We can combine `str` with all kinds of pointers: `Box`, for example, or -`Rc`. In fact, you’ve seen this before, but with a different dynamically +We can combine `str` with all kinds of pointers: for example, `Box` or +`Rc`. In fact, you’ve seen this before but with a different dynamically sized type: traits. Every trait is a dynamically sized type we can refer to by using the name of the trait. In Chapter 17 in the “Using Trait Objects that -Allow for Values of Different Types” section, we mentioned that in order to use -traits as trait objects, we have to put them behind a pointer like `&Trait` or -`Box` (`Rc` would work too). Traits being dynamically sized is -the reason we have to do that! +Allow for Values of Different Types” section, we mentioned that to use traits +as trait objects, we must put them behind a pointer, such as `&Trait` or +`Box` (`Rc` would work too). -#### The `Sized` Trait - -To work with DSTs, Rust has a particular trait to determine if a type’s size is -known at compile time or not: the `Sized` trait. This trait is automatically -implemented for everything whose size is known at compile time. In addition, -Rust implicitly adds a bound on `Sized` to every generic function. That is, a -generic function definition like this: +To work with DSTs, Rust has a particular trait called the `Sized` trait to +determine whether or not a type’s size is known at compile time. This trait is +automatically implemented for everything whose size is known at compile time. +In addition, Rust implicitly adds a bound on `Sized` to every generic function. +That is, a generic function definition like this: ``` fn generic(t: T) { @@ -1894,7 +1891,7 @@ fn generic(t: T) { } ``` -is actually treated as if we had written this: +is actually treated as though we had written this: ``` fn generic(t: T) { @@ -1903,7 +1900,7 @@ fn generic(t: T) { ``` By default, generic functions will only work on types that have a known size at -compile time. There is, however, special syntax you can use to relax this +compile time. However, you can use the following special syntax to relax this restriction: ``` @@ -1912,31 +1909,31 @@ fn generic(t: &T) { } ``` -A trait bound on `?Sized` is the opposite of a trait bound on `Sized`; that is, -we would read this as “`T` may or may not be `Sized`”. This syntax is only -available for `Sized`, no other traits. +A trait bound on `?Sized` is the opposite of a trait bound on `Sized`: we would +read this as “`T` may or may not be `Sized`.” This syntax is only available for +`Sized`, not any other traits. -Also note we switched the type of the `t` parameter from `T` to `&T`: because -the type might not be `Sized`, we need to use it behind some kind of pointer. -In this case, we’ve chosen a reference. +Also note that we switched the type of the `t` parameter from `T` to `&T`. +Because the type might not be `Sized`, we need to use it behind some kind of +pointer. In this case, we’ve chosen a reference. -Next let’s talk about functions and closures! +Next, we’ll talk about functions and closures! -## Advanced Functions & Closures +## Advanced Functions and Closures -Finally, let’s discuss some advanced features related to functions and -closures: function pointers, diverging functions, and returning closures. +Finally, we’ll explore some advanced features related to functions and +closures, which include function pointers and returning closures. ### Function Pointers We’ve talked about how to pass closures to functions; you can also pass regular -functions to functions! This is useful when we want to pass a function we’ve -already defined rather than defining a new closure. We do this using function -pointers to allow us to use functions as arguments to other functions. -Functions coerce to the type `fn`, with a lower case ‘f’ not to be confused -with the `Fn` closure trait. The `fn` type is called a *function pointer*. The -syntax for specifying that a parameter is a function pointer is similar to that -of closures, as shown in Listing 19-35: +functions to functions! This technique is useful when we want to pass a +function we’ve already defined rather than defining a new closure. We do this +using function pointers to allow us to use functions as arguments to other +functions. Functions coerce to the type `fn` (with a lowercase f), not to be +confused with the `Fn` closure trait. The `fn` type is called a function +pointer. The syntax for specifying that a parameter is a function pointer is +similar to that of closures, as shown in Listing 19-35: Filename: src/main.rs @@ -1958,28 +1955,28 @@ fn main() { Listing 19-35: Using the `fn` type to accept a function pointer as an argument -This prints `The answer is: 12`. We specify that the parameter `f` in +This code prints `The answer is: 12`. We specify that the parameter `f` in `do_twice` is an `fn` that takes one parameter of type `i32` and returns an `i32`. We can then call `f` in the body of `do_twice`. In `main`, we can pass the function name `add_one` as the first argument to `do_twice`. Unlike closures, `fn` is a type rather than a trait, so we specify `fn` as the -parameter type directly, rather than declaring a generic type parameter with -one of the `Fn` traits as a trait bound. +parameter type directly rather than declaring a generic type parameter with one +of the `Fn` traits as a trait bound. Function pointers implement all three of the closure traits (`Fn`, `FnMut`, and `FnOnce`), so we can always pass a function pointer as an argument for a -function that expects a closure. Prefer to write functions using a generic type -and one of the closure traits, so that your functions can accept either +function that expects a closure. It’s best to write functions using a generic +type and one of the closure traits so your functions can accept either functions or closures. -An example of a case where you’d want to only accept `fn` and not closures is -when interfacing with external code that doesn’t have closures: C functions can +An example of where you would want to only accept `fn` and not closures is when +interfacing with external code that doesn’t have closures: C functions can accept functions as arguments, but C doesn’t have closures. -For an example where we can use either a closure defined inline or a named +As an example of where we can use either a closure defined inline or a named function, let’s look at a use of `map`. To use the `map` function to turn a -vector of numbers into a vector of strings, we could use a closure: +vector of numbers into a vector of strings, we could use a closure, like this: ``` let list_of_numbers = vec![1, 2, 3]; @@ -1989,7 +1986,8 @@ let list_of_strings: Vec = list_of_numbers .collect(); ``` -Or we could name a function as the argument to `map` instead of the closure: +Or we could name a function as the argument to `map` instead of the closure, +like this: ``` let list_of_numbers = vec![1, 2, 3]; @@ -1999,25 +1997,25 @@ let list_of_strings: Vec = list_of_numbers .collect(); ``` -Note that we do have to use the fully qualified syntax that we talked about in -the “Advanced Traits” section because there are multiple functions available -named `to_string`; here, we’re using the `to_string` function defined in the +Note that we must use the fully qualified syntax that we talked about earlier +in the “Advanced Traits” section because there are multiple functions available +named `to_string`. Here, we’re using the `to_string` function defined in the `ToString` trait, which the standard library has implemented for any type that implements `Display`. -Some people prefer this style, some people prefer to use closures. They end up -with the same code, so use whichever feels more clear to you. +Some people prefer this style, and some people prefer to use closures. They end +up compiling to the same code, so use whichever style is clearer to you. ### Returning Closures Closures are represented by traits, which means we can’t return closures -directly. In most cases where we may want to return a trait, we can instead use -the concrete type that implements the trait as the return value of the -function. We can’t do that with closures, though, because they don’t have a -concrete type that’s returnable; we’re not allowed to use the function pointer -`fn` as a return type, for example. +directly. In most cases where we might want to return a trait, we can instead +use the concrete type that implements the trait as the return value of the +function. But we can’t do that with closures because they don’t have a concrete +type that is returnable; we’re not allowed to use the function pointer `fn` as +a return type, for example. -This code that tries to return a closure directly won’t compile: +The following code tries to return a closure directly, but it won’t compile: ``` fn returns_closure() -> Fn(i32) -> i32 { @@ -2025,7 +2023,7 @@ fn returns_closure() -> Fn(i32) -> i32 { } ``` -The compiler error is: +The compiler error is as follows: ``` error[E0277]: the trait bound `std::ops::Fn(i32) -> i32 + 'static: @@ -2041,9 +2039,9 @@ std::marker::Sized` is not satisfied = note: the return type of a function must have a statically known size ``` -Our error references the `Sized` trait again! Rust doesn’t know how much space -it will need to store the closure. We saw a solution to this in the previous -section: we can use a trait object: +The error references the `Sized` trait again! Rust doesn’t know how much space +it will need to store the closure. We saw a solution to this problem earlier. +We can use a trait object: ``` fn returns_closure() -> Box i32> { @@ -2051,17 +2049,18 @@ fn returns_closure() -> Box i32> { } ``` -This code will compile just fine. For more about trait objects, refer back to -the “Trait Objects” section in Chapter 17. +This code will compile just fine. For more about trait objects, refer to the +“Trait Objects” section in Chapter 17. ## Summary -Whew! Now we’ve gone over features of Rust that aren’t used often, but are -available if you need them in very particular circumstances. We’ve introduced a -lot of complex topics so that, when you encounter them in error message -suggestions or in others’ code, you’ll at least have seen these concepts and -syntax once before. You can use this chapter as a reference to guide you to -your solutions. +Whew! Now you have some features of Rust in your toolbox that you won’t use +often, but you’ll know they’re available in very particular circumstances. +We’ve introduced several complex topics so that when you encounter them in +error message suggestions or in other peoples’ code, you’ll be able to +recognize these concepts and syntax. Use this chapter as a reference to guide +you to solutions. + +Next, we’ll put everything we’ve discussed throughout the book into practice +and do one more project! -Now, let’s put everything we’ve learned throughout the book into practice with -one more project! diff --git a/second-edition/src/ch19-00-advanced-features.md b/second-edition/src/ch19-00-advanced-features.md index 74682b9a57..7443363f47 100644 --- a/second-edition/src/ch19-00-advanced-features.md +++ b/second-edition/src/ch19-00-advanced-features.md @@ -1,22 +1,22 @@ # Advanced Features -We’ve come a long way! By now, you’ve learned 99% of the things you’ll need to -know when writing Rust. Before we do one more project in Chapter 20, let’s talk -about a few things you may run into that last 1% of the time. Feel free to use -this chapter as a reference for when you run into something unknown in the -wild; the features you’ll learn to use here are useful in very specific -situations. We don’t want to leave these features out, but you won’t find -yourself reaching for them often. +By now, you’ve learned the most commonly used parts of the Rust programming +language. Before we do one more project in Chapter 20, we’ll look at a few +aspects of the language you might run into every once in a while. You can use +this chapter as a reference for when you encounter any unknowns when using +Rust. The features you’ll learn to use in this chapter are useful in very +specific situations. Although you might not reach for them often, we want to +make sure you have a grasp of all the features Rust has to offer. -In this chapter, we’re going to cover: +In this chapter, we’ll cover: -* Unsafe Rust: for when you need to opt out of some of Rust’s guarantees and - make yourself responsible for upholding the guarantees instead -* Advanced Lifetimes: syntax for complex lifetime situations -* Advanced Traits: Associated Types, default type parameters, fully qualified +* Unsafe Rust: Opt out of some of Rust’s guarantees and manually uphold the + guarantees +* Advanced lifetimes: Syntax for complex lifetime situations +* Advanced traits: Associated types, default type parameters, fully qualified syntax, supertraits, and the newtype pattern in relation to traits -* Advanced Types: some more about the newtype pattern, type aliases, the - “never” type, and dynamically sized types -* Advanced Functions and Closures: function pointers and returning closures +* Advanced types: More about the newtype pattern, type aliases, the *never* + type, and dynamically sized types +* Advanced functions and closures: Function pointers and returning closures It’s a panoply of Rust features with something for everyone! Let’s dive in! diff --git a/second-edition/src/ch19-01-unsafe-rust.md b/second-edition/src/ch19-01-unsafe-rust.md index 1c1d963c17..5de9742663 100644 --- a/second-edition/src/ch19-01-unsafe-rust.md +++ b/second-edition/src/ch19-01-unsafe-rust.md @@ -1,91 +1,92 @@ ## Unsafe Rust All the code we’ve discussed so far has had Rust’s memory safety guarantees -enforced at compile time. However, Rust has a second language hiding inside of -it that does not enforce these memory safety guarantees: unsafe Rust. This -works just like regular Rust, but gives you extra superpowers. +enforced at compile time. However, Rust has a second language hidden inside it +that doesn’t enforce these memory safety guarantees: it’s called *unsafe Rust* +and works just like regular Rust, but gives us extra superpowers. Unsafe Rust exists because, by nature, static analysis is conservative. When -the compiler is trying to determine if code upholds the guarantees or not, it’s -better for it to reject some programs that are valid than accept some programs -that are invalid. That inevitably means there are some times when your code -might be okay, but Rust thinks it’s not! In these cases, you can use unsafe -code to tell the compiler, “trust me, I know what I’m doing.” The downside is -that you’re on your own; if you get unsafe code wrong, problems due to memory -unsafety, like null pointer dereferencing, can occur. - -There’s another reason Rust has an unsafe alter ego: the underlying hardware of -computers is inherently not safe. If Rust didn’t let you do unsafe operations, -there would be some tasks that you simply could not do. Rust needs to allow you -to do low-level systems programming like directly interacting with your -operating system, or even writing your own operating system! That’s one of the -goals of the language. Let’s see what you can do with unsafe Rust, and how to -do it. +the compiler tries to determine whether or not code upholds the guarantees, +it’s better for it to reject some valid programs rather than accepting some +invalid programs. Although the code might be okay, as far as Rust is able to +tell, it’s not! In these cases, we can use unsafe code to tell the compiler, +“trust me, I know what I’m doing.” The downside is that we use it at our own +risk: if we use unsafe code incorrectly, problems due to memory unsafety, such +as null pointer dereferencing, can occur. + +Another reason Rust has an unsafe alter ego is that the underlying computer +hardware is inherently unsafe. If Rust didn’t let us do unsafe operations, we +couldn’t do certain tasks. Rust needs to allow us to do low-level systems +programming, such as directly interacting with the operating system or even +writing our own operating system. Working with low-level systems programming is +one of the goals of the language. Let’s explore what we can do with unsafe Rust +and how to do it. ### Unsafe Superpowers -To switch into unsafe Rust we use the `unsafe` keyword, and then we can start a -new block that holds the unsafe code. There are four actions that you can take -in unsafe Rust that you can’t in safe Rust that we call “unsafe superpowers.” -Those superpowers are the ability to: +To switch to unsafe Rust, we use the `unsafe` keyword, and then start a new +block that holds the unsafe code. We can take four actions in unsafe Rust, +which we call *unsafe superpowers*, that we can’t in safe Rust. Those +superpowers include the ability to: -1. Dereference a raw pointer -2. Call an unsafe function or method -3. Access or modify a mutable static variable -4. Implement an unsafe trait +* Dereference a raw pointer +* Call an unsafe function or method +* Access or modify a mutable static variable +* Implement an unsafe trait It’s important to understand that `unsafe` doesn’t turn off the borrow checker or disable any other of Rust’s safety checks: if you use a reference in unsafe -code, it will still be checked. The `unsafe` keyword only gives you access to +code, it will still be checked. The `unsafe` keyword only gives us access to these four features that are then not checked by the compiler for memory -safety. You still get some degree of safety inside of an unsafe block! +safety. We still get some degree of safety inside of an unsafe block. -Furthermore, `unsafe` does not mean the code inside the block is necessarily +In addition, `unsafe` does not mean the code inside the block is necessarily dangerous or that it will definitely have memory safety problems: the intent is -that you as the programmer will ensure the code inside an `unsafe` block will +that as the programmer, we’ll ensure the code inside an `unsafe` block will access memory in a valid way. People are fallible, and mistakes will happen, but by requiring these four -unsafe operations to be inside blocks annotated with `unsafe`, you’ll know that +unsafe operations to be inside blocks annotated with `unsafe` we’ll know that any errors related to memory safety must be within an `unsafe` block. Keep -`unsafe` blocks small and you’ll thank yourself later when you go to -investigate memory bugs. +`unsafe` blocks small; you’ll be thankful later when you investigate memory +bugs. -To isolate unsafe code as much as possible, it’s a good idea to enclose unsafe -code within a safe abstraction and provide a safe API, which we’ll be -discussing once we get into unsafe functions and methods. Parts of the standard +To isolate unsafe code as much as possible, it’s best to enclose unsafe code +within a safe abstraction and provide a safe API, which we’ll discuss later in +the chapter when we examine unsafe functions and methods. Parts of the standard library are implemented as safe abstractions over unsafe code that has been -audited. This technique prevents uses of `unsafe` from leaking out into all the -places that you or your users might want to make use of the functionality -implemented with `unsafe` code, because using a safe abstraction is safe. +audited. Wrapping unsafe code in a safe abstraction prevents uses of `unsafe` +from leaking out into all the places that you or your users might want to use +the functionality implemented with `unsafe` code, because using a safe +abstraction is safe. -Let’s talk about each of the four unsafe superpowers in turn, and along the way -we’ll look at some abstractions that provide a safe interface to unsafe code. +Let’s look at each of the four unsafe superpowers in turn: we’ll also look at +some abstractions that provide a safe interface to unsafe code. ### Dereferencing a Raw Pointer -Way back in Chapter 4, in the “Dangling References” section, we covered that -the compiler ensures references are always valid. Unsafe Rust has two new types -similar to references called *raw pointers*. Just like with references, raw -pointers can be immutable or mutable, written as `*const T` and `*mut T`, -respectively. The asterisk isn’t the dereference operator; it’s part of the +In Chapter 4, in the “Dangling References” section, we mentioned that the +compiler ensures references are always valid. Unsafe Rust has two new types +called *raw pointers* that are similar to references. As with references, raw +pointers can be immutable or mutable and are written as `*const T` and `*mut +T`, respectively. The asterisk isn’t the dereference operator; it’s part of the type name. In the context of raw pointers, “immutable” means that the pointer can’t be directly assigned to after being dereferenced. Different from references and smart pointers, keep in mind that raw pointers: -- Are allowed to ignore the borrowing rules and have both immutable and - mutable pointers, or multiple mutable pointers to the same location -- Aren’t guaranteed to point to valid memory -- Are allowed to be null -- Don’t implement any automatic clean-up +* Are allowed to ignore the borrowing rules by having both immutable and + mutable pointers or multiple mutable pointers to the same location +* Aren’t guaranteed to point to valid memory +* Are allowed to be null +* Don’t implement any automatic cleanup -By opting out of having Rust enforce these guarantees, you are able to make the -tradeoff of giving up guaranteed safety to gain performance or the ability to +By opting out of having Rust enforce these guarantees, we can make the +trade-off of giving up guaranteed safety to gain performance or the ability to interface with another language or hardware where Rust’s guarantees don’t apply. -Listing 19-1 shows how to create both an immutable and a mutable raw pointer -from references. +Listing 19-1 shows how to create an immutable and a mutable raw pointer from +references: ```rust let mut num = 5; @@ -96,22 +97,22 @@ let r2 = &mut num as *mut i32; Listing 19-1: Creating raw pointers from references -Notice we don’t include the `unsafe` keyword here---you can *create* raw -pointers in safe code, you just can’t *dereference* raw pointers outside of an -unsafe block, as we’ll see in a bit. +Notice that we don’t include the `unsafe` keyword in this code. We can create +raw pointers in safe code; we just can’t dereference raw pointers outside an +unsafe block, as you’ll see in a bit. We’ve created raw pointers by using `as` to cast an immutable and a mutable reference into their corresponding raw pointer types. Because we created them -directly from references that are guaranteed to be valid, we can know that -these particular raw pointers are valid, but we can’t make that assumption -about just any raw pointer. +directly from references guaranteed to be valid, we know these particular raw +pointers are valid, but we can’t make that assumption about just any raw +pointer. -Next we’ll create a raw pointer whose validity we can’t be so certain of. +Next, we’ll create a raw pointer whose validity we can’t be so certain of. Listing 19-2 shows how to create a raw pointer to an arbitrary location in -memory. Trying to use arbitrary memory is undefined: there may be data at that -address or there may not, the compiler might optimize the code so that there is -no memory access, or your program might segfault. There’s not usually a good -reason to be writing code like this, but it is possible: +memory. Trying to use arbitrary memory is undefined: there might be data at +that address or there might not, the compiler might optimize the code so there +is no memory access, or the program might error with a segmentation fault. +Usually, there is no good reason to write code like this, but it is possible: ```rust let address = 0x012345usize; @@ -121,10 +122,9 @@ let r = address as *const i32; Listing 19-2: Creating a raw pointer to an arbitrary memory address -Remember that we said you can create raw pointers in safe code, but you can’t -*dereference* raw pointers and read the data being pointed to. We’ll do so now -using the dereference operator, `*`, on a raw pointer, which does require an -`unsafe` block, as shown in Listing 19-3: +Recall that we can create raw pointers in safe code, but we can’t *dereference* +raw pointers and read the data being pointed to. In Listing 19-3, we use the +dereference operator `*` on a raw pointer that requires an `unsafe` block: ```rust let mut num = 5; @@ -141,36 +141,37 @@ unsafe { Listing 19-3: Dereferencing raw pointers within an `unsafe` block -Creating a pointer can’t do any harm; it’s only when accessing the value that -it points at that you might end up dealing with an invalid value. +Creating a pointer does no harm; it’s only when we try to access the value that +it points at that we might end up dealing with an invalid value. Note also that in Listing 19-1 and 19-3 we created `*const i32` and `*mut i32` -raw pointers that both pointed to the same memory location, that of `num`. If -instead we’d tried to create an immutable and a mutable reference to `num`, -this would not have compiled because Rust’s ownership rules don’t allow a -mutable reference at the same time as any immutable references. With raw -pointers, we are able to create a mutable pointer and an immutable pointer to -the same location, and change data through the mutable pointer, potentially +raw pointers that both pointed to the same memory location, where `num` is +stored. If we instead tried to create an immutable and a mutable reference to +`num`, the code would not have compiled because Rust’s ownership rules don’t +allow a mutable reference at the same time as any immutable references. With +raw pointers, we can create a mutable pointer and an immutable pointer to the +same location, and change data through the mutable pointer, potentially creating a data race. Be careful! With all of these dangers, why would we ever use raw pointers? One major use -case is when interfacing with C code, as we’ll see in the next section on -unsafe functions. Another case is when building up safe abstractions that the -borrow checker doesn’t understand. Let’s introduce unsafe functions then look -at an example of a safe abstraction that uses unsafe code. +case is when interfacing with C code, as you’ll see in the next section, +“Calling an Unsafe Function or Method.” Another case is when building up safe +abstractions that the borrow checker doesn’t understand. We’ll introduce unsafe +functions and then look at an example of a safe abstraction that uses unsafe +code. ### Calling an Unsafe Function or Method The second type of operation that requires an unsafe block is calls to unsafe functions. Unsafe functions and methods look exactly like regular functions and -methods, but they have an extra `unsafe` out front. That `unsafe` indicates the -function has requirements we as programmers need to uphold when we call this -function, because Rust can’t guarantee we’ve met these requirements. By calling -an unsafe function within an `unsafe` block, we are saying that we’ve read this -function’s documentations and take responsibility for upholding the function’s -contracts ourselves. - -Here’s an unsafe function named `dangerous` that doesn’t do anything in its +methods, but they have an extra `unsafe` before the rest of the definition. The +`unsafe` keyword in this context indicates the function has requirements we +need to uphold when we call this function, because Rust can’t guarantee we’ve +met these requirements. By calling an unsafe function within an `unsafe` block, +we’re saying that we’ve read this function’s documentation and take +responsibility for upholding the function’s contracts. + +Here is an unsafe function named `dangerous` that doesn’t do anything in its body: ```rust @@ -193,22 +194,23 @@ error[E0133]: call to unsafe function requires unsafe function or block ``` By inserting the `unsafe` block around our call to `dangerous`, we’re asserting -to Rust that we’ve read the documentation for this function, we understand how -to use it properly, and we’ve verified that everything is correct. +to Rust that we’ve read the function’s documentation, we understand how to use +it properly, and we’ve verified that we’re fulfilling the contract of the +function. Bodies of unsafe functions are effectively `unsafe` blocks, so to perform other unsafe operations within an unsafe function, we don’t need to add another `unsafe` block. -#### Creating a Safe Abstraction Over Unsafe Code +#### Creating a Safe Abstraction over Unsafe Code -Just because a function contains unsafe code doesn’t mean the whole function -needs to be marked as unsafe. In fact, wrapping unsafe code in a safe function -is a common abstraction. As an example, let’s check out a function from the -standard library, `split_at_mut`, that requires some unsafe code and explore -how we might implement it. This safe method is defined on mutable slices: it -takes one slice and makes it into two by splitting the slice at the index given -as an argument. Using `split_at_mut` is demonstrated in Listing 19-4: +Just because a function contains unsafe code doesn’t mean we need to mark the +entire function as unsafe. In fact, wrapping unsafe code in a safe function is +a common abstraction. As an example, let’s study a function from the standard +library, `split_at_mut`, that requires some unsafe code and explore how we +might implement it. This safe method is defined on mutable slices: it takes one +slice and makes it two by splitting the slice at the index given as an +argument. Listing 19-4 shows how to use `split_at_mut`: ```rust let mut v = vec![1, 2, 3, 4, 5, 6]; @@ -224,10 +226,10 @@ assert_eq!(b, &mut [4, 5, 6]); Listing 19-4: Using the safe `split_at_mut` function -This function can’t be implemented using only safe Rust. An attempt might look -something like Listing 19-5, which will not compile. For simplicity, we’re -implementing `split_at_mut` as a function rather than a method, and only for -slices of `i32` values rather than for a generic type `T`. +We can’t implement this function using only safe Rust. An attempt might look +something like Listing 19-5, which won’t compile. For simplicity, we’ll +implement `split_at_mut` as a function rather than a method and only for slices +of `i32` values rather than for a generic type `T`. ```rust,ignore fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) { @@ -243,17 +245,17 @@ fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) { Listing 19-5: An attempted implementation of `split_at_mut` using only safe Rust -This function first gets the total length of the slice, then asserts that the -index given as a parameter is within the slice by checking that it’s less than -or equal to the length. The assertion means that if we pass an index that’s -greater than the index to split the slice at, the function will panic before it -attempts to use that index. +This function first gets the total length of the slice, then it asserts that +the index given as a parameter is within the slice by checking that it’s less +than or equal to the length. The assertion means that if we pass an index that +is greater than the index to split the slice at, the function will panic before +it attempts to use that index. Then we return two mutable slices in a tuple: one from the start of the -original slice to the `mid` index, and another from `mid` to the end of the +original slice to the `mid` index and another from `mid` to the end of the slice. -If we try to compile this, we’ll get an error: +When we try to compile the code in Listing 19-5, we’ll get an error: ```text error[E0499]: cannot borrow `*slice` as mutable more than once at a time @@ -269,9 +271,9 @@ error[E0499]: cannot borrow `*slice` as mutable more than once at a time Rust’s borrow checker can’t understand that we’re borrowing different parts of the slice; it only knows that we’re borrowing from the same slice twice. -Borrowing different parts of a slice is fundamentally okay because our two +Borrowing different parts of a slice is fundamentally okay because the two slices aren’t overlapping, but Rust isn’t smart enough to know this. When we -know something is okay, but Rust doesn’t, it’s time to reach for unsafe code. +know code is okay, but Rust doesn’t, it’s time to reach for unsafe code. Listing 19-6 shows how to use an `unsafe` block, a raw pointer, and some calls to unsafe functions to make the implementation of `split_at_mut` work: @@ -297,14 +299,14 @@ the `split_at_mut` function Recall from the “Slices” section in Chapter 4 that slices are a pointer to some data and the length of the slice. We use the `len` method to get the length of -a slice, and the `as_mut_ptr` method to access the raw pointer of a slice. In +a slice and the `as_mut_ptr` method to access the raw pointer of a slice. In this case, because we have a mutable slice to `i32` values, `as_mut_ptr` returns a raw pointer with the type `*mut i32`, which we’ve stored in the variable `ptr`. We keep the assertion that the `mid` index is within the slice. Then we get to the unsafe code: the `slice::from_raw_parts_mut` function takes a raw pointer -and a length and creates a slice. We use this function to create a slice that +and a length, and creates a slice. We use this function to create a slice that starts from `ptr` and is `mid` items long. Then we call the `offset` method on `ptr` with `mid` as an argument to get a raw pointer that starts at `mid`, and we create a slice using that pointer and the remaining number of items after @@ -313,17 +315,17 @@ we create a slice using that pointer and the remaining number of items after The function `slice::from_raw_parts_mut` is unsafe because it takes a raw pointer and must trust that this pointer is valid. The `offset` method on raw pointers is also unsafe, because it must trust that the offset location is also -a valid pointer. We therefore had to put an `unsafe` block around our calls to -`slice::from_raw_parts_mut` and `offset` to be allowed to call them. We can -tell, by looking at the code and by adding the assertion that `mid` must be -less than or equal to `len`, that all the raw pointers used within the `unsafe` -block will be valid pointers to data within the slice. This is an acceptable -and appropriate use of `unsafe`. +a valid pointer. Therefore, we had to put an `unsafe` block around our calls to +`slice::from_raw_parts_mut` and `offset` so we could call them. By looking at +the code and by adding the assertion that `mid` must be less than or equal to +`len`, we can tell that all the raw pointers used within the `unsafe` block +will be valid pointers to data within the slice. This is an acceptable and +appropriate use of `unsafe`. Note that we don’t need to mark the resulting `split_at_mut` function as `unsafe`, and we can call this function from safe Rust. We’ve created a safe abstraction to the unsafe code with an implementation of the function that uses -`unsafe` code in a safe way because it creates only valid pointers from the +`unsafe` code in a safe way, because it creates only valid pointers from the data this function has access to. In contrast, the use of `slice::from_raw_parts_mut` in Listing 19-7 would @@ -344,23 +346,23 @@ let slice = unsafe { Listing 19-7: Creating a slice from an arbitrary memory location -We don’t own the memory at this arbitrary location, and there’s no guarantee +We don’t own the memory at this arbitrary location, and there is no guarantee that the slice this code creates contains valid `i32` values. Attempting to use -`slice` as if it was a valid slice would result in undefined behavior. +`slice` as though it’s a valid slice results in undefined behavior. #### Using `extern` Functions to Call External Code -Sometimes, your Rust code may need to interact with code written in another +Sometimes, your Rust code might need to interact with code written in another language. For this, Rust has a keyword, `extern`, that facilitates the creation -and use of a *Foreign Function Interface* (FFI). A Foreign Function Interface -is a way for a programming language to define functions and enable a different -(foreign) programming language to call those functions. +and use of a *Foreign Function Interface (FFI)*. An FFI is a way for a +programming language to define functions and enable a different (foreign) +programming language to call those functions. Listing 19-8 demonstrates how to set up an integration with the `abs` function from the C standard library. Functions declared within `extern` blocks are -always unsafe to call from Rust code, because other languages don`t enforce -Rust's rules and guarantees and Rust can't check them, so responsibility falls -on the programmer to ensure safety: +always unsafe to call from Rust code. The reason is that other languages don`t +enforce Rust’s rules and guarantees, and Rust can’t check them, so +responsibility falls on the programmer to ensure safety. Filename: src/main.rs @@ -380,26 +382,26 @@ fn main() { defined in another language Within the `extern "C"` block, we list the names and signatures of external -functions from another language we want to be able to call. The `"C"` part -defines which *application binary interface* (ABI) the external function -uses---the ABI defines how to call the function at the assembly level. The -`"C"` ABI is the most common, and follows the C programming language’s ABI. +functions from another language we want to call. The `"C"` part defines which +*application binary interface (ABI)* the external function uses: the ABI +defines how to call the function at the assembly level. The `"C"` ABI is the +most common and follows the C programming language’s ABI. -##### Calling Rust Functions from Other Languages +#### Calling Rust Functions from Other Languages -You can also use `extern` to create an interface that allows other languages to +We can also use `extern` to create an interface that allows other languages to call Rust functions. Instead of an `extern` block, we add the `extern` keyword and specify the ABI to use just before the `fn` keyword. We also need to add a `#[no_mangle]` annotation to tell the Rust compiler not to mangle the name of -this function. Mangling is when a compiler changes the name we’ve given a +this function. *Mangling* is when a compiler changes the name we’ve given a function to a different name that contains more information for other parts of the compilation process to consume but is less human readable. Every programming language compiler mangles names slightly differently, so for a Rust -function to be nameable from other languages, we have to disable the Rust -compiler’s name mangling. +function to be nameable by other languages, we must disable the Rust compiler’s +name mangling. -In this example we make the `call_from_c` function accessible from C code, once -it’s compiled to a shared library and linked from C: +In the following example, we make the `call_from_c` function accessible from C +code, after it’s compiled to a shared library and linked from C: ```rust #[no_mangle] @@ -412,13 +414,13 @@ This usage of `extern` does not require `unsafe`. ### Accessing or Modifying a Mutable Static Variable -We’ve managed to go this entire book without talking about *global variables*, -which Rust does support, but which can be problematic with Rust’s ownership -rules. If you have two threads accessing the same mutable global variable, it -can cause a data race. +Until now, we’ve not talked about *global variables*, which Rust does support +but can be problematic with Rust’s ownership rules. If two threads are +accessing the same mutable global variable, it can cause a data race. -Global variables are called *static* variables in Rust. Listing 19-9 shows an -example declaration and use of a static variable with a string slice as a value: +In Rust, global variables are called *static* variables. Listing 19-9 shows an +example declaration and use of a static variable with a string slice as a +value: Filename: src/main.rs @@ -433,22 +435,22 @@ fn main() { Listing 19-9: Defining and using an immutable static variable -`static` variables are similar to constants, which we discussed in the +Static variables are similar to constants, which we discussed in the “Differences Between Variables and Constants” section in Chapter 3. The names of static variables are in `SCREAMING_SNAKE_CASE` by convention, and we *must* -annotate the variable’s type, which is `&'static str` in this case. Static -variables may only store references with the `'static` lifetime, which means -the Rust compiler can figure out the lifetime by itself and we don’t need to -annotate it explicitly. Accessing an immutable static variable is safe. +annotate the variable’s type, which is `&'static str` in this example. Static +variables can only store references with the `'static` lifetime, which means +the Rust compiler can figure out the lifetime; we don’t need to annotate it +explicitly. Accessing an immutable static variable is safe. -Constants and immutable static variables may seem similar, but a subtle +Constants and immutable static variables might seem similar, but a subtle difference is that values in a static variable have a fixed address in memory. Using the value will always access the same data. Constants, on the other hand, -are allowed to duplicate their data whenever they are used. +are allowed to duplicate their data whenever they’re used. Another difference between constants and static variables is that static -variables can be mutable. Both accessing and modifying mutable static variables -is *unsafe*. Listing 19-10 shows how to declare, access, and modify a mutable +variables can be mutable. Accessing and modifying mutable static variables is +*unsafe*. Listing 19-10 shows how to declare, access, and modify a mutable static variable named `COUNTER`: Filename: src/main.rs @@ -474,13 +476,13 @@ fn main() { Listing 19-10: Reading from or writing to a mutable static variable is unsafe -Just like with regular variables, we specify mutability using the `mut` -keyword. Any code that reads or writes from `COUNTER` must be within an -`unsafe` block. This code compiles and prints `COUNTER: 3` as we would expect -because it’s single threaded. Having multiple threads access `COUNTER` would -likely result in data races. +As with regular variables, we specify mutability using the `mut` keyword. Any +code that reads or writes from `COUNTER` must be within an `unsafe` block. This +code compiles and prints `COUNTER: 3` as we would expect because it’s single +threaded. Having multiple threads access `COUNTER` would likely result in data +races. -With mutable data that’s globally accessible, it’s difficult to ensure there +With mutable data that is globally accessible, it’s difficult to ensure there are no data races, which is why Rust considers mutable static variables to be unsafe. Where possible, it’s preferable to use the concurrency techniques and thread-safe smart pointers we discussed in Chapter 16, so the compiler checks @@ -488,11 +490,11 @@ that data accessed from different threads is done safely. ### Implementing an Unsafe Trait -Finally, the last action that only works with `unsafe` is implementing an -unsafe trait. A trait is unsafe when at least one of its methods has some -invariant that the compiler can’t verify. We can declare that a trait is -`unsafe` by adding the `unsafe` keyword before `trait`, and then implementation -of the trait must be marked as `unsafe` too, as shown in Listing 19-11: +The final action that only works with `unsafe` is implementing an unsafe trait. +A trait is unsafe when at least one of its methods has some invariant that the +compiler can’t verify. We can declare that a trait is `unsafe` by adding the +`unsafe` keyword before `trait`; then implementation of the trait must be +marked as `unsafe` too, as shown in Listing 19-11: ```rust unsafe trait Foo { @@ -510,20 +512,20 @@ trait By using `unsafe impl`, we’re promising that we’ll uphold the invariants that the compiler can’t verify. -As an example, recall the `Sync` and `Send` marker traits from the “Extensible -Concurrency with the `Sync` and `Send` Traits” section of Chapter 16, and that -the compiler implements these automatically if our types are composed entirely -of `Send` and `Sync` types. If we implement a type that contains something -that’s not `Send` or `Sync`, such as raw pointers, and we want to mark that -type as `Send` or `Sync`, we must use `unsafe`. Rust can’t verify that our type -upholds the guarantees that it can be safely sent across threads or accessed -from multiple threads, so we need to do those checks ourselves and indicate as -such with `unsafe`. +As an example, recall the `Sync` and `Send` marker traits we discussed in the +“Extensible Concurrency with the `Sync` and `Send` Traits” section in Chapter +16: the compiler implements these traits automatically if our types are +composed entirely of `Send` and `Sync` types. If we implement a type that +contains a type that is not `Send` or `Sync`, such as raw pointers, and we want +to mark that type as `Send` or `Sync`, we must use `unsafe`. Rust can’t verify +that our type upholds the guarantees that it can be safely sent across threads +or accessed from multiple threads; therefore, we need to do those checks +manually and indicate as such with `unsafe`. ### When to Use Unsafe Code -Using `unsafe` to take one of these four actions isn’t wrong or even frowned -upon, but it is trickier to get `unsafe` code correct because the compiler isn’t -able to help uphold memory safety. When you have a reason to use `unsafe` code, -it is possible to do so, and having the explicit `unsafe` annotation makes it -easier to track down the source of problems if they occur. +Using `unsafe` to take one of the four actions (superpowers) just discussed +isn’t wrong or even frowned upon. But it is trickier to get `unsafe` code +correct because the compiler can’t help uphold memory safety. When you have a +reason to use `unsafe` code, you can do so, and having the explicit `unsafe` +annotation makes it easier to track down the source of problems if they occur. diff --git a/second-edition/src/ch19-02-advanced-lifetimes.md b/second-edition/src/ch19-02-advanced-lifetimes.md index 6eaf6276ed..97eec9e9fe 100644 --- a/second-edition/src/ch19-02-advanced-lifetimes.md +++ b/second-edition/src/ch19-02-advanced-lifetimes.md @@ -1,26 +1,25 @@ ## Advanced Lifetimes -Back in Chapter 10 in the “Validating References with Lifetimes” section, we +In Chapter 10 in the “Validating References with Lifetimes” section, you learned how to annotate references with lifetime parameters to tell Rust how -lifetimes of different references relate. We saw how every reference has a -lifetime but, most of the time, Rust will let you elide lifetimes. Here we’ll +lifetimes of different references relate. You saw how every reference has a +lifetime, but most of the time, Rust will let you elide lifetimes. Now we’ll look at three advanced features of lifetimes that we haven’t covered yet: -* Lifetime subtyping, a way to ensure that one lifetime outlives another - lifetime -* Lifetime bounds, to specify a lifetime for a reference to a generic type -* Trait object lifetimes, how they’re inferred, and when they need to be - specified +* Lifetime subtyping: Ensures that one lifetime outlives another lifetime +* Lifetime bounds: Specifies a lifetime for a reference to a generic type +* Inference of trait object lifetimes: How the compiler infers trait object + lifetimes and when they need to be specified ### Lifetime Subtyping Ensures One Lifetime Outlives Another -Lifetime subtyping is a way to specify that one lifetime should outlive another +*Lifetime subtyping* specifies that one lifetime should outlive another lifetime. To explore lifetime subtyping, imagine we want to write a parser. -We’ll have a structure called `Context` that holds a reference to the string +We’ll use a structure called `Context` that holds a reference to the string we’re parsing. We’ll write a parser that will parse this string and return -success or failure. The parser will need to borrow the context to do the -parsing. Implementing this would look like the code in Listing 19-12, except -this code doesn’t have the required lifetime annotations so it won’t compile: +success or failure. The parser will need to borrow the `Context` to do the +parsing. Listing 19-12 implements this parser code, except the code doesn’t +have the required lifetime annotations, so it won’t compile: Filename: src/lib.rs @@ -38,30 +37,28 @@ impl Parser { } ``` -Listing 19-12: Defining a parser without lifetime -annotations - -Compiling the code results in errors saying that Rust expected lifetime -parameters on the string slice in `Context` and the reference to a `Context` in -`Parser`. - -For simplicity’s sake, our `parse` function returns a `Result<(), &str>`. That -is, it will do nothing on success, and on failure will return the part of the -string slice that didn’t parse correctly. A real implementation would have more -error information than that, and would actually return something when parsing -succeeds, but we’ll leave those off because they aren’t relevant to the -lifetimes part of this example. - -To keep this code simple, we’re not going to actually write any parsing logic. -It’s very likely that somewhere in parsing logic we’d handle invalid input by -returning an error that references the part of the input that’s invalid, and -this reference is what makes the code example interesting with regards to -lifetimes. So we’re going to pretend that the logic of our parser is that the -input is invalid after the first byte. Note that this code may panic if the -first byte is not on a valid character boundary; again, we’re simplifying the -example in order to concentrate on the lifetimes involved. - -To get this code compiling, we need to fill in the lifetime parameters for the +Listing 19-12: Defining a parser without lifetime annotations + +Compiling the code results in errors because Rust expects lifetime parameters +on the string slice in `Context` and the reference to a `Context` in `Parser`. + +For simplicity’s sake, the `parse` function returns `Result<(), &str>`. That +is, the function will do nothing on success, and on failure will return the +part of the string slice that didn’t parse correctly. A real implementation +would provide more error information and would return a structured data type +when parsing succeeds. We won’t be discussing those details because they aren’t +relevant to the lifetimes part of this example. + +To keep this code simple, we won’t write any parsing logic. However, it’s very +likely that somewhere in the parsing logic we would handle invalid input by +returning an error that references the part of the input that is invalid; this +reference is what makes the code example interesting in regard to lifetimes. +Let’s pretend that the logic of our parser is that the input is invalid after +the first byte. Note that this code might panic if the first byte is not on a +valid character boundary; again, we’re simplifying the example to focus on the +lifetimes involved. + +To get this code to compile, we need to fill in the lifetime parameters for the string slice in `Context` and the reference to the `Context` in `Parser`. The most straightforward way to do this is to use the same lifetime everywhere, as shown in Listing 19-13: @@ -85,15 +82,15 @@ impl<'a> Parser<'a> { Listing 19-13: Annotating all references in `Context` and `Parser` with the same lifetime parameter -This compiles fine, and tells Rust that a `Parser` holds a reference to a -`Context` with lifetime `'a`, and that `Context` holds a string slice that also -lives as long as the reference to the `Context` in `Parser`. Rust’s compiler -error message said lifetime parameters were required for these references, and -we have now added lifetime parameters. +This code compiles just fine. It tells Rust that a `Parser` holds a reference +to a `Context` with lifetime `'a`, and that `Context` holds a string slice that +also lives as long as the reference to the `Context` in `Parser`. Rust’s +compiler error message stated that lifetime parameters were required for these +references, and we’ve now added lifetime parameters. -Next, in Listing 19-14, let’s add a function that takes an instance of +Next, in Listing 19-14, we’ll add a function that takes an instance of `Context`, uses a `Parser` to parse that context, and returns what `parse` -returns. This won’t quite work: +returns. This code doesn’t quite work: Filename: src/lib.rs @@ -106,8 +103,8 @@ fn parse_context(context: Context) -> Result<(), &str> { Listing 19-14: An attempt to add a `parse_context` function that takes a `Context` and uses a `Parser` -We get two quite verbose errors when we try to compile the code with the -addition of the `parse_context` function: +We get two verbose errors when we try to compile the code with the addition of +the `parse_context` function: ```text error[E0597]: borrowed value does not live long enough @@ -143,27 +140,25 @@ note: borrowed value must be valid for the anonymous lifetime #1 defined on the | |_^ ``` -These errors are saying that both the `Parser` instance that’s created and the -`context` parameter live only from when the `Parser` is created until the end -of the `parse_context` function, but they both need to live for the entire -lifetime of the function. +These errors state that the `Parser` instance that is created and the `context` +parameter live only until the end of the `parse_context` function. But they +both need to live for the entire lifetime of the function. In other words, `Parser` and `context` need to *outlive* the entire function -and be valid before the function starts as well as after it ends in order for -all the references in this code to always be valid. Both the `Parser` we’re -creating and the `context` parameter go out of scope at the end of the -function, though (because `parse_context` takes ownership of `context`). +and be valid before the function starts as well as after it ends for all the +references in this code to always be valid. The `Parser` we’re creating and the +`context` parameter go out of scope at the end of the function, because +`parse_context` takes ownership of `context`. -To figure out why we’re getting these errors, let’s look at the definitions in -Listing 19-13 again, specifically the references in the signature of the -`parse` method: +To figure out why these errors occur, let’s look at the definitions in Listing +19-13 again, specifically the references in the signature of the `parse` method: ```rust,ignore fn parse(&self) -> Result<(), &str> { ``` Remember the elision rules? If we annotate the lifetimes of the references -rather than eliding, the signature would be: +rather than eliding, the signature would be as follows: ```rust,ignore fn parse<'a>(&'a self) -> Result<(), &'a str> { @@ -186,29 +181,29 @@ temporary), and `context` will go out of scope at the end of the function Rust thinks we’re trying to return a reference to a value that goes out of scope at the end of the function, because we annotated all the lifetimes with -the same lifetime parameter. That told Rust the lifetime of the string slice -that `Context` holds is the same as that of the lifetime of the reference to -`Context` that `Parser` holds. +the same lifetime parameter. The annotations told Rust the lifetime of the +string slice that `Context` holds is the same as that of the lifetime of the +reference to `Context` that `Parser` holds. The `parse_context` function can’t see that within the `parse` function, the -string slice returned will outlive both `Context` and `Parser`, and that the +string slice returned will outlive `Context` and `Parser`, and that the reference `parse_context` returns refers to the string slice, not to `Context` or `Parser`. By knowing what the implementation of `parse` does, we know that the only reason the return value of `parse` is tied to the `Parser` is because it’s -referencing the `Parser`’s `Context`, which is referencing the string slice, so -it’s really the lifetime of the string slice that `parse_context` needs to care -about. We need a way to tell Rust that the string slice in `Context` and the -reference to the `Context` in `Parser` have different lifetimes and that the -return value of `parse_context` is tied to the lifetime of the string slice in -`Context`. - -First we’ll try giving `Parser` and `Context` different lifetime parameters as -shown in Listing 19-15. We’ll use `'s` and `'c` as lifetime parameter names to -be clear about which lifetime goes with the string slice in `Context` and which -goes with the reference to `Context` in `Parser`. Note that this won’t -completely fix the problem, but it’s a start and we’ll look at why this isn’t +referencing the `Parser`’s `Context`, which is referencing the string slice. +So, it’s really the lifetime of the string slice that `parse_context` needs to +care about. We need a way to tell Rust that the string slice in `Context` and +the reference to the `Context` in `Parser` have different lifetimes and that +the return value of `parse_context` is tied to the lifetime of the string slice +in `Context`. + +First, we’ll try giving `Parser` and `Context` different lifetime parameters, +as shown in Listing 19-15. We’ll use `'s` and `'c` as lifetime parameter names +to clarify which lifetime goes with the string slice in `Context` and which +goes with the reference to `Context` in `Parser`. Note that this solution won’t +completely fix the problem, but it’s a start. We’ll look at why this fix isn’t sufficient when we try to compile. Filename: src/lib.rs @@ -235,12 +230,13 @@ fn parse_context(context: Context) -> Result<(), &str> { for the references to the string slice and to `Context` We’ve annotated the lifetimes of the references in all the same places that we -annotated them in Listing 19-13, but used different parameters depending on -whether the reference goes with the string slice or with `Context`. We’ve also -added an annotation to the string slice part of the return value of `parse` to -indicate that it goes with the lifetime of the string slice in `Context`. +annotated them in Listing 19-13. But this time we used different parameters +depending on whether the reference goes with the string slice or with +`Context`. We’ve also added an annotation to the string slice part of the +return value of `parse` to indicate that it goes with the lifetime of the +string slice in `Context`. -The following is the error we get now when we try to compile: +When we try to compile now, we get the following error: ```text error[E0491]: in type `&'c Context<'s>`, reference has a longer lifetime than the data it references @@ -265,23 +261,20 @@ note: but the referenced data is only valid for the lifetime 's as defined on th | |_^ ``` -Rust doesn’t know of any relationship between `'c` and `'s`. In order to be -valid, the referenced data in `Context` with lifetime `'s` needs to be -constrained, to guarantee that it lives longer than the reference with lifetime -`'c`. If `'s` is not longer than `'c`, the reference to `Context` might not be -valid. +Rust doesn’t know of any relationship between `'c` and `'s`. To be valid, the +referenced data in `Context` with lifetime `'s` needs to be constrained to +guarantee that it lives longer than the reference with lifetime `'c`. If `'s` +is not longer than `'c`, the reference to `Context` might not be valid. -Which gets us to the point of this section: the Rust feature *lifetime -subtyping* is a way to specify that one lifetime parameter lives at least as -long as another one. In the angle brackets where we declare lifetime -parameters, we can declare a lifetime `'a` as usual, and declare a lifetime -`'b` that lives at least as long as `'a` by declaring `'b` with the syntax `'b: -'a`. +Now we get to the point of this section: the Rust feature *lifetime* +*subtyping* specifies that one lifetime parameter lives at least as long as +another one. In the angle brackets where we declare lifetime parameters, we can +declare a lifetime `'a` as usual and declare a lifetime `'b` that lives at +least as long as `'a` by declaring `'b` using the syntax `'b: 'a`. -In our definition of `Parser`, in order to say that `'s` (the lifetime of the -string slice) is guaranteed to live at least as long as `'c` (the lifetime of -the reference to `Context`), we change the lifetime declarations to look like -this: +In our definition of `Parser`, to say that `'s` (the lifetime of the string +slice) is guaranteed to live at least as long as `'c` (the lifetime of the +reference to `Context`), we change the lifetime declarations to look like this: Filename: src/lib.rs @@ -293,25 +286,25 @@ struct Parser<'c, 's: 'c> { } ``` -Now, the reference to `Context` in the `Parser` and the reference to the string -slice in the `Context` have different lifetimes, and we’ve ensured that the +Now the reference to `Context` in the `Parser` and the reference to the string +slice in the `Context` have different lifetimes; we’ve ensured that the lifetime of the string slice is longer than the reference to the `Context`. That was a very long-winded example, but as we mentioned at the start of this -chapter, these features are pretty niche. You won’t often need this syntax, but -it can come up in situations like this one, where you need to refer to -something you have a reference to. +chapter, Rust’s advanced features are very specific. You won’t often need the +syntax we described in this example, but in such situations, you’ll know how to +refer to something you have a reference to. ### Lifetime Bounds on References to Generic Types -In the “Trait Bounds” section of Chapter 10, we discussed using trait bounds on +In the “Trait Bounds” section in Chapter 10, we discussed using trait bounds on generic types. We can also add lifetime parameters as constraints on generic -types, and these are called *lifetime bounds*. Lifetime bounds help Rust verify +types; these are called *lifetime bounds*. Lifetime bounds help Rust verify that references in generic types won’t outlive the data they’re referencing. -For an example, consider a type that is a wrapper over references. Recall the +As an example, consider a type that is a wrapper over references. Recall the `RefCell` type from the “`RefCell` and the Interior Mutability Pattern” -section of Chapter 15: its `borrow` and `borrow_mut` methods return the types +section in Chapter 15: its `borrow` and `borrow_mut` methods return the types `Ref` and `RefMut`, respectively. These types are wrappers over references that keep track of the borrowing rules at runtime. The definition of the `Ref` struct is shown in Listing 19-16, without lifetime bounds for now: @@ -323,7 +316,7 @@ struct Ref<'a, T>(&'a T); ``` Listing 19-16: Defining a struct to wrap a reference to a -generic type; without lifetime bounds to start +generic type, without lifetime bounds to start Without explicitly constraining the lifetime `'a` in relation to the generic parameter `T`, Rust will error because it doesn’t know how long the generic @@ -344,11 +337,11 @@ note: ...so that the reference type `&'a T` does not outlive the data it points | ^^^^^^ ``` -Because `T` can be any type, `T` could itself be a reference or a type that -holds one or more references, each of which could have their own lifetimes. -Rust can’t be sure `T` will live as long as `'a`. +Because `T` can be any type, `T` could be a reference or a type that holds one +or more references, each of which could have their own lifetimes. Rust can’t be +sure `T` will live as long as `'a`. -Fortunately, that error gave us helpful advice on how to specify the lifetime +Fortunately, the error provides helpful advice on how to specify the lifetime bound in this case: ```text @@ -357,7 +350,7 @@ consider adding an explicit lifetime bound `T: 'a` so that the reference type ``` Listing 19-17 shows how to apply this advice by specifying the lifetime bound -when we declare the generic type `T`. +when we declare the generic type `T`: ```rust struct Ref<'a, T: 'a>(&'a T); @@ -370,7 +363,7 @@ This code now compiles because the `T: 'a` syntax specifies that `T` can be any type, but if it contains any references, the references must live at least as long as `'a`. -We could solve this in a different way, shown in the definition of a +We could solve this problem in a different way, as shown in the definition of a `StaticRef` struct in Listing 19-18, by adding the `'static` lifetime bound on `T`. This means if `T` contains any references, they must have the `'static` lifetime: @@ -386,11 +379,10 @@ references Because `'static` means the reference must live as long as the entire program, a type that contains no references meets the criteria of all references living as long as the entire program (because there are no references). For the borrow -checker concerned about references living long enough, there’s no real +checker concerned about references living long enough, there is no real distinction between a type that has no references and a type that has -references that live forever; both of them are the same for the purpose of -determining whether or not a reference has a shorter lifetime than what it -refers to. +references that live forever: both are the same for determining whether or not +a reference has a shorter lifetime than what it refers to. ### Inference of Trait Object Lifetimes @@ -398,10 +390,10 @@ In Chapter 17 in the “Using Trait Objects that Allow for Values of Different Types” section, we discussed trait objects, consisting of a trait behind a reference, that allow us to use dynamic dispatch. We haven’t yet discussed what happens if the type implementing the trait in the trait object has a lifetime -of its own. Consider Listing 19-19, where we have a trait `Red` and a struct -`Ball`. `Ball` holds a reference (and thus has a lifetime parameter) and also -implements trait `Red`. We want to use an instance of `Ball` as the trait -object `Box`: +of its own. Consider Listing 19-19 where we have a trait `Red` and a struct +`Ball`. The `Ball` struct holds a reference (and thus has a lifetime parameter) +and also implements trait `Red`. We want to use an instance of `Ball` as the +trait object `Box`: Filename: src/main.rs @@ -424,20 +416,20 @@ fn main() { Listing 19-19: Using a type that has a lifetime parameter with a trait object -This code compiles without any errors, even though we haven’t said anything -explicit about the lifetimes involved in `obj`. This works because there are -rules having to do with lifetimes and trait objects: +This code compiles without any errors, even though we haven’t explicitly +annotated the lifetimes involved in `obj`. This code works because there are +rules for working with lifetimes and trait objects: * The default lifetime of a trait object is `'static`. * With `&'a Trait` or `&'a mut Trait`, the default lifetime is `'a`. * With a single `T: 'a` clause, the default lifetime is `'a`. -* With multiple `T: 'a`-like clauses, there is no default; we must - be explicit. +* With multiple `T: 'a`-like clauses, there is no default; we must be explicit. When we must be explicit, we can add a lifetime bound on a trait object like -`Box` with the syntax `Box` or `Box`, depending -on what’s needed. Just as with the other bounds, this means that any -implementor of the `Red` trait that has references inside must have the -same lifetime specified in the trait object bounds as those references. +`Box` using the syntax `Box` or `Box`, depending +on whether the reference lives for the entire program or not. As with the other +bounds, the syntax adding a lifetime bound means that any implementor of the +`Red` trait that has references inside the type must have the same lifetime +specified in the trait object bounds as those references. -Next, let’s take a look at some other advanced features dealing with traits! +Next, let’s look at some other advanced features that manage traits. diff --git a/second-edition/src/ch19-03-advanced-traits.md b/second-edition/src/ch19-03-advanced-traits.md index b353f1e4b0..3d4cce80a9 100644 --- a/second-edition/src/ch19-03-advanced-traits.md +++ b/second-edition/src/ch19-03-advanced-traits.md @@ -1,27 +1,29 @@ ## Advanced Traits We first covered traits in the “Traits: Defining Shared Behavior” section of -Chapter 10 but, like lifetimes, we didn’t get to some of the more advanced -details. Now that we know more Rust, we can get into the nitty-gritty. +Chapter 10, but as with lifetimes, we didn’t discuss the more advanced details. +Now that you know more about Rust, we can get into the nitty-gritty. ### Associated Types Specify Placeholder Types in Trait Definitions -*Associated types* are a way of associating a type placeholder with a trait -such that the trait method definitions can use these placeholder types in their -signatures. The implementor of a trait will specify the concrete type to be -used in this type’s place for the particular implementation. That way, we can -define a trait that uses some types without needing to know exactly what those -types are until the trait is implemented. - -We’ve described most of the things in this chapter as being needed very rarely. -Associated types are somewhere in the middle; they’re used more rarely than the -rest of the book, but more commonly than many of the things in this chapter. - -One example of a trait with an associated type is the `Iterator` trait provided -by the standard library. This has an associated type named `Item` that stands -in for the type of the values it’s iterating over. In “The `Iterator` Trait and -the `next` Method” section of Chapter 13, we mentioned that the definition of -the `Iterator` trait is as shown in Listing 19-20: +*Associated types* connect a type placeholder with a trait such that the trait +method definitions can use these placeholder types in their signatures. The +implementor of a trait will specify the concrete type to be used in this type’s +place for the particular implementation. That way, we can define a trait that +uses some types without needing to know exactly what those types are until the +trait is implemented. + +We’ve described most of the advanced features in this chapter as being rarely +needed. Associated types are somewhere in the middle: they’re used more rarely +than features explained in the rest of the book, but more commonly than many of +the other features discussed in this chapter. + +One example of a trait with an associated type is the `Iterator` trait that the +standard library provides. This trait has an associated type named `Item` that +stands in for the type of the values the type implementing the `Iterator` trait +is iterating over. In “The `Iterator` Trait and the `next` Method” section of +Chapter 13, we mentioned that the definition of the `Iterator` trait is as +shown in Listing 19-20: ```rust pub trait Iterator { @@ -33,20 +35,20 @@ pub trait Iterator { Listing 19-20: The definition of the `Iterator` trait that has an associated type `Item` -The `Iterator` trait has an associated type named `Item`. This is a placeholder -type, and the `next` method will return values of type `Option`. -Implementors of this trait will specify the concrete type for `Item`, and the -`next` method will return an `Option` containing a value of that concrete type. +The type `Item` is a placeholder type, and the `next` method’s definition shows +that it will return values of type `Option`. Implementors of the +`Iterator` trait will specify the concrete type for `Item`, and the `next` +method will return an `Option` containing a value of that concrete type. -#### Associated Types Versus Generics +#### Associated Types vs. Generics -This may seem like a similar concept to generics, in that it allows us to -define a function without specifying what types it can deal with. So why use -associated types? +Associated types might seem like a similar concept to generics, in that they +allow us to define a function without specifying what types it can handle. So +why use associated types? -Let’s examine the difference with an example that implements the `Iterator` -trait on the `Counter` struct from Chapter 13. In Listing 13-21, we specified -that the `Item` type was `u32`: +Let’s examine the difference between the two concepts with an example from +Chapter 13 that implements the `Iterator` trait on the `Counter` struct. In +Listing 13-21, we specified that the `Item` type was `u32`: Filename: src/lib.rs @@ -58,8 +60,8 @@ impl Iterator for Counter { // --snip-- ``` -This feels similar to generics. So why not just define the `Iterator` trait -with generics as shown in Listing 19-21? +This syntax seems comparable to generics. So why not just define the `Iterator` +trait with generics, as shown in Listing 19-21? ```rust pub trait Iterator { @@ -70,37 +72,38 @@ pub trait Iterator { Listing 19-21: A hypothetical definition of the `Iterator` trait using generics -The difference lies in the fact that when using generics like in Listing 19-21, -we have to annotate the types in each implementation. This is because we can -also implement `Iterator for Counter`, or any other type, which would -give us multiple implementations of `Iterator` for `Counter`. In other words, -when a trait has a generic parameter, it can be implemented for a type multiple -times, changing the concrete types of the generic type parameters each time. -When we use the `next` method on `Counter`, we’d then have to provide type -annotations to indicate which implementation of `Iterator` we wanted to use. +The difference is that when using generics, as in Listing 19-21, we must +annotate the types in each implementation. The reason is that we can also +implement `Iterator for Counter` or any other type, which would give us +multiple implementations of `Iterator` for `Counter`. In other words, when a +trait has a generic parameter, it can be implemented for a type multiple times, +changing the concrete types of the generic type parameters each time. When we +use the `next` method on `Counter`, we would have to provide type annotations +to indicate which implementation of `Iterator` we want to use. With associated types, we don’t need to annotate types because we can’t -implement a trait on a type multiple times. With Listing 19-20, we can only -choose once what the type of `Item` will be, because there can only be one `impl -Iterator for Counter`. We don’t have to specify that we want an iterator of -`u32` values everywhere that we call `next` on `Counter`. +implement a trait on a type multiple times. In Listing 19-20 with the +definition that uses associated types, we can only choose what the type of +`Item` will be once, because there can only be one `impl Iterator for Counter`. +We don’t have to specify that we want an iterator of `u32` values everywhere +that we call `next` on `Counter`. ### Default Generic Type Parameters and Operator Overloading When we use generic type parameters, we can specify a default concrete type for the generic type. This eliminates the need for implementors of the trait to specify a concrete type if the default type works. The syntax for specifying a -default type for a generic type is to put `` when +default type for a generic type is `` when declaring the generic type. -A great example of a situation where this is useful is with operator -overloading. Operator overloading is customizing the behavior of an operator -(like `+`) in particular situations. +A great example of a situation where this technique is useful is with operator +overloading. *Operator overloading* is customizing the behavior of an operator +(such as `+`) in particular situations. -Rust does not allow you to create your own operators or overload arbitrary -operators, but you *can* overload the operations and corresponding traits -listed in `std::ops` by implementing the traits associated with the operator. -For example, in Listing 19-22 we overload the `+` operator to add two `Point` +Rust doesn’t allow you to create your own operators or overload arbitrary +operators. But you can overload the operations and corresponding traits listed +in `std::ops` by implementing the traits associated with the operator. For +example, in Listing 19-22 we overload the `+` operator to add two `Point` instances together. We do this by implementing the `Add` trait on a `Point` struct: @@ -135,12 +138,13 @@ fn main() { Listing 19-22: Implementing the `Add` trait to overload the `+` operator for `Point` instances -The `add` method adds the `x` values of two `Point` instances together and the -`y` values of two `Point` instances together to create a new `Point`. The `Add` -trait has an associated type named `Output` that determines the type returned -from the `add` method. +The `add` method adds the `x` values of two `Point` instances and the `y` +values of two `Point` instances to create a new `Point`. The `Add` trait has an +associated type named `Output` that determines the type returned from the `add` +method. -The default generic type here is within the `Add` trait. Here’s its definition: +The default generic type in this code is within the `Add` trait. Here is its +definition: ```rust trait Add { @@ -150,24 +154,23 @@ trait Add { } ``` -This should look generally familiar, as a trait with one method and an -associated type. The new part here is the `RHS=Self` in the angle brackets: -this syntax is called *default type parameters*. The `RHS` generic type -parameter---short for “right hand side”---that’s used to define the type of the -`rhs` parameter in the `add` method. If we don’t specify a concrete type for -`RHS` when we implement the `Add` trait, the type of `RHS` will default to -`Self`, which will be the type we’re implementing `Add` on. +This code should look generally familiar: a trait with one method and an +associated type. The new part is `RHS=Self` in the angle brackets: this syntax +is called *default type parameters*. The `RHS` generic type parameter (short +for “right hand side”) defines the type of the `rhs` parameter in the `add` +method. If we don’t specify a concrete type for `RHS` when we implement the +`Add` trait, the type of `RHS` will default to `Self`, which will be the type +we’re implementing `Add` on. -When we implemented `Add` for `Point`, we made use of the default for `RHS` -because we wanted to add two `Point` instances together. Let’s look at an -example of implementing the `Add` trait where we want to customize the `RHS` -type rather than using the default. +When we implemented `Add` for `Point`, we used the default for `RHS` because we +wanted to add two `Point` instances. Let’s look at an example of implementing +the `Add` trait where we want to customize the `RHS` type rather than using the +default. We have two structs holding values in different units, `Millimeters` and -`Meters`. We want to be able to add values in millimeters to values in meters, -and have the implementation of `Add` do the conversion correctly. We can -implement `Add` for `Millimeters` with `Meters` as the right hand side as shown -in Listing 19-23: +`Meters`. We want to add values in millimeters to values in meters and have the +implementation of `Add` do the conversion correctly. We can implement `Add` for +`Millimeters` with `Meters` as the `RHS`, as shown in Listing 19-23: Filename: src/lib.rs @@ -187,40 +190,40 @@ impl Add for Millimeters { ``` Listing 19-23: Implementing the `Add` trait on -`Millimeters` to be able to add `Millimeters` to `Meters` +`Millimeters` to add `Millimeters` to `Meters` -To be able to add `Millimeters` and `Meters`, we specify `impl Add` to -set the value of the `RHS` type parameter instead of using the default of -`Self`. +To add `Millimeters` and `Meters`, we specify `impl Add` to set the +value of the `RHS` type parameter instead of using the default of `Self`. -Default type parameters are used in two main ways: +We use default type parameters in two main ways: -1. To extend a type without breaking existing code. -2. To allow customization in specific cases most users won’t need. +* To extend a type without breaking existing code +* To allow customization in specific cases most users won’t need -The standard library’s `Add` trait is an example of the second purpose: most of -the time, you’re adding two like types together, but it gives the ability for -customizing beyond that. Using a default type parameter in the `Add` trait +The standard library’s `Add` trait is an example of the second purpose: +usually, you’ll add two like types, but the `Add` trait provides the ability +for customizing beyond that. Using a default type parameter in the `Add` trait definition means you don’t have to specify the extra parameter most of the -time. In other words, a little bit of implementation boilerplate isn’t needed, -making it easier to use the trait. +time. In other words, a bit of implementation boilerplate isn’t needed, making +it easier to use the trait. -The first purpose is similar, but in reverse: if we want to add a type -parameter to an existing trait, we can give it a default to let us extend the -functionality of the trait without breaking the existing implementation code. +The first purpose is similar to the second but in reverse: if we want to add a +type parameter to an existing trait, we can give it a default to let us extend +the functionality of the trait without breaking the existing implementation +code. ### Fully Qualified Syntax for Disambiguation: Calling Methods with the Same Name Nothing in Rust prevents a trait from having a method with the same name as -another trait’s method, nor can it prevent us from implementing both of these -traits on one type. It’s also possible to have a method implemented directly on -the type with the same name as methods from traits as well! +another trait’s method, nor does Rust prevent us from implementing both traits +on one type. It’s also possible to implement a method directly on the type with +the same name as methods from traits. -When calling methods with the same name, then, we need to tell Rust which one -we want to use. Consider the code in Listing 19-24 where we’ve defined two -traits, `Pilot` and `Wizard`, that both have a method called `fly`. We then -implement both traits on a type `Human` that itself already has a method named -`fly` implemented on it. Each `fly` method does something different: +When calling methods with the same name, we need to tell Rust which one we want +to use. Consider the code in Listing 19-24 where we’ve defined two traits, +`Pilot` and `Wizard`, that both have a method called `fly`. We then implement +both traits on a type `Human` that already has a method named `fly` implemented +on it. Each `fly` method does something different: Filename: src/main.rs @@ -254,7 +257,7 @@ impl Human { } ``` -Listing 19-24: Two traits defined to have a `fly` method, +Listing 19-24: Two traits defined to have a `fly` method and implementations of those traits on the `Human` type in addition to a `fly` method on `Human` directly @@ -301,12 +304,12 @@ fn main() { Listing 19-25: Calling `fly` on an instance of `Human` -Running this will print out `*waving arms furiously*`, which shows that Rust +Running this code will print `*waving arms furiously*`, which shows that Rust called the `fly` method implemented on `Human` directly. -In order to call the `fly` methods from either the `Pilot` trait or the -`Wizard` trait, we need to use more explicit syntax in order to specify which -`fly` method we mean. This syntax is demonstrated in Listing 19-26: +To call the `fly` methods from either the `Pilot` trait or the `Wizard` trait, +we need to use more explicit syntax to specify which `fly` method we mean. +Listing 19-26 demonstrates this syntax: Filename: src/main.rs @@ -351,11 +354,11 @@ fn main() { want to call Specifying the trait name before the method name clarifies to Rust which -implementation of `fly` we want to call. We could also choose to write -`Human::fly(&person)`, which is equivalent to `person.fly()` that we had in -Listing 19-26, but is a bit longer to write if we don’t need to disambiguate. +implementation of `fly` we want to call. We could also write +`Human::fly(&person)`, which is equivalent to `person.fly()` that we used in +Listing 19-26 but is a bit longer to write if we don’t need to disambiguate. -Running this code will print: +Running this code prints the following: ```text This is your captain speaking. @@ -370,9 +373,9 @@ to use based on the type of `self`. However, associated functions that are part of traits don’t have a `self` parameter. When two types in the same scope implement that trait, Rust can’t figure out which type we mean unless we use *fully qualified syntax*. For -example, take the `Animal` trait in Listing 19-27 that has the associated -function `baby_name`, the implementation of `Animal` for the struct `Dog`, and -the associated function `baby_name` defined on `Dog` directly: +example, the `Animal` trait in Listing 19-27 has the associated function +`baby_name`, the implementation of `Animal` for the struct `Dog`, and the +associated function `baby_name` defined on `Dog` directly: Filename: src/main.rs @@ -404,25 +407,25 @@ fn main() { type that has an associated function with the same name that also implements the trait -This code is for an animal shelter where they want to give all puppies the name -Spot, which is implemented in the `baby_name` associated function that is -defined on `Dog`. The `Dog` type also implements the trait `Animal`, which -describes characteristics that all animals have. Baby dogs are called puppies, -and that is expressed in the implementation of the `Animal` trait on `Dog` in -the `baby_name` function associated with the `Animal` trait. +This code is for an animal shelter that wants to name all puppies Spot, which +is implemented in the `baby_name` associated function that is defined on `Dog`. +The `Dog` type also implements the trait `Animal`, which describes +characteristics that all animals have. Baby dogs are called puppies, and that +is expressed in the implementation of the `Animal` trait on `Dog` in the +`baby_name` function associated with the `Animal` trait. -In `main`, we’re calling the `Dog::baby_name` function, which calls the -associated function defined on `Dog` directly. This code prints: +In `main`, we call the `Dog::baby_name` function, which calls the associated +function defined on `Dog` directly. This code prints the following: ```text A baby dog is called a Spot ``` -This isn’t what we wanted. We want to call the `baby_name` function that’s part -of the `Animal` trait that we implemented on `Dog` so that we print `A baby dog -is called a puppy`. The technique we used in Listing 19-26 doesn’t help here; -if we change `main` to be the code in Listing 19-28, we’ll get a compilation -error: +This output isn’t what we wanted. We want to call the `baby_name` function that +is part of the `Animal` trait that we implemented on `Dog` so the code prints +`A baby dog is called a puppy`. The technique of specifying the trait name that +we used in Listing 19-26 doesn’t help here; if we change `main` to the code in +Listing 19-28, we’ll get a compilation error: Filename: src/main.rs @@ -437,7 +440,7 @@ function from the `Animal` trait, but Rust doesn’t know which implementation t use Because `Animal::baby_name` is an associated function rather than a method, and -thus doesn’t have a `self` parameter, Rust has no way to figure out which +thus doesn’t have a `self` parameter, Rust can’t figure out which implementation of `Animal::baby_name` we want. We’ll get this compiler error: ```text @@ -485,39 +488,39 @@ fn main() { that we want to call the `baby_name` function from the `Animal` trait as implemented on `Dog` -We’re providing Rust with a type annotation within the angle brackets, and -we’re specifying that we want to call the `baby_name` method from the `Animal` -trait as implemented on `Dog` by saying that we want to treat the `Dog` type as -an `Animal` for this function call. This code will now print what we want: +We’re providing Rust with a type annotation within the angle brackets, which +indicates we want to call the `baby_name` method from the `Animal` trait as +implemented on `Dog` by saying that we want to treat the `Dog` type as an +`Animal` for this function call. This code will now print what we want: ```text A baby dog is called a puppy ``` -In general, fully qualified syntax is defined as: +In general, fully qualified syntax is defined as follows: ```rust,ignore ::function(receiver_if_method, next_arg, ...); ``` -For associated functions, there would not be a `receiver`, there would only be -the list of other arguments. We could choose to use fully qualified syntax -everywhere that we call functions or methods. However, we’re allowed to leave -out any part of this syntax that Rust is able to figure out from other -information in the program. We only need to use this more verbose syntax in -cases where there are multiple implementations that use the same name and Rust -needs help in order to know which implementation we want to call. +For associated functions, there would not be a `receiver`: there would only be +the list of other arguments. We could use fully qualified syntax everywhere +that we call functions or methods. However, we’re allowed to omit any part of +this syntax that Rust can figure out from other information in the program. We +only need to use this more verbose syntax in cases where there are multiple +implementations that use the same name and Rust needs help to identify which +implementation we want to call. ### Using Supertraits to Require One Trait’s Functionality Within Another Trait -Sometimes, we may need one trait to use another trait’s functionality. In this -case, we need to be able to rely on the dependent trait also being implemented. -The trait we’re relying on is a *supertrait* of the trait we’re implementing. +Sometimes, we might need one trait to use another trait’s functionality. In +this case, we need to rely on the dependent trait also being implemented. The +trait we’re relying on is a *supertrait* of the trait we’re implementing. For example, let’s say we want to make an `OutlinePrint` trait with an -`outline_print` method that will print out a value framed in asterisks. That -is, given a `Point` struct that implements `Display` to result in `(x, y)`, -when we call `outline_print` on a `Point` instance that has 1 for `x` and 3 for +`outline_print` method that will print a value framed in asterisks. That is, +given a `Point` struct that implements `Display` to result in `(x, y)`, when we +call `outline_print` on a `Point` instance that has `1` for `x` and `3` for `y`, it should print the following: ```text @@ -529,11 +532,11 @@ when we call `outline_print` on a `Point` instance that has 1 for `x` and 3 for ``` In the implementation of `outline_print`, we want to use the `Display` trait’s -functionality. We therefore need to specify that the `OutlinePrint` trait will -only work for types that also implement `Display` and therefore provide the -functionality that `OutlinePrint` needs. We can do that in the trait definition -by specifying `OutlinePrint: Display`. This is similar to adding a trait bound -to the trait. Listing 19-30 shows an implementation of the `OutlinePrint` trait: +functionality. Therefore, we need to specify that the `OutlinePrint` trait will +only work for types that also implement `Display` and provide the functionality +that `OutlinePrint` needs. We can do that in the trait definition by specifying +`OutlinePrint: Display`. This technique is similar to adding a trait bound to +the trait. Listing 19-30 shows an implementation of the `OutlinePrint` trait: Filename: src/main.rs @@ -557,12 +560,12 @@ trait OutlinePrint: fmt::Display { requires the functionality from `Display` Because we’ve specified that `OutlinePrint` requires the `Display` trait, we -can use the `to_string` function that’s automatically implemented for any type +can use the `to_string` function that is automatically implemented for any type that implements `Display`. If we tried to use `to_string` without adding`: -Display` after the trait name we’d get an error saying that no method named +Display` after the trait name, we’d get an error saying that no method named `to_string` was found for the type `&Self` in the current scope. -Let’s see what happens if we try to implement `OutlinePrint` on a type that +Let’s see what happens when we try to implement `OutlinePrint` on a type that doesn’t implement `Display`, such as the `Point` struct: Filename: src/main.rs @@ -577,7 +580,7 @@ struct Point { impl OutlinePrint for Point {} ``` -We’ll get an error saying that `Display` is required but not implemented: +We get an error saying that `Display` is required but not implemented: ```text error[E0277]: the trait bound `Point: std::fmt::Display` is not satisfied @@ -590,7 +593,7 @@ error[E0277]: the trait bound `Point: std::fmt::Display` is not satisfied = help: the trait `std::fmt::Display` is not implemented for `Point` ``` -Once we implement `Display` on `Point` and satisfy the constraint that +To fix this, we implement `Display` on `Point` and satisfy the constraint that `OutlinePrint` requires, like so: Filename: src/main.rs @@ -610,29 +613,29 @@ impl fmt::Display for Point { } ``` -Then, implementing the `OutlinePrint` trait on `Point` will compile -successfully and we can call `outline_print` on a `Point` instance to display +Then implementing the `OutlinePrint` trait on `Point` will compile +successfully, and we can call `outline_print` on a `Point` instance to display it within an outline of asterisks. ### The Newtype Pattern to Implement External Traits on External Types In Chapter 10 in the “Implementing a Trait on a Type” section, we mentioned the -orphan rule that says we’re allowed to implement a trait on a type as long as -either the trait or the type are local to our crate. It is possible to get +orphan rule that states we’re allowed to implement a trait on a type as long as +either the trait or the type are local to our crate. It’s possible to get around this restriction using the *newtype pattern*, which involves creating a -new type in a tuple struct (we covered tuple structs in the “Tuple Structs -without Named Fields to Create Different Types” section of Chapter 5). The -tuple struct will have one field and will be a thin wrapper around the type we -want to implement a trait for. Then the wrapper type is local to our crate, and -we can implement the trait on the wrapper. “Newtype” is a term originating from -the Haskell programming language. There’s no runtime performance penalty for -using this pattern, and the wrapper type is elided at compile time. - -As an example, we want to implement `Display` on `Vec`, which the orphan rule -prevents us from doing directly because the `Display` trait and the `Vec` type -are both defined outside of our crate. We can make a `Wrapper` struct that -holds an instance of `Vec`, then we can implement `Display` on `Wrapper` and -use the `Vec` value as shown in Listing 19-31: +new type in a tuple struct. (We covered tuple structs in the “Tuple Structs +without Named Fields to Create Different Types” section of Chapter 5.) The +tuple struct will have one field and be a thin wrapper around the type we want +to implement a trait for. Then the wrapper type is local to our crate, and we +can implement the trait on the wrapper. *Newtype* is a term that originates +from the Haskell programming language. There is no runtime performance penalty +for using this pattern, and the wrapper type is elided at compile time. + +As an example, let’s say we want to implement `Display` on `Vec`, which the +orphan rule prevents us from doing directly because the `Display` trait and the +`Vec` type are defined outside our crate. We can make a `Wrapper` struct that +holds an instance of `Vec`; then we can implement `Display` on `Wrapper` and +use the `Vec` value, as shown in Listing 19-31: Filename: src/main.rs @@ -654,24 +657,24 @@ fn main() { ``` Listing 19-31: Creating a `Wrapper` type around -`Vec` to be able to implement `Display` +`Vec` to implement `Display` The implementation of `Display` uses `self.0` to access the inner `Vec`, -because `Wrapper` is a tuple struct and the `Vec` is the item at index 0 in the +because `Wrapper` is a tuple struct and `Vec` is the item at index 0 in the tuple. Then we can use the functionality of the `Display` type on `Wrapper`. -The downside of this method is that, because `Wrapper` is a new type, it -doesn’t have the methods of the value it’s holding; we’d have to implement all -the methods of `Vec` directly on `Wrapper`, so that it can delegate to -`self.0`--- this allows us to treat `Wrapper` exactly like a `Vec`. If we -wanted the new type to have every single method that the inner type has, -implementing the `Deref` trait (discussed in Chapter 15 in the “Treating Smart -Pointers like Regular References with the `Deref` Trait” section) on the -wrapper to return the inner type can be a solution. If we don’t want the -wrapper type to have all the methods of the inner type, in order to restrict -the wrapper type’s behavior for example, we’d have to implement just the -methods we do want ourselves. - -That’s how the newtype pattern is used in relation to traits; it’s also a -useful pattern without having traits involved. Let’s switch focus now to talk -about some advanced ways to interact with Rust’s type system. +The downside of using this technique is that `Wrapper` is a new type, so it +doesn’t have the methods of the value it’s holding. We would have to implement +all the methods of `Vec` directly on `Wrapper` so it can delegate to `self.0`, +allowing us to treat `Wrapper` exactly like a `Vec`. If we wanted the new type +to have every method the inner type has, implementing the `Deref` trait +(discussed in Chapter 15 in the “Treating Smart Pointers like Regular +References with the `Deref` Trait” section) on the `Wrapper` to return the +inner type would be a solution. If we don’t want the `Wrapper` type to have all +the methods of the inner type, in order to restrict the `Wrapper` type’s +behavior for example, we would have to implement just the methods we do want +manually. + +Now you know how the newtype pattern is used in relation to traits; it’s also a +useful pattern even when traits are not involved. Let’s switch focus and look +at some advanced ways to interact with Rust’s type system. diff --git a/second-edition/src/ch19-04-advanced-types.md b/second-edition/src/ch19-04-advanced-types.md index 9ae8597054..16672f9c55 100644 --- a/second-edition/src/ch19-04-advanced-types.md +++ b/second-edition/src/ch19-04-advanced-types.md @@ -1,41 +1,42 @@ ## Advanced Types The Rust type system has some features that we’ve mentioned in this book but -haven’t yet discussed. We’ll start our discussion on advanced types with a more -general discussion about why newtypes are useful as types. We’ll then move to -type aliases, a feature similar to newtypes but with slightly different -semantics. We’ll also discuss the `!` type and dynamically sized types. +haven’t yet discussed. We’ll start by discussing newtypes in general as we +examine why newtypes are useful as types. Then we’ll move on to type aliases, a +feature similar to newtypes but with slightly different semantics. We’ll also +discuss the `!` type and dynamically sized types. ### Using the Newtype Pattern for Type Safety and Abstraction -> This section assumes you’ve read the newtype pattern section in the “Advanced -> Traits” section. +> Note: This section assumes you’ve read the earlier section “The Newtype +> Pattern to Implement External Traits on External Types”. -The newtype pattern is useful for other things beyond what we’ve discussed so -far, including statically enforcing that values are never confused, and as -indication of the units of a value. We actually had an example of this in -Listing 19-23: the `Millimeters` and `Meters` structs both wrap `u32` values in -a newtype. If we write a function with a parameter of type `Millimeters`, we -won’t be able to compile a program that accidentally tries to call that -function with a value of type `Meters` or a plain `u32`. +The newtype pattern is useful for other tasks beyond what we’ve discussed so +far, including statically enforcing that values are never confused and as an +indication of the units of a value. You saw an example of using newtypes to +indicate units in Listing 19-23: recall that the `Millimeters` and `Meters` +structs wrapped `u32` values in a newtype. If we wrote a function with a +parameter of type `Millimeters`, we couldn’t compile a program that +accidentally tried to call that function with a value of type `Meters` or a +plain `u32`. -Another use is in abstracting away some implementation details of a type: the -wrapper type can expose a public API that’s different to the API of the private -inner type, if we used it directly to restrict the available functionality, for -example. +Another use of the newtype pattern is in abstracting away some implementation +details of a type: the new type can expose a public API that is different from +the API of the private inner type if we used the new type directly to restrict +the available functionality, for example. -Newtypes can also hide internal generic types. For example, we could provide a +Newtypes can also hide internal implementation. For example, we could provide a `People` type to wrap a `HashMap` that stores a person’s ID associated with their name. Code using `People` would only interact with the public API we provide, such as a method to add a name string to the `People` -collection, and that code wouldn’t need to know that we assign an `i32` ID to -names internally. The newtype pattern is a lightweight way to achieve -encapsulation to hide implementation details that we discussed in the -“Encapsulation that Hides Implementation Details” section of Chapter 17. +collection; that code wouldn’t need to know that we assign an `i32` ID to names +internally. The newtype pattern is a lightweight way to achieve encapsulation +to hide implementation details, which we discussed in the “Encapsulation that +Hides Implementation Details” section of Chapter 17. ### Type Aliases Create Type Synonyms -Alongside the newtype pattern, Rust provides the ability to declare a *type +Along with the newtype pattern, Rust provides the ability to declare a *type alias* to give an existing type another name. For this we use the `type` keyword. For example, we can create the alias `Kilometers` to `i32` like so: @@ -43,10 +44,10 @@ keyword. For example, we can create the alias `Kilometers` to `i32` like so: type Kilometers = i32; ``` -This means `Kilometers` is a *synonym* for `i32`; unlike the `Millimeters` and -`Meters` types we created in Listing 19-23, `Kilometers` is not a separate, new -type. Values that have the type `Kilometers` will be treated exactly the same -as values of type `i32`: +Now, the alias `Kilometers` is a *synonym* for `i32`; unlike the `Millimeters` +and `Meters` types we created in Listing 19-23, `Kilometers` is not a separate, +new type. Values that have the type `Kilometers` will be treated the same as +values of type `i32`: ```rust type Kilometers = i32; @@ -57,21 +58,21 @@ let y: Kilometers = 5; println!("x + y = {}", x + y); ``` -Because `Kilometers` and `i32`, are the same type, we can add values of both -types, and we can also pass `Kilometers` values to functions that take `i32` -parameters. With this method, though, we don’t get the type checking benefits -that we get from the newtype pattern discussed in the previous section. +Because `Kilometers` and `i32` are the same type, we can add values of both +types and we can pass `Kilometers` values to functions that take `i32` +parameters. However, using this method, we don’t get the type checking benefits +that we get from the newtype pattern discussed earlier. The main use case for type synonyms is to reduce repetition. For example, we -may have a lengthy type like this: +might have a lengthy type like this: ```rust,ignore Box ``` -Writing this out in function signatures and as type annotations all over the -place can be tiresome and error-prone. Imagine having a project full of code -like that in Listing 19-32: +Writing this lengthy type in function signatures and as type annotations all +over the code can be tiresome and error prone. Imagine having a project full of +code like that in Listing 19-32: ```rust let f: Box = Box::new(|| println!("hi")); @@ -88,9 +89,9 @@ fn returns_long_type() -> Box { Listing 19-32: Using a long type in many places -A type alias makes this code more manageable by reducing the repetition. Here, -we’ve introduced an alias named `Thunk` for the verbose type, and can replace -all uses of the type with the shorter `Thunk` as shown in Listing 19-33: +A type alias makes this code more manageable by reducing the repetition. In +Listing 19-33, we’ve introduced an alias named `Thunk` for the verbose type and +can replace all uses of the type with the shorter alias `Thunk`: ```rust type Thunk = Box; @@ -110,9 +111,10 @@ fn returns_long_type() -> Thunk { Listing 19-33: Introducing a type alias `Thunk` to reduce repetition -Much easier to read and write! Choosing a good name for a type alias can help -communicate your intent as well (*thunk* is a word for code to be evaluated at -a later time, so it’s an appropriate name for a closure that gets stored). +This code is much easier to read and write! Choosing a meaningful name for a +type alias can help communicate your intent as well (*thunk* is a word for code +to be evaluated at a later time, so it’s an appropriate name for a closure that +gets stored). Type aliases are also commonly used with the `Result` type for reducing repetition. Consider the `std::io` module in the standard library. I/O @@ -135,17 +137,17 @@ pub trait Write { } ``` -We have `Result<..., Error>` repeated a lot. As such, `std::io` has this type +The `Result<..., Error>` is repeated a lot. As such, `std::io` has this type of alias declaration: ```rust,ignore type Result = Result; ``` -Because this is in the `std::io` module, we can use the fully qualified alias -`std::io::Result`; that is, a `Result` with the `E` filled in as -`std::io::Error`. The `Write` trait function signatures end up looking like -this: +Because this declaration is in the `std::io` module, we can use the fully +qualified alias `std::io::Result`; that is, a `Result` with the `E` +filled in as `std::io::Error`. The `Write` trait function signatures end up +looking like this: ```rust,ignore pub trait Write { @@ -157,17 +159,17 @@ pub trait Write { } ``` -The type alias helps in two ways: this is easier to write *and* it gives us a -consistent interface across all of `std::io`. Because it’s an alias, it is just -another `Result`, which means we can use any methods that work on +The type alias helps in two ways: it makes code easier to write *and* it gives +us a consistent interface across all of `std::io`. Because it’s an alias, it’s +just another `Result`, which means we can use any methods that work on `Result` with it, as well as special syntax like `?`. ### The `!` Never Type that Never Returns Rust has a special type named `!` that’s known in type theory lingo as the -*empty type*, because it has no values. We prefer to call it the *never type*, +*empty type* because it has no values. We prefer to call it the *never type* because it stands in the place of the return type when a function will never -return. For example: +return. Here is an example: ```rust,ignore fn bar() -> ! { @@ -175,13 +177,13 @@ fn bar() -> ! { } ``` -This is read as “the function `bar` returns never.” Functions that return never -are called *diverging functions*. We can’t create values of the type `!`, so -`bar` can never possibly return. +This code is read as “the function `bar` returns never.” Functions that return +never are called *diverging functions*. We can’t create values of the type `!` +so `bar` can never possibly return. -But what use is a type you can never create values for? If you think all the -way back to Chapter 2, we had some code that looked like the code we’ve -reproduced here in Listing 19-34: +But what use is a type you can never create values for? Recall the code in +Chapter 2 that we added in the “Handling Invalid Input” section; we’ve +reproduced it here in Listing 19-34: ```rust # let guess = "3"; @@ -198,35 +200,35 @@ let guess: u32 = match guess.trim().parse() { `continue` At the time, we skipped over some details in this code. In Chapter 6 in “The -`match` Control Flow Operator” section, we covered that `match` arms must all -return the same type. This, for example, doesn’t work: +`match` Control Flow Operator” section, we discussed that `match` arms must all +return the same type. So, for example, the following code doesn’t work: ```rust,ignore -let guess = match guess.trim().parse() { +let guess = match guess.trim().parse() { Ok(_) => 5, Err(_) => "hello", } ``` -The type of `guess` here would have to be both an integer and a string, and -Rust requires that `guess` can only have one type. So what does `continue` +The type of `guess` in this code would have to be an integer *and* a string, +and Rust requires that `guess` can only have one type. So what does `continue` return? How were we allowed to return a `u32` from one arm and have another arm that ends with `continue` in Listing 19-34? -As you may have guessed, `continue` has a value of `!`. That is, when Rust goes -to compute the type of `guess`, it looks at both of the match arms, the former -with a value of `u32`, and the latter a value of `!`. Because `!` can never -have a value, Rust decides that the type of `guess` is `u32`. +As you might have guessed, `continue` has a `!` value. That is, when Rust +computes the type of `guess`, it looks at both match arms, the former with a +value of `u32` and the latter with a `!` value. Because `!` can never have a +value, Rust decides that the type of `guess` is `u32`. The formal way of describing this behavior is that expressions of type `!` can be coerced into any other type. We’re allowed to end this `match` arm with -`continue` because `continue` doesn’t actually return a value; it instead moves -control back to the top of the loop, so in the `Err` case, we never actually -assign a value to `guess`. +`continue` because `continue` doesn’t return a value; instead, it moves control +back to the top of the loop, so in the `Err` case, we never assign a value to +`guess`. -The never type is also useful with `panic!`. Remember the `unwrap` function -that we call on `Option` values to produce a value or panic? Here’s its -definition: +The never type is useful with the `panic!` macro as well. Remember the `unwrap` +function that we call on `Option` values to produce a value or panic? Here +is its definition: ```rust,ignore impl Option { @@ -239,11 +241,11 @@ impl Option { } ``` -Here, the same thing happens as in the `match` in Listing 19-34: we know that -`val` has the type `T`, and `panic!` has the type `!`, so the result of the -overall `match` expression is `T`. This works because `panic!` doesn’t produce -a value; it ends the program. In the `None` case, we won’t be returning a value -from `unwrap`, so this code is valid. +In this code, the same thing happens as in the `match` in Listing 19-34: Rust +sees that `val` has the type `T` and `panic!` has the type `!` so the result of +the overall `match` expression is `T`. This code works because `panic!` doesn’t +produce a value; it ends the program. In the `None` case, we won’t be returning +a value from `unwrap`, so this code is valid. One final expression that has the type `!` is a `loop`: @@ -255,23 +257,23 @@ loop { } ``` -Here, the loop never ends, so the value of the expression is `!`. This wouldn’t -be true if we included a `break`, however, as the loop would terminate when it -got to the `break`. +Here, the loop never ends, so `!` is the value of the expression. However, this +wouldn’t be true if we included a `break`, because the loop would terminate +when it got to the `break`. -### Dynamically Sized Types & `Sized` +### Dynamically Sized Types and `Sized` -Due to Rust’s need to know things like how much space to allocate for a value -of a particular type, there’s a corner of its type system that can be -confusing: the concept of *dynamically sized types*. Sometimes referred to as -‘DSTs’ or ‘unsized types’, these types let us talk about types whose size we -can only know at runtime. +Due to Rust’s need to know certain details, such as how much space to allocate +for a value of a particular type, there is a corner of its type system that can +be confusing: the concept of *dynamically sized types*. Sometimes referred to +as *DSTs* or *unsized types*, these types let us write code using values whose +size we can only know at runtime. -Let’s dig into the details of a dynamically sized type that we’ve been using -this whole book: `str`. That’s right, not `&str`, but `str` on its own, is a -DST. We can’t know how long the string is until runtime, meaning we can’t -create a variable of type `str`, nor can we take an argument of type `str`. -Consider this code, which does not work: +Let’s dig into the details of a dynamically sized type called `str`, which +we’ve been using throughout the book. That’s right, not `&str`, but `str` on +its own, is a DST. We can’t know how long the string is until runtime, meaning +we can’t create a variable of type `str`, nor can we take an argument of type +`str`. Consider the following code, which does not work: ```rust,ignore let s1: str = "Hello there!"; @@ -279,43 +281,40 @@ let s2: str = "How's it going?"; ``` Rust needs to know how much memory to allocate for any value of a particular -type, and all values of a type must use the same amount of memory. If we were -allowed to write this code, that would mean these two `str` values would need -to take up the exact same amount of space, but they have different lengths: -`s1` needs 12 bytes of storage, and `s2` needs 15. This is why it’s not -possible to create a variable holding a dynamically sized type. - -So what to do? You already know the answer in this case: we make the types of -`s1` and `s2` a `&str` rather than `str`. If you think back to the “String -Slices” section of Chapter 4, we said that the slice data structure stores the +type, and all values of a type must use the same amount of memory. If Rust +allowed us to write this code, these two `str` values would need to take up the +same amount of space. But they have different lengths: `s1` needs 12 bytes of +storage and `s2` needs 15. This is why it’s not possible to create a variable +holding a dynamically sized type. + +So what do we do? In this case, you already know the answer: we make the types +of `s1` and `s2` a `&str` rather than a `str`. Recall that in the “String +Slices” section of Chapter 4 we said the slice data structure stores the starting position and the length of the slice. -So while a `&T` is a single value that stores the memory address of where the -`T` is located, a `&str` is *two* values: the address of the `str` and its -length. As such, a `&str` has a size we can know at compile time: it’s two -times the size of a `usize` in length. That is, we always know the size of a -`&str`, no matter how long the string it refers to is. This is the general way -in which dynamically sized types are used in Rust; they have an extra bit of -metadata that stores the size of the dynamic information. This leads us to the -golden rule of dynamically sized types: we must always put values of +So although a `&T` is a single value that stores the memory address of where +the `T` is located, a `&str` is *two* values: the address of the `str` and its +length. As such, we can know the size of a `&str` value at compile time: it’s +two times the size of a `usize` in length. That is, we always know the size of +a `&str`, no matter how long the string it refers to is. In general, this is +the way in which dynamically sized types are used in Rust: they have an extra +bit of metadata that stores the size of the dynamic information. The golden +rule of dynamically sized types is that we must always put values of dynamically sized types behind a pointer of some kind. -We can combine `str` with all kinds of pointers: `Box`, for example, or -`Rc`. In fact, you’ve seen this before, but with a different dynamically +We can combine `str` with all kinds of pointers: for example, `Box` or +`Rc`. In fact, you’ve seen this before but with a different dynamically sized type: traits. Every trait is a dynamically sized type we can refer to by using the name of the trait. In Chapter 17 in the “Using Trait Objects that -Allow for Values of Different Types” section, we mentioned that in order to use -traits as trait objects, we have to put them behind a pointer like `&Trait` or -`Box` (`Rc` would work too). Traits being dynamically sized is -the reason we have to do that! +Allow for Values of Different Types” section, we mentioned that to use traits +as trait objects, we must put them behind a pointer, such as `&Trait` or +`Box` (`Rc` would work too). -#### The `Sized` Trait - -To work with DSTs, Rust has a particular trait to determine if a type’s size is -known at compile time or not: the `Sized` trait. This trait is automatically -implemented for everything whose size is known at compile time. In addition, -Rust implicitly adds a bound on `Sized` to every generic function. That is, a -generic function definition like this: +To work with DSTs, Rust has a particular trait called the `Sized` trait to +determine whether or not a type’s size is known at compile time. This trait is +automatically implemented for everything whose size is known at compile time. +In addition, Rust implicitly adds a bound on `Sized` to every generic function. +That is, a generic function definition like this: ```rust,ignore fn generic(t: T) { @@ -323,7 +322,7 @@ fn generic(t: T) { } ``` -is actually treated as if we had written this: +is actually treated as though we had written this: ```rust,ignore fn generic(t: T) { @@ -332,7 +331,7 @@ fn generic(t: T) { ``` By default, generic functions will only work on types that have a known size at -compile time. There is, however, special syntax you can use to relax this +compile time. However, you can use the following special syntax to relax this restriction: ```rust,ignore @@ -341,12 +340,12 @@ fn generic(t: &T) { } ``` -A trait bound on `?Sized` is the opposite of a trait bound on `Sized`; that is, -we would read this as “`T` may or may not be `Sized`”. This syntax is only -available for `Sized`, no other traits. +A trait bound on `?Sized` is the opposite of a trait bound on `Sized`: we would +read this as “`T` may or may not be `Sized`.” This syntax is only available for +`Sized`, not any other traits. -Also note we switched the type of the `t` parameter from `T` to `&T`: because -the type might not be `Sized`, we need to use it behind some kind of pointer. -In this case, we’ve chosen a reference. +Also note that we switched the type of the `t` parameter from `T` to `&T`. +Because the type might not be `Sized`, we need to use it behind some kind of +pointer. In this case, we’ve chosen a reference. -Next let’s talk about functions and closures! +Next, we’ll talk about functions and closures! diff --git a/second-edition/src/ch19-05-advanced-functions-and-closures.md b/second-edition/src/ch19-05-advanced-functions-and-closures.md index 26ca4ae8bb..6d81575d44 100644 --- a/second-edition/src/ch19-05-advanced-functions-and-closures.md +++ b/second-edition/src/ch19-05-advanced-functions-and-closures.md @@ -1,18 +1,18 @@ -## Advanced Functions & Closures +## Advanced Functions and Closures -Finally, let’s discuss some advanced features related to functions and -closures: function pointers, diverging functions, and returning closures. +Finally, we’ll explore some advanced features related to functions and +closures, which include function pointers and returning closures. ### Function Pointers We’ve talked about how to pass closures to functions; you can also pass regular -functions to functions! This is useful when we want to pass a function we’ve -already defined rather than defining a new closure. We do this using function -pointers to allow us to use functions as arguments to other functions. -Functions coerce to the type `fn`, with a lower case ‘f’ not to be confused -with the `Fn` closure trait. The `fn` type is called a *function pointer*. The -syntax for specifying that a parameter is a function pointer is similar to that -of closures, as shown in Listing 19-35: +functions to functions! This technique is useful when we want to pass a +function we’ve already defined rather than defining a new closure. We do this +using function pointers to allow us to use functions as arguments to other +functions. Functions coerce to the type `fn` (with a lowercase f), not to be +confused with the `Fn` closure trait. The `fn` type is called a function +pointer. The syntax for specifying that a parameter is a function pointer is +similar to that of closures, as shown in Listing 19-35: Filename: src/main.rs @@ -35,28 +35,28 @@ fn main() { Listing 19-35: Using the `fn` type to accept a function pointer as an argument -This prints `The answer is: 12`. We specify that the parameter `f` in +This code prints `The answer is: 12`. We specify that the parameter `f` in `do_twice` is an `fn` that takes one parameter of type `i32` and returns an `i32`. We can then call `f` in the body of `do_twice`. In `main`, we can pass the function name `add_one` as the first argument to `do_twice`. Unlike closures, `fn` is a type rather than a trait, so we specify `fn` as the -parameter type directly, rather than declaring a generic type parameter with -one of the `Fn` traits as a trait bound. +parameter type directly rather than declaring a generic type parameter with one +of the `Fn` traits as a trait bound. Function pointers implement all three of the closure traits (`Fn`, `FnMut`, and `FnOnce`), so we can always pass a function pointer as an argument for a -function that expects a closure. Prefer to write functions using a generic type -and one of the closure traits, so that your functions can accept either +function that expects a closure. It’s best to write functions using a generic +type and one of the closure traits so your functions can accept either functions or closures. -An example of a case where you’d want to only accept `fn` and not closures is -when interfacing with external code that doesn’t have closures: C functions can +An example of where you would want to only accept `fn` and not closures is when +interfacing with external code that doesn’t have closures: C functions can accept functions as arguments, but C doesn’t have closures. -For an example where we can use either a closure defined inline or a named +As an example of where we can use either a closure defined inline or a named function, let’s look at a use of `map`. To use the `map` function to turn a -vector of numbers into a vector of strings, we could use a closure: +vector of numbers into a vector of strings, we could use a closure, like this: ```rust let list_of_numbers = vec![1, 2, 3]; @@ -66,7 +66,8 @@ let list_of_strings: Vec = list_of_numbers .collect(); ``` -Or we could name a function as the argument to `map` instead of the closure: +Or we could name a function as the argument to `map` instead of the closure, +like this: ```rust let list_of_numbers = vec![1, 2, 3]; @@ -76,25 +77,25 @@ let list_of_strings: Vec = list_of_numbers .collect(); ``` -Note that we do have to use the fully qualified syntax that we talked about in -the “Advanced Traits” section because there are multiple functions available -named `to_string`; here, we’re using the `to_string` function defined in the +Note that we must use the fully qualified syntax that we talked about earlier +in the “Advanced Traits” section because there are multiple functions available +named `to_string`. Here, we’re using the `to_string` function defined in the `ToString` trait, which the standard library has implemented for any type that implements `Display`. -Some people prefer this style, some people prefer to use closures. They end up -with the same code, so use whichever feels more clear to you. +Some people prefer this style, and some people prefer to use closures. They end +up compiling to the same code, so use whichever style is clearer to you. ### Returning Closures Closures are represented by traits, which means we can’t return closures -directly. In most cases where we may want to return a trait, we can instead use -the concrete type that implements the trait as the return value of the -function. We can’t do that with closures, though, because they don’t have a -concrete type that’s returnable; we’re not allowed to use the function pointer -`fn` as a return type, for example. +directly. In most cases where we might want to return a trait, we can instead +use the concrete type that implements the trait as the return value of the +function. But we can’t do that with closures because they don’t have a concrete +type that is returnable; we’re not allowed to use the function pointer `fn` as +a return type, for example. -This code that tries to return a closure directly won’t compile: +The following code tries to return a closure directly, but it won’t compile: ```rust,ignore fn returns_closure() -> Fn(i32) -> i32 { @@ -102,7 +103,7 @@ fn returns_closure() -> Fn(i32) -> i32 { } ``` -The compiler error is: +The compiler error is as follows: ```text error[E0277]: the trait bound `std::ops::Fn(i32) -> i32 + 'static: @@ -118,9 +119,9 @@ std::marker::Sized` is not satisfied = note: the return type of a function must have a statically known size ``` -Our error references the `Sized` trait again! Rust doesn’t know how much space -it will need to store the closure. We saw a solution to this in the previous -section: we can use a trait object: +The error references the `Sized` trait again! Rust doesn’t know how much space +it will need to store the closure. We saw a solution to this problem earlier. +We can use a trait object: ```rust fn returns_closure() -> Box i32> { @@ -128,17 +129,18 @@ fn returns_closure() -> Box i32> { } ``` -This code will compile just fine. For more about trait objects, refer back to -the “Trait Objects” section in Chapter 17. +This code will compile just fine. For more about trait objects, refer to the +“Trait Objects” section in Chapter 17. ## Summary -Whew! Now we’ve gone over features of Rust that aren’t used often, but are -available if you need them in very particular circumstances. We’ve introduced a -lot of complex topics so that, when you encounter them in error message -suggestions or in others’ code, you’ll at least have seen these concepts and -syntax once before. You can use this chapter as a reference to guide you to -your solutions. +Whew! Now you have some features of Rust in your toolbox that you won’t use +often, but you’ll know they’re available in very particular circumstances. +We’ve introduced several complex topics so that when you encounter them in +error message suggestions or in other peoples’ code, you’ll be able to +recognize these concepts and syntax. Use this chapter as a reference to guide +you to solutions. + +Next, we’ll put everything we’ve discussed throughout the book into practice +and do one more project! -Now, let’s put everything we’ve learned throughout the book into practice with -one more project! From 7d3588156855a0b7fe3111db04d752e38135df62 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Wed, 28 Mar 2018 08:45:13 -0400 Subject: [PATCH 028/749] Clarify that these 'a are the same lifetime name, not same lifetime Fixes #1202 --- second-edition/nostarch/chapter19.md | 9 +++++++++ second-edition/nostarch/odt/chapter19.docx | Bin 148978 -> 149676 bytes 2 files changed, 9 insertions(+) diff --git a/second-edition/nostarch/chapter19.md b/second-edition/nostarch/chapter19.md index c1dbb66e78..d66f5d98b6 100644 --- a/second-edition/nostarch/chapter19.md +++ b/second-edition/nostarch/chapter19.md @@ -613,6 +613,15 @@ string slice in `Context` and the reference to the `Context` in `Parser`. The most straightforward way to do this is to use the same lifetime everywhere, as shown in Listing 19-13: +To get this code to compile, we need to fill in the lifetime parameters for the +string slice in `Context` and the reference to the `Context` in `Parser`. The +most straightforward way to do this is to use the same lifetime name +everywhere, as shown in Listing 19-13. Recall from the “Lifetime Annotations in +Struct Definitions” section in Chapter 10 that each of `struct Context<'a>`, +`struct Parser<'a>`, and `impl<'a>` is declaring a new lifetime parameter. +While their names happen to all be the same, the three lifetime parameters +declared in this example aren’t related. + Filename: src/lib.rs ``` diff --git a/second-edition/nostarch/odt/chapter19.docx b/second-edition/nostarch/odt/chapter19.docx index 6332c874d3c515124a36819c0d5460e5da8bb809..1bb843cb8c9298d8d6655045ed3f92e1c5a7523e 100644 GIT binary patch delta 125474 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