From bc01c6b9cc4250612304f4a5b2faee0aa78bfaee Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Tue, 24 Jun 2025 13:33:12 -0400 Subject: [PATCH 1/3] Chapter 13 from tech review --- nostarch/docx/chapter13.docx | Bin 55037 -> 41828 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/nostarch/docx/chapter13.docx b/nostarch/docx/chapter13.docx index acd86e83913fdf0244cfeefa8c3eba4afe77404f..e34fbc48755a9059124c50ebb4fb7f97597d151a 100644 GIT binary patch literal 41828 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
  • 895y0vkqM@vCmTNNS%BPf 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 Vg@ZH{0Dua4e1!BJ^!&d*{XYy4KV$#^ literal 55037 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 Date: Tue, 24 Jun 2025 14:10:53 -0400 Subject: [PATCH 2/3] Address ch 13 tech review comments --- .../listing-12-19/src/lib.rs | 2 + .../listing-12-23-reproduced/src/lib.rs | 47 --------------- .../listing-12-23-reproduced/src/main.rs | 49 ++++++++++++++- .../listing-12-24-reproduced/src/lib.rs | 45 -------------- .../listing-12-24-reproduced/src/main.rs | 47 ++++++++++++++- .../listing-13-18/src/lib.rs | 45 -------------- .../listing-13-18/src/main.rs | 47 ++++++++++++++- .../listing-13-19/src/lib.rs | 50 ---------------- .../listing-13-19/src/main.rs | 53 ++++++++++++++++- .../listing-13-20/src/lib.rs | 54 ----------------- .../listing-13-20/src/main.rs | 56 +++++++++++++++++- .../listing-13-22/src/lib.rs | 52 ---------------- .../listing-13-22/src/main.rs | 42 +++++++++++-- nostarch/docx/chapter13.docx | Bin 41828 -> 61897 bytes src/ch13-03-improving-our-io-project.md | 21 ++++--- 15 files changed, 291 insertions(+), 319 deletions(-) diff --git a/listings/ch12-an-io-project/listing-12-19/src/lib.rs b/listings/ch12-an-io-project/listing-12-19/src/lib.rs index 68db1173da..a169012b9e 100644 --- a/listings/ch12-an-io-project/listing-12-19/src/lib.rs +++ b/listings/ch12-an-io-project/listing-12-19/src/lib.rs @@ -1,4 +1,5 @@ // ANCHOR: here +// ANCHOR: ch13 pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); @@ -10,6 +11,7 @@ pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { results } +// ANCHOR_END: ch13 // ANCHOR_END: here #[cfg(test)] diff --git a/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs b/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs index e54343d242..0c48286ded 100644 --- a/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs +++ b/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs @@ -1,50 +1,3 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub file_path: String, - pub ignore_case: bool, -} - -// ANCHOR: ch13 -impl Config { - pub fn build(args: &[String]) -> Result { - if args.len() < 3 { - return Err("not enough arguments"); - } - - let query = args[1].clone(); - let file_path = args[2].clone(); - - let ignore_case = env::var("IGNORE_CASE").is_ok(); - - Ok(Config { - query, - file_path, - ignore_case, - }) - } -} -// ANCHOR_END: ch13 - -pub fn run(config: Config) -> Result<(), Box> { - let contents = fs::read_to_string(config.file_path)?; - - let results = if config.ignore_case { - search_case_insensitive(&config.query, &contents) - } else { - search(&config.query, &contents) - }; - - for line in results { - println!("{line}"); - } - - Ok(()) -} - pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); diff --git a/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs b/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs index a4f8a74114..a0a31803d5 100644 --- a/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs +++ b/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs @@ -1,7 +1,9 @@ use std::env; +use std::error::Error; +use std::fs; use std::process; -use minigrep::Config; +use minigrep::{search, search_case_insensitive}; fn main() { let args: Vec = env::args().collect(); @@ -11,8 +13,51 @@ fn main() { process::exit(1); }); - if let Err(e) = minigrep::run(config) { + if let Err(e) = run(config) { println!("Application error: {e}"); process::exit(1); } } + +pub struct Config { + pub query: String, + pub file_path: String, + pub ignore_case: bool, +} + +// ANCHOR: ch13 +impl Config { + fn build(args: &[String]) -> Result { + if args.len() < 3 { + return Err("not enough arguments"); + } + + let query = args[1].clone(); + let file_path = args[2].clone(); + + let ignore_case = env::var("IGNORE_CASE").is_ok(); + + Ok(Config { + query, + file_path, + ignore_case, + }) + } +} +// ANCHOR_END: ch13 + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file_path)?; + + let results = if config.ignore_case { + search_case_insensitive(&config.query, &contents) + } else { + search(&config.query, &contents) + }; + + for line in results { + println!("{line}"); + } + + Ok(()) +} diff --git a/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs b/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs index 292b097897..0c48286ded 100644 --- a/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs +++ b/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs @@ -1,48 +1,3 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub file_path: String, - pub ignore_case: bool, -} - -impl Config { - pub fn build(args: &[String]) -> Result { - if args.len() < 3 { - return Err("not enough arguments"); - } - - let query = args[1].clone(); - let file_path = args[2].clone(); - - let ignore_case = env::var("IGNORE_CASE").is_ok(); - - Ok(Config { - query, - file_path, - ignore_case, - }) - } -} - -pub fn run(config: Config) -> Result<(), Box> { - let contents = fs::read_to_string(config.file_path)?; - - let results = if config.ignore_case { - search_case_insensitive(&config.query, &contents) - } else { - search(&config.query, &contents) - }; - - for line in results { - println!("{line}"); - } - - Ok(()) -} - pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); diff --git a/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs b/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs index f9d179c8ce..27c5d772b0 100644 --- a/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs +++ b/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs @@ -1,7 +1,9 @@ use std::env; +use std::error::Error; +use std::fs; use std::process; -use minigrep::Config; +use minigrep::{search, search_case_insensitive}; // ANCHOR: ch13 fn main() { @@ -15,10 +17,51 @@ fn main() { // --snip-- // ANCHOR_END: ch13 - if let Err(e) = minigrep::run(config) { + if let Err(e) = run(config) { eprintln!("Application error: {e}"); process::exit(1); } // ANCHOR: ch13 } // ANCHOR_END: ch13 + +pub struct Config { + pub query: String, + pub file_path: String, + pub ignore_case: bool, +} + +impl Config { + fn build(args: &[String]) -> Result { + if args.len() < 3 { + return Err("not enough arguments"); + } + + let query = args[1].clone(); + let file_path = args[2].clone(); + + let ignore_case = env::var("IGNORE_CASE").is_ok(); + + Ok(Config { + query, + file_path, + ignore_case, + }) + } +} + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file_path)?; + + let results = if config.ignore_case { + search_case_insensitive(&config.query, &contents) + } else { + search(&config.query, &contents) + }; + + for line in results { + println!("{line}"); + } + + Ok(()) +} diff --git a/listings/ch13-functional-features/listing-13-18/src/lib.rs b/listings/ch13-functional-features/listing-13-18/src/lib.rs index 292b097897..0c48286ded 100644 --- a/listings/ch13-functional-features/listing-13-18/src/lib.rs +++ b/listings/ch13-functional-features/listing-13-18/src/lib.rs @@ -1,48 +1,3 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub file_path: String, - pub ignore_case: bool, -} - -impl Config { - pub fn build(args: &[String]) -> Result { - if args.len() < 3 { - return Err("not enough arguments"); - } - - let query = args[1].clone(); - let file_path = args[2].clone(); - - let ignore_case = env::var("IGNORE_CASE").is_ok(); - - Ok(Config { - query, - file_path, - ignore_case, - }) - } -} - -pub fn run(config: Config) -> Result<(), Box> { - let contents = fs::read_to_string(config.file_path)?; - - let results = if config.ignore_case { - search_case_insensitive(&config.query, &contents) - } else { - search(&config.query, &contents) - }; - - for line in results { - println!("{line}"); - } - - Ok(()) -} - pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); diff --git a/listings/ch13-functional-features/listing-13-18/src/main.rs b/listings/ch13-functional-features/listing-13-18/src/main.rs index 40109ef638..84e52dde31 100644 --- a/listings/ch13-functional-features/listing-13-18/src/main.rs +++ b/listings/ch13-functional-features/listing-13-18/src/main.rs @@ -1,7 +1,9 @@ use std::env; +use std::error::Error; +use std::fs; use std::process; -use minigrep::Config; +use minigrep::{search, search_case_insensitive}; // ANCHOR: here fn main() { @@ -13,10 +15,51 @@ fn main() { // --snip-- // ANCHOR_END: here - if let Err(e) = minigrep::run(config) { + if let Err(e) = run(config) { eprintln!("Application error: {e}"); process::exit(1); } // ANCHOR: here } // ANCHOR_END: here + +pub struct Config { + pub query: String, + pub file_path: String, + pub ignore_case: bool, +} + +impl Config { + fn build(args: &[String]) -> Result { + if args.len() < 3 { + return Err("not enough arguments"); + } + + let query = args[1].clone(); + let file_path = args[2].clone(); + + let ignore_case = env::var("IGNORE_CASE").is_ok(); + + Ok(Config { + query, + file_path, + ignore_case, + }) + } +} + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file_path)?; + + let results = if config.ignore_case { + search_case_insensitive(&config.query, &contents) + } else { + search(&config.query, &contents) + }; + + for line in results { + println!("{line}"); + } + + Ok(()) +} diff --git a/listings/ch13-functional-features/listing-13-19/src/lib.rs b/listings/ch13-functional-features/listing-13-19/src/lib.rs index 79ae2b8f6c..0c48286ded 100644 --- a/listings/ch13-functional-features/listing-13-19/src/lib.rs +++ b/listings/ch13-functional-features/listing-13-19/src/lib.rs @@ -1,53 +1,3 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub file_path: String, - pub ignore_case: bool, -} - -// ANCHOR: here -impl Config { - pub fn build( - mut args: impl Iterator, - ) -> Result { - // --snip-- - // ANCHOR_END: here - if args.len() < 3 { - return Err("not enough arguments"); - } - - let query = args[1].clone(); - let file_path = args[2].clone(); - - let ignore_case = env::var("IGNORE_CASE").is_ok(); - - Ok(Config { - query, - file_path, - ignore_case, - }) - } -} - -pub fn run(config: Config) -> Result<(), Box> { - let contents = fs::read_to_string(config.file_path)?; - - let results = if config.ignore_case { - search_case_insensitive(&config.query, &contents) - } else { - search(&config.query, &contents) - }; - - for line in results { - println!("{line}"); - } - - Ok(()) -} - pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); diff --git a/listings/ch13-functional-features/listing-13-19/src/main.rs b/listings/ch13-functional-features/listing-13-19/src/main.rs index 9ac0225455..a6197a4a42 100644 --- a/listings/ch13-functional-features/listing-13-19/src/main.rs +++ b/listings/ch13-functional-features/listing-13-19/src/main.rs @@ -1,7 +1,9 @@ use std::env; +use std::error::Error; +use std::fs; use std::process; -use minigrep::Config; +use minigrep::{search, search_case_insensitive}; fn main() { let config = Config::build(env::args()).unwrap_or_else(|err| { @@ -9,8 +11,55 @@ fn main() { process::exit(1); }); - if let Err(e) = minigrep::run(config) { + + if let Err(e) = run(config) { eprintln!("Application error: {e}"); process::exit(1); } } + +pub struct Config { + pub query: String, + pub file_path: String, + pub ignore_case: bool, +} + +// ANCHOR: here +impl Config { + fn build( + mut args: impl Iterator, + ) -> Result { + // --snip-- + // ANCHOR_END: here + if args.len() < 3 { + return Err("not enough arguments"); + } + + let query = args[1].clone(); + let file_path = args[2].clone(); + + let ignore_case = env::var("IGNORE_CASE").is_ok(); + + Ok(Config { + query, + file_path, + ignore_case, + }) + } +} + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file_path)?; + + let results = if config.ignore_case { + search_case_insensitive(&config.query, &contents) + } else { + search(&config.query, &contents) + }; + + for line in results { + println!("{line}"); + } + + Ok(()) +} diff --git a/listings/ch13-functional-features/listing-13-20/src/lib.rs b/listings/ch13-functional-features/listing-13-20/src/lib.rs index 4410964a7d..0c48286ded 100644 --- a/listings/ch13-functional-features/listing-13-20/src/lib.rs +++ b/listings/ch13-functional-features/listing-13-20/src/lib.rs @@ -1,57 +1,3 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub file_path: String, - pub ignore_case: bool, -} - -// ANCHOR: here -impl Config { - pub fn build( - mut args: impl Iterator, - ) -> Result { - args.next(); - - let query = match args.next() { - Some(arg) => arg, - None => return Err("Didn't get a query string"), - }; - - let file_path = match args.next() { - Some(arg) => arg, - None => return Err("Didn't get a file path"), - }; - - let ignore_case = env::var("IGNORE_CASE").is_ok(); - - Ok(Config { - query, - file_path, - ignore_case, - }) - } -} -// ANCHOR_END: here - -pub fn run(config: Config) -> Result<(), Box> { - let contents = fs::read_to_string(config.file_path)?; - - let results = if config.ignore_case { - search_case_insensitive(&config.query, &contents) - } else { - search(&config.query, &contents) - }; - - for line in results { - println!("{line}"); - } - - Ok(()) -} - pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); diff --git a/listings/ch13-functional-features/listing-13-20/src/main.rs b/listings/ch13-functional-features/listing-13-20/src/main.rs index 9ac0225455..5b18c2a643 100644 --- a/listings/ch13-functional-features/listing-13-20/src/main.rs +++ b/listings/ch13-functional-features/listing-13-20/src/main.rs @@ -1,7 +1,9 @@ use std::env; +use std::error::Error; +use std::fs; use std::process; -use minigrep::Config; +use minigrep::{search, search_case_insensitive}; fn main() { let config = Config::build(env::args()).unwrap_or_else(|err| { @@ -9,8 +11,58 @@ fn main() { process::exit(1); }); - if let Err(e) = minigrep::run(config) { + if let Err(e) = run(config) { eprintln!("Application error: {e}"); process::exit(1); } } + +pub struct Config { + pub query: String, + pub file_path: String, + pub ignore_case: bool, +} + +// ANCHOR: here +impl Config { + fn build( + mut args: impl Iterator, + ) -> Result { + args.next(); + + let query = match args.next() { + Some(arg) => arg, + None => return Err("Didn't get a query string"), + }; + + let file_path = match args.next() { + Some(arg) => arg, + None => return Err("Didn't get a file path"), + }; + + let ignore_case = env::var("IGNORE_CASE").is_ok(); + + Ok(Config { + query, + file_path, + ignore_case, + }) + } +} +// ANCHOR_END: here + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file_path)?; + + let results = if config.ignore_case { + search_case_insensitive(&config.query, &contents) + } else { + search(&config.query, &contents) + }; + + for line in results { + println!("{line}"); + } + + Ok(()) +} diff --git a/listings/ch13-functional-features/listing-13-22/src/lib.rs b/listings/ch13-functional-features/listing-13-22/src/lib.rs index d694669b45..28af29e727 100644 --- a/listings/ch13-functional-features/listing-13-22/src/lib.rs +++ b/listings/ch13-functional-features/listing-13-22/src/lib.rs @@ -1,55 +1,3 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub file_path: String, - pub ignore_case: bool, -} - -impl Config { - pub fn build( - mut args: impl Iterator, - ) -> Result { - args.next(); - - let query = match args.next() { - Some(arg) => arg, - None => return Err("Didn't get a query string"), - }; - - let file_path = match args.next() { - Some(arg) => arg, - None => return Err("Didn't get a file path"), - }; - - let ignore_case = env::var("IGNORE_CASE").is_ok(); - - Ok(Config { - query, - file_path, - ignore_case, - }) - } -} - -pub fn run(config: Config) -> Result<(), Box> { - let contents = fs::read_to_string(config.file_path)?; - - let results = if config.ignore_case { - search_case_insensitive(&config.query, &contents) - } else { - search(&config.query, &contents) - }; - - for line in results { - println!("{line}"); - } - - Ok(()) -} - // ANCHOR: here pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { contents diff --git a/listings/ch13-functional-features/listing-13-22/src/main.rs b/listings/ch13-functional-features/listing-13-22/src/main.rs index 9ac0225455..e169d7aa43 100644 --- a/listings/ch13-functional-features/listing-13-22/src/main.rs +++ b/listings/ch13-functional-features/listing-13-22/src/main.rs @@ -1,16 +1,48 @@ use std::env; +use std::error::Error; +use std::fs; use std::process; -use minigrep::Config; +use minigrep::search; fn main() { - let config = Config::build(env::args()).unwrap_or_else(|err| { - eprintln!("Problem parsing arguments: {err}"); + let args: Vec = env::args().collect(); + + let config = Config::build(&args).unwrap_or_else(|err| { + println!("Problem parsing arguments: {err}"); process::exit(1); }); - if let Err(e) = minigrep::run(config) { - eprintln!("Application error: {e}"); + if let Err(e) = run(config) { + println!("Application error: {e}"); process::exit(1); } } + +struct Config { + query: String, + file_path: String, +} + +impl Config { + fn build(args: &[String]) -> Result { + if args.len() < 3 { + return Err("not enough arguments"); + } + + let query = args[1].clone(); + let file_path = args[2].clone(); + + Ok(Config { query, file_path }) + } +} + +fn run(config: Config) -> Result<(), Box> { + let contents = fs::read_to_string(config.file_path)?; + + for line in search(&config.query, &contents) { + println!("{line}"); + } + + Ok(()) +} diff --git a/nostarch/docx/chapter13.docx b/nostarch/docx/chapter13.docx index e34fbc48755a9059124c50ebb4fb7f97597d151a..6a0f3927b739353aa0c0a536494a584d081ee4e7 100644 GIT binary patch literal 61897 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 z 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%0DO&9#D@}u5fcp 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
      gAfmApfvKo-) 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 literal 41828 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
    • 895y0vkqM@vCmTNNS%BPf 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 Vg@ZH{0Dua4e1!BJ^!&d*{XYy4KV$#^ diff --git a/src/ch13-03-improving-our-io-project.md b/src/ch13-03-improving-our-io-project.md index 8a846db120..5cb4a739ae 100644 --- a/src/ch13-03-improving-our-io-project.md +++ b/src/ch13-03-improving-our-io-project.md @@ -13,10 +13,10 @@ values, allowing the `Config` struct to own those values. In Listing 13-17, we’ve reproduced the implementation of the `Config::build` function as it was in Listing 12-23. -+ ```rust,ignore -{{#rustdoc_include ../listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs:ch13}} +{{#rustdoc_include ../listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs:ch13}} ``` @@ -66,15 +66,14 @@ iterator values into a vector and then passing a slice to `Config::build`, now we’re passing ownership of the iterator returned from `env::args` to `Config::build` directly. -Next, we need to update the definition of `Config::build`. In your I/O -project’s _src/lib.rs_ file, let’s change the signature of `Config::build` to -look like Listing 13-19. This still won’t compile because we need to update the -function body. +Next, we need to update the definition of `Config::build`. Let’s change the +signature of `Config::build` to look like Listing 13-19. This still won’t +compile because we need to update the function body. -+ ```rust,ignore,does_not_compile -{{#rustdoc_include ../listings/ch13-functional-features/listing-13-19/src/lib.rs:here}} +{{#rustdoc_include ../listings/ch13-functional-features/listing-13-19/src/main.rs:here}} ``` @@ -100,10 +99,10 @@ Next, we’ll fix the body of `Config::build`. Because `args` implements the `Iterator` trait, we know we can call the `next` method on it! Listing 13-20 updates the code from Listing 12-23 to use the `next` method. -+ -```rust,noplayground -{{#rustdoc_include ../listings/ch13-functional-features/listing-13-20/src/lib.rs:here}} +```rust,ignore,noplayground +{{#rustdoc_include ../listings/ch13-functional-features/listing-13-20/src/main.rs:here}} ``` From d2743cab0e7e5db375271ccda5623fde4f47395d Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Thu, 26 Jun 2025 18:15:14 -0400 Subject: [PATCH 3/3] Backport ch13 tech review changes to md --- nostarch/chapter13.md | 277 +++++++++++------------- src/ch13-01-closures.md | 79 +++---- src/ch13-02-iterators.md | 23 +- src/ch13-03-improving-our-io-project.md | 48 ++-- src/ch13-04-performance.md | 55 +---- 5 files changed, 212 insertions(+), 270 deletions(-) diff --git a/nostarch/chapter13.md b/nostarch/chapter13.md index a3153a75b9..73fede40be 100644 --- a/nostarch/chapter13.md +++ b/nostarch/chapter13.md @@ -23,7 +23,7 @@ More specifically, we’ll cover: * *Closures*, a function-like construct you can store in a variable * *Iterators*, a way of processing a series of elements * How to use closures and iterators to improve the I/O project in Chapter 12 -* The performance of closures and iterators (Spoiler alert: they’re faster than +* The performance of closures and iterators (spoiler alert: they’re faster than you might think!) We’ve already covered some other Rust features, such as pattern matching and @@ -35,7 +35,7 @@ code, we’ll devote this entire chapter to them. -## Closures: Anonymous Functions that Capture Their Environment +## Closures: Anonymous Functions That Capture Their Environment Rust’s closures are anonymous functions you can save in a variable or pass as arguments to other functions. You can create the closure in one place and then @@ -53,8 +53,8 @@ customization. ### Capturing the Environment with Closures We’ll first examine how we can use closures to capture values from the -environment they’re defined in for later use. Here’s the scenario: Every so -often, our t-shirt company gives away an exclusive, limited-edition shirt to +environment they’re defined in for later use. Here’s the scenario: every so +often, our T-shirt company gives away an exclusive, limited-edition shirt to someone on our mailing list as a promotion. People on the mailing list can optionally add their favorite color to their profile. If the person chosen for a free shirt has their favorite color set, they get that color shirt. If the @@ -67,8 +67,8 @@ number of colors available for simplicity). We represent the company’s inventory with an `Inventory` struct that has a field named `shirts` that contains a `Vec` representing the shirt colors currently in stock. The method `giveaway` defined on `Inventory` gets the optional shirt -color preference of the free shirt winner, and returns the shirt color the -person will get. This setup is shown in Listing 13-1: +color preference of the free-shirt winner, and returns the shirt color the +person will get. This setup is shown in Listing 13-1. src/main.rs @@ -134,7 +134,7 @@ to distribute for this limited-edition promotion. We call the `giveaway` method for a user with a preference for a red shirt and a user without any preference. Again, this code could be implemented in many ways, and here, to focus on -closures, we’ve stuck to concepts you’ve already learned except for the body of +closures, we’ve stuck to concepts you’ve already learned, except for the body of the `giveaway` method that uses a closure. In the `giveaway` method, we get the user preference as a parameter of type `Option` and call the `unwrap_or_else` method on `user_preference`. The `unwrap_or_else` method on @@ -148,12 +148,12 @@ the closure. We specify the closure expression `|| self.most_stocked()` as the argument to `unwrap_or_else`. This is a closure that takes no parameters itself (if the -closure had parameters, they would appear between the two vertical bars). The +closure had parameters, they would appear between the two vertical pipes). The body of the closure calls `self.most_stocked()`. We’re defining the closure here, and the implementation of `unwrap_or_else` will evaluate the closure later if the result is needed. -Running this code prints: +Running this code prints the following: ``` $ cargo run @@ -194,7 +194,7 @@ explicitness and clarity at the cost of being more verbose than is strictly necessary. Annotating the types for a closure would look like the definition shown in Listing 13-2. In this example, we’re defining a closure and storing it in a variable rather than defining the closure in the spot we pass it as an -argument as we did in Listing 13-1. +argument, as we did in Listing 13-1. src/main.rs @@ -209,7 +209,7 @@ src/main.rs Listing 13-2: Adding optional type annotations of the parameter and return value types in the closure With type annotations added, the syntax of closures looks more similar to the -syntax of functions. Here we define a function that adds 1 to its parameter and +syntax of functions. Here, we define a function that adds 1 to its parameter and a closure that has the same behavior, for comparison. We’ve added some spaces to line up the relevant parts. This illustrates how closure syntax is similar to function syntax except for the use of pipes and the amount of syntax that is @@ -222,7 +222,7 @@ let add_one_v3 = |x| { x + 1 }; let add_one_v4 = |x| x + 1 ; ``` -The first line shows a function definition, and the second line shows a fully +The first line shows a function definition and the second line shows a fully annotated closure definition. In the third line, we remove the type annotations from the closure definition. In the fourth line, we remove the brackets, which are optional because the closure body has only one expression. These are all @@ -298,7 +298,7 @@ captured values. In Listing 13-4, we define a closure that captures an immutable reference to the vector named `list` because it only needs an immutable reference to print -the value: +the value. src/main.rs @@ -328,8 +328,6 @@ is called. This code compiles, runs, and prints: ``` $ cargo run - Locking 1 package to latest compatible version - Adding closure-example v0.1.0 (/Users/chris/dev/rust-lang/book/tmp/listings/ch13-functional-features/listing-13-04) Compiling closure-example v0.1.0 (file:///projects/closure-example) Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.43s Running `target/debug/closure-example` @@ -340,7 +338,7 @@ After calling closure: [1, 2, 3] ``` Next, in Listing 13-5, we change the closure body so that it adds an element to -the `list` vector. The closure now captures a mutable reference: +the `list` vector. The closure now captures a mutable reference. src/main.rs @@ -362,8 +360,6 @@ This code compiles, runs, and prints: ``` $ cargo run - Locking 1 package to latest compatible version - Adding closure-example v0.1.0 (/Users/chris/dev/rust-lang/book/tmp/listings/ch13-functional-features/listing-13-05) Compiling closure-example v0.1.0 (file:///projects/closure-example) Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.43s Running `target/debug/closure-example` @@ -388,7 +384,7 @@ the data so that it’s owned by the new thread. We’ll discuss threads and why you would want to use them in detail in Chapter 16 when we talk about concurrency, but for now, let’s briefly explore spawning a new thread using a closure that needs the `move` keyword. Listing 13-6 shows Listing 13-4 modified -to print the vector in a new thread rather than in the main thread: +to print the vector in a new thread rather than in the main thread. src/main.rs @@ -413,9 +409,10 @@ closure body prints out the list. In Listing 13-4, the closure only captured to `list` needed to print it. In this example, even though the closure body still only needs an immutable reference, we need to specify that `list` should be moved into the closure by putting the `move` keyword at the beginning of the -closure definition. The new thread might finish before the rest of the main -thread finishes, or the main thread might finish first. If the main thread -maintained ownership of `list` but ended before the new thread did and dropped +closure definition. If the main thread performed more operations before calling +`join` on the new thread, the new thread might finish before the rest of the +main thread finishes, or the main thread might finish first. If the main thread +maintained ownership of `list` but ended before the new thread and drops `list`, the immutable reference in the thread would be invalid. Therefore, the compiler requires that `list` be moved into the closure given to the new thread so the reference will be valid. Try removing the `move` keyword or using `list` @@ -434,10 +431,11 @@ Once a closure has captured a reference or captured ownership of a value from the environment where the closure is defined (thus affecting what, if anything, is moved *into* the closure), the code in the body of the closure defines what happens to the references or values when the closure is evaluated later (thus -affecting what, if anything, is moved *out of* the closure). A closure body can -do any of the following: move a captured value out of the closure, mutate the -captured value, neither move nor mutate the value, or capture nothing from the -environment to begin with. +affecting what, if anything, is moved *out of* the closure). + +A closure body can do any of the following: move a captured value out of the +closure, mutate the captured value, neither move nor mutate the value, or +capture nothing from the environment to begin with. The way a closure captures and handles values from the environment affects which traits the closure implements, and traits are how functions and structs @@ -445,18 +443,18 @@ can specify what kinds of closures they can use. Closures will automatically implement one, two, or all three of these `Fn` traits, in an additive fashion, depending on how the closure’s body handles the values: -1. `FnOnce` applies to closures that can be called once. All closures implement - at least this trait, because all closures can be called. A closure that - moves captured values out of its body will only implement `FnOnce` and none - of the other `Fn` traits, because it can only be called once. -1. `FnMut` applies to closures that don’t move captured values out of their - body, but that might mutate the captured values. These closures can be - called more than once. -1. `Fn` applies to closures that don’t move captured values out of their body - and that don’t mutate captured values, as well as closures that capture - nothing from their environment. These closures can be called more than once - without mutating their environment, which is important in cases such as - calling a closure multiple times concurrently. +* `FnOnce` applies to closures that can be called once. All closures implement + at least this trait because all closures can be called. A closure that moves + captured values out of its body will only implement `FnOnce` and none of the + other `Fn` traits because it can only be called once. +* `FnMut` applies to closures that don’t move captured values out of their + body, but that might mutate the captured values. These closures can be + called more than once. +* `Fn` applies to closures that don’t move captured values out of their body + and that don’t mutate captured values, as well as closures that capture + nothing from their environment. These closures can be called more than once + without mutating their environment, which is important in cases such as + calling a closure multiple times concurrently. Let’s look at the definition of the `unwrap_or_else` method on `Option` that we used in Listing 13-1: @@ -494,20 +492,21 @@ closures implement `FnOnce`, `unwrap_or_else` accepts all three kinds of closures and is as flexible as it can be. > Note: If what we want to do doesn’t require capturing a value from the -> environment, we can use the name of a function rather than a closure. For -> example, we could call `unwrap_or_else(Vec::new)` on a `Option>` value -> to get a new, empty vector if the value is `None`. The compiler automatically +> environment, we can use the name of a function rather than a closure where we +> need something that implements one of the `Fn` traits. For example, on an +> `Option>` value, we could call `unwrap_or_else(Vec::new)` to get a +> new, empty vector if the value is `None`. The compiler automatically > implements whichever of the `Fn` traits is applicable for a function > definition. -Now let’s look at the standard library method `sort_by_key` defined on slices, +Now let’s look at the standard library method `sort_by_key`, defined on slices, to see how that differs from `unwrap_or_else` and why `sort_by_key` uses `FnMut` instead of `FnOnce` for the trait bound. The closure gets one argument in the form of a reference to the current item in the slice being considered, and returns a value of type `K` that can be ordered. This function is useful when you want to sort a slice by a particular attribute of each item. In Listing 13-7, we have a list of `Rectangle` instances and we use `sort_by_key` -to order them by their `width` attribute from low to high: +to order them by their `width` attribute from low to high. src/main.rs @@ -556,12 +555,12 @@ $ cargo run ``` The reason `sort_by_key` is defined to take an `FnMut` closure is that it calls -the closure multiple times: once for each item in the slice. The closure `|r| r.width` doesn’t capture, mutate, or move out anything from its environment, so +the closure multiple times: once for each item in the slice. The closure `|r| r.width` doesn’t capture, mutate, or move anything out from its environment, so it meets the trait bound requirements. In contrast, Listing 13-8 shows an example of a closure that implements just the `FnOnce` trait, because it moves a value out of the environment. The -compiler won’t let us use this closure with `sort_by_key`: +compiler won’t let us use this closure with `sort_by_key`. src/main.rs @@ -595,7 +594,7 @@ Listing 13-8: Attempting to use an `FnOnce` closure with `sort_by_key` This is a contrived, convoluted way (that doesn’t work) to try and count the number of times `sort_by_key` calls the closure when sorting `list`. This code attempts to do this counting by pushing `value`—a `String` from the closure’s -environment—into the `sort_operations` vector. The closure captures `value` +environment—into the `sort_operations` vector. The closure captures `value` and then moves `value` out of the closure by transferring ownership of `value` to the `sort_operations` vector. This closure can be called once; trying to call it a second time wouldn’t work because `value` would no longer be in the @@ -629,12 +628,11 @@ error: could not compile `rectangles` (bin "rectangles") due to 1 previous error The error points to the line in the closure body that moves `value` out of the environment. To fix this, we need to change the closure body so that it doesn’t -move values out of the environment. To count the number of times the closure -is called, keeping a counter in the environment and incrementing its value in -the closure body is a more straightforward way to calculate that. The closure -in Listing 13-9 works with `sort_by_key` because it is only capturing a mutable -reference to the `num_sort_operations` counter and can therefore be called more -than once: +move values out of the environment. Keeping a counter in the environment and +incrementing its value in the closure body is a more straightforward way to +count the number of times the closure is called. The closure in Listing 13-9 +works with `sort_by_key` because it is only capturing a mutable reference to the +`num_sort_operations` counter and can therefore be called more than once: src/main.rs @@ -692,10 +690,10 @@ src/main.rs Listing 13-10: Creating an iterator The iterator is stored in the `v1_iter` variable. Once we’ve created an -iterator, we can use it in a variety of ways. In Listing 3-5 in Chapter 3, we -iterated over an array using a `for` loop to execute some code on each of its -items. Under the hood this implicitly created and then consumed an iterator, -but we glossed over how exactly that works until now. +iterator, we can use it in a variety of ways. In Listing 3-5, we iterated over +an array using a `for` loop to execute some code on each of its items. Under +the hood, this implicitly created and then consumed an iterator, but we glossed +over how exactly that works until now. In the example in Listing 13-11, we separate the creation of the iterator from the use of the iterator in the `for` loop. When the `for` loop is called using @@ -722,7 +720,7 @@ you would likely write this same functionality by starting a variable at index incrementing the variable value in a loop until it reached the total number of items in the vector. -Iterators handle all that logic for you, cutting down on repetitive code you +Iterators handle all of that logic for you, cutting down on repetitive code you could potentially mess up. Iterators give you more flexibility to use the same logic with many different kinds of sequences, not just data structures you can index into, like vectors. Let’s examine how iterators do that. @@ -742,7 +740,7 @@ pub trait Iterator { } ``` -Notice this definition uses some new syntax: `type Item` and `Self::Item`, +Notice that this definition uses some new syntax: `type Item` and `Self::Item`, which are defining an *associated type* with this trait. We’ll talk about associated types in depth in Chapter 20. For now, all you need to know is that this code says implementing the `Iterator` trait requires that you also define @@ -751,8 +749,8 @@ method. In other words, the `Item` type will be the type returned from the iterator. The `Iterator` trait only requires implementors to define one method: the -`next` method, which returns one item of the iterator at a time wrapped in -`Some` and, when iteration is over, returns `None`. +`next` method, which returns one item of the iterator at a time, wrapped in +`Some`, and, when iteration is over, returns `None`. We can call the `next` method on iterators directly; Listing 13-12 demonstrates what values are returned from repeated calls to `next` on the iterator created @@ -790,7 +788,7 @@ ownership of `v1` and returns owned values, we can call `into_iter` instead of `iter`. Similarly, if we want to iterate over mutable references, we can call `iter_mut` instead of `iter`. -### Methods that Consume the Iterator +### Methods That Consume the Iterator The `Iterator` trait has a number of different methods with default implementations provided by the standard library; you can find out about these @@ -804,7 +802,7 @@ uses up the iterator. One example is the `sum` method, which takes ownership of the iterator and iterates through the items by repeatedly calling `next`, thus consuming the iterator. As it iterates through, it adds each item to a running total and returns the total when iteration is complete. Listing 13-13 has a -test illustrating a use of the `sum` method: +test illustrating a use of the `sum` method. src/lib.rs @@ -826,7 +824,7 @@ Listing 13-13: Calling the `sum` method to get the total of all items in the ite We aren’t allowed to use `v1_iter` after the call to `sum` because `sum` takes ownership of the iterator we call it on. -### Methods that Produce Other Iterators +### Methods That Produce Other Iterators *Iterator adapters* are methods defined on the `Iterator` trait that don’t consume the iterator. Instead, they produce different iterators by changing @@ -836,7 +834,7 @@ Listing 13-14 shows an example of calling the iterator adapter method `map`, which takes a closure to call on each item as the items are iterated through. The `map` method returns a new iterator that produces the modified items. The closure here creates a new iterator in which each item from the vector will be -incremented by 1: +incremented by 1. src/main.rs @@ -876,13 +874,12 @@ never gets called. The warning reminds us why: iterator adapters are lazy, and we need to consume the iterator here. To fix this warning and consume the iterator, we’ll use the `collect` method, -which we used in Chapter 12 with `env::args` in Listing 12-1. This method -consumes the iterator and collects the resulting values into a collection data -type. +which we used with `env::args` in Listing 12-1. This method consumes the +iterator and collects the resultant values into a collection data type. In Listing 13-15, we collect the results of iterating over the iterator that’s returned from the call to `map` into a vector. This vector will end up -containing each item from the original vector incremented by 1. +containing each item from the original vector, incremented by 1. src/main.rs @@ -894,7 +891,7 @@ src/main.rs assert_eq!(v2, vec![2, 3, 4]); ``` -Listing 13-15: Calling the `map` method to create a new iterator and then calling the `collect` method to consume the new iterator and create a vector +Listing 13-15: Calling the `map` method to create a new iterator, and then calling the `collect` method to consume the new iterator and create a vector Because `map` takes a closure, we can specify any operation we want to perform on each item. This is a great example of how closures let you customize some @@ -905,7 +902,7 @@ You can chain multiple calls to iterator adapters to perform complex actions in a readable way. But because all iterators are lazy, you have to call one of the consuming adapter methods to get results from calls to iterator adapters. -### Using Closures that Capture Their Environment +### Using Closures That Capture Their Environment Many iterator adapters take closures as arguments, and commonly the closures we’ll specify as arguments to iterator adapters will be closures that capture @@ -1005,13 +1002,13 @@ In Listing 12-6, we added code that took a slice of `String` values and created an instance of the `Config` struct by indexing into the slice and cloning the values, allowing the `Config` struct to own those values. In Listing 13-17, we’ve reproduced the implementation of the `Config::build` function as it was -in Listing 12-23: +in Listing 12-23. -src/lib.rs +src/main.rs ``` impl Config { - pub fn build(args: &[String]) -> Result { + fn build(args: &[String]) -> Result { if args.len() < 3 { return Err("not enough arguments"); } @@ -1093,16 +1090,15 @@ iterator values into a vector and then passing a slice to `Config::build`, now we’re passing ownership of the iterator returned from `env::args` to `Config::build` directly. -Next, we need to update the definition of `Config::build`. In your I/O -project’s *src/lib.rs* file, let’s change the signature of `Config::build` to -look like Listing 13-19. This still won’t compile because we need to update the -function body. +Next, we need to update the definition of `Config::build`. Let’s change the +signature of `Config::build` to look like Listing 13-19. This still won’t +compile, because we need to update the function body. -src/lib.rs +src/main.rs ``` impl Config { - pub fn build( + fn build( mut args: impl Iterator, ) -> Result { // --snip-- @@ -1129,13 +1125,13 @@ iterating over it, we can add the `mut` keyword into the specification of the Next, we’ll fix the body of `Config::build`. Because `args` implements the `Iterator` trait, we know we can call the `next` method on it! Listing 13-20 -updates the code from Listing 12-23 to use the `next` method: +updates the code from Listing 12-23 to use the `next` method. -src/lib.rs +src/main.rs ``` impl Config { - pub fn build( + fn build( mut args: impl Iterator, ) -> Result { args.next(); @@ -1165,16 +1161,16 @@ Listing 13-20: Changing the body of `Config::build` to use iterator methods Remember that the first value in the return value of `env::args` is the name of the program. We want to ignore that and get to the next value, so first we call -`next` and do nothing with the return value. Second, we call `next` to get the -value we want to put in the `query` field of `Config`. If `next` returns a -`Some`, we use a `match` to extract the value. If it returns `None`, it means -not enough arguments were given and we return early with an `Err` value. We do -the same thing for the `file_path` value. +`next` and do nothing with the return value. Then we call `next` to get the +value we want to put in the `query` field of `Config`. If `next` returns `Some`, +we use a `match` to extract the value. If it returns `None`, it means not enough +arguments were given and we return early with an `Err` value. We do the same +thing for the `file_path` value. ### Making Code Clearer with Iterator Adapters We can also take advantage of iterators in the `search` function in our I/O -project, which is reproduced here in Listing 13-21 as it was in Listing 12-19: +project, which is reproduced here in Listing 13-21 as it was in Listing 12-19. src/lib.rs @@ -1198,8 +1194,8 @@ We can write this code in a more concise way using iterator adapter methods. Doing so also lets us avoid having a mutable intermediate `results` vector. The functional programming style prefers to minimize the amount of mutable state to make code clearer. Removing the mutable state might enable a future enhancement -to make searching happen in parallel, because we wouldn’t have to manage -concurrent access to the `results` vector. Listing 13-22 shows this change: +to make searching happen in parallel because we wouldn’t have to manage +concurrent access to the `results` vector. Listing 13-22 shows this change. src/lib.rs @@ -1216,28 +1212,40 @@ Listing 13-22: Using iterator adapter methods in the implementation of the `sear Recall that the purpose of the `search` function is to return all lines in `contents` that contain the `query`. Similar to the `filter` example in Listing -13-16, this code uses the `filter` adapter to keep only the lines that -`line.contains(query)` returns `true` for. We then collect the matching lines -into another vector with `collect`. Much simpler! Feel free to make the same -change to use iterator methods in the `search_case_insensitive` function as -well. +13-16, this code uses the `filter` adapter to keep only the lines for which +`line.contains(query)` returns `true`. We then collect the matching lines into +another vector with `collect`. Much simpler! Feel free to make the same change +to use iterator methods in the `search_case_insensitive` function as well. + +For a further improvement, return an iterator from the `search` function by +removing the call to `collect` and changing the return type to `impl Iterator` so that the function becomes an iterator adapter. +Note that you’ll also need to update the tests! Search through a large file +using your `minigrep` tool before and after making this change to observe the +difference in behavior. Before this change, the program won’t print any results +until it has collected all of the results, but after the change, the results +will be printed as each matching line is found because the `for` loop in the +`run` function is able to take advantage of the laziness of the iterator. -### Choosing Between Loops or Iterators + + + + +### Choosing Between Loops and Iterators The next logical question is which style you should choose in your own code and why: the original implementation in Listing 13-21 or the version using -iterators in Listing 13-22. Most Rust programmers prefer to use the iterator -style. It’s a bit tougher to get the hang of at first, but once you get a feel -for the various iterator adapters and what they do, iterators can be easier to -understand. Instead of fiddling with the various bits of looping and building -new vectors, the code focuses on the high-level objective of the loop. This -abstracts away some of the commonplace code so it’s easier to see the concepts -that are unique to this code, such as the filtering condition each element in -the iterator must pass. +iterators in Listing 13-22 (assuming we’re collecting all the results before +returning them rather than returning the iterator). Most Rust programmers +prefer to use the iterator style. It’s a bit tougher to get the hang of at +first, but once you get a feel for the various iterator adapters and what they +do, iterators can be easier to understand. Instead of fiddling with the various +bits of looping and building new vectors, the code focuses on the high-level +objective of the loop. This abstracts away some of the commonplace code so it’s +easier to see the concepts that are unique to this code, such as the filtering +condition each element in the iterator must pass. But are the two implementations truly equivalent? The intuitive assumption -might be that the more low-level loop will be faster. Let’s talk about -performance. +might be that the lower-level loop will be faster. Let’s talk about performance. ## Comparing Performance: Loops vs. Iterators @@ -1256,7 +1264,7 @@ test bench_search_iter ... bench: 19,234,900 ns/iter (+/- 657,200) ``` The two implementations have similar performance! We won’t explain the -benchmark code here, because the point is not to prove that the two versions +benchmark code here because the point is not to prove that the two versions are equivalent but to get a general sense of how these two implementations compare performance-wise. @@ -1265,7 +1273,7 @@ various sizes as the `contents`, different words and words of different lengths as the `query`, and all kinds of other variations. The point is this: iterators, although a high-level abstraction, get compiled down to roughly the same code as if you’d written the lower-level code yourself. Iterators are one -of Rust’s *zero-cost abstractions*, by which we mean using the abstraction +of Rust’s *zero-cost abstractions*, by which we mean that using the abstraction imposes no additional runtime overhead. This is analogous to how Bjarne Stroustrup, the original designer and implementor of C++, defines *zero-overhead* in “Foundations of C++” (2012): @@ -1274,53 +1282,12 @@ Stroustrup, the original designer and implementor of C++, defines > don’t use, you don’t pay for. And further: What you do use, you couldn’t hand > code any better. -As another example, the following code is taken from an audio decoder. The -decoding algorithm uses the linear prediction mathematical operation to -estimate future values based on a linear function of the previous samples. This -code uses an iterator chain to do some math on three variables in scope: a -`buffer` slice of data, an array of 12 `coefficients`, and an amount by which -to shift data in `qlp_shift`. We’ve declared the variables within this example -but not given them any values; although this code doesn’t have much meaning -outside of its context, it’s still a concise, real-world example of how Rust -translates high-level ideas to low-level code. - -``` -let buffer: &mut [i32]; -let coefficients: [i64; 12]; -let qlp_shift: i16; - -for i in 12..buffer.len() { - let prediction = coefficients.iter() - .zip(&buffer[i - 12..i]) - .map(|(&c, &s)| c * s as i64) - .sum::() >> qlp_shift; - let delta = buffer[i]; - buffer[i] = prediction as i32 + delta; -} -``` - -To calculate the value of `prediction`, this code iterates through each of the -12 values in `coefficients` and uses the `zip` method to pair the coefficient -values with the previous 12 values in `buffer`. Then, for each pair, we -multiply the values together, sum all the results, and shift the bits in the -sum `qlp_shift` bits to the right. - -Calculations in applications like audio decoders often prioritize performance -most highly. Here, we’re creating an iterator, using two adapters, and then -consuming the value. What assembly code would this Rust code compile to? Well, -as of this writing, it compiles down to the same assembly you’d write by hand. -There’s no loop at all corresponding to the iteration over the values in -`coefficients`: Rust knows that there are 12 iterations, so it “unrolls” the -loop. *Unrolling* is an optimization that removes the overhead of the loop -controlling code and instead generates repetitive code for each iteration of -the loop. - -All of the coefficients get stored in registers, which means accessing the -values is very fast. There are no bounds checks on the array access at runtime. -All these optimizations that Rust is able to apply make the resulting code -extremely efficient. Now that you know this, you can use iterators and closures -without fear! They make code seem like it’s higher level but don’t impose a -runtime performance penalty for doing so. +In many cases, Rust code using iterators compiles to the same assembly you’d +write by hand. Optimizations such as loop unrolling and eliminating bounds +checking on array access apply and make the resultant code extremely efficient. +Now that you know this, you can use iterators and closures without fear! They +make code seem like it’s higher level but don’t impose a runtime performance +penalty for doing so. ## Summary diff --git a/src/ch13-01-closures.md b/src/ch13-01-closures.md index 263586aaf2..c4859d2f42 100644 --- a/src/ch13-01-closures.md +++ b/src/ch13-01-closures.md @@ -20,8 +20,8 @@ customization. ### Capturing the Environment with Closures We’ll first examine how we can use closures to capture values from the -environment they’re defined in for later use. Here’s the scenario: Every so -often, our t-shirt company gives away an exclusive, limited-edition shirt to +environment they’re defined in for later use. Here’s the scenario: every so +often, our T-shirt company gives away an exclusive, limited-edition shirt to someone on our mailing list as a promotion. People on the mailing list can optionally add their favorite color to their profile. If the person chosen for a free shirt has their favorite color set, they get that color shirt. If the @@ -34,8 +34,8 @@ number of colors available for simplicity). We represent the company’s inventory with an `Inventory` struct that has a field named `shirts` that contains a `Vec` representing the shirt colors currently in stock. The method `giveaway` defined on `Inventory` gets the optional shirt -color preference of the free shirt winner, and returns the shirt color the -person will get. This setup is shown in Listing 13-1: +color preference of the free-shirt winner, and returns the shirt color the +person will get. This setup is shown in Listing 13-1. @@ -64,12 +64,12 @@ the closure. We specify the closure expression `|| self.most_stocked()` as the argument to `unwrap_or_else`. This is a closure that takes no parameters itself (if the -closure had parameters, they would appear between the two vertical bars). The +closure had parameters, they would appear between the two vertical pipes). The body of the closure calls `self.most_stocked()`. We’re defining the closure here, and the implementation of `unwrap_or_else` will evaluate the closure later if the result is needed. -Running this code prints: +Running this code prints the following: ```console {{#include ../listings/ch13-functional-features/listing-13-01/output.txt}} @@ -105,7 +105,7 @@ explicitness and clarity at the cost of being more verbose than is strictly necessary. Annotating the types for a closure would look like the definition shown in Listing 13-2. In this example, we’re defining a closure and storing it in a variable rather than defining the closure in the spot we pass it as an -argument as we did in Listing 13-1. +argument, as we did in Listing 13-1. @@ -116,7 +116,7 @@ argument as we did in Listing 13-1. With type annotations added, the syntax of closures looks more similar to the -syntax of functions. Here we define a function that adds 1 to its parameter and +syntax of functions. Here, we define a function that adds 1 to its parameter and a closure that has the same behavior, for comparison. We’ve added some spaces to line up the relevant parts. This illustrates how closure syntax is similar to function syntax except for the use of pipes and the amount of syntax that is @@ -129,7 +129,7 @@ let add_one_v3 = |x| { x + 1 }; let add_one_v4 = |x| x + 1 ; ``` -The first line shows a function definition, and the second line shows a fully +The first line shows a function definition and the second line shows a fully annotated closure definition. In the third line, we remove the type annotations from the closure definition. In the fourth line, we remove the brackets, which are optional because the closure body has only one expression. These are all @@ -177,7 +177,7 @@ captured values. In Listing 13-4, we define a closure that captures an immutable reference to the vector named `list` because it only needs an immutable reference to print -the value: +the value. @@ -201,7 +201,7 @@ is called. This code compiles, runs, and prints: ``` Next, in Listing 13-5, we change the closure body so that it adds an element to -the `list` vector. The closure now captures a mutable reference: +the `list` vector. The closure now captures a mutable reference. @@ -234,7 +234,7 @@ the data so that it’s owned by the new thread. We’ll discuss threads and why you would want to use them in detail in Chapter 16 when we talk about concurrency, but for now, let’s briefly explore spawning a new thread using a closure that needs the `move` keyword. Listing 13-6 shows Listing 13-4 modified -to print the vector in a new thread rather than in the main thread: +to print the vector in a new thread rather than in the main thread. @@ -250,9 +250,10 @@ closure body prints out the list. In Listing 13-4, the closure only captured to `list` needed to print it. In this example, even though the closure body still only needs an immutable reference, we need to specify that `list` should be moved into the closure by putting the `move` keyword at the beginning of the -closure definition. The new thread might finish before the rest of the main -thread finishes, or the main thread might finish first. If the main thread -maintained ownership of `list` but ended before the new thread did and dropped +closure definition. If the main thread performed more operations before calling +`join` on the new thread, the new thread might finish before the rest of the +main thread finishes, or the main thread might finish first. If the main thread +maintained ownership of `list` but ended before the new thread and drops `list`, the immutable reference in the thread would be invalid. Therefore, the compiler requires that `list` be moved into the closure given to the new thread so the reference will be valid. Try removing the `move` keyword or using `list` @@ -271,10 +272,11 @@ Once a closure has captured a reference or captured ownership of a value from the environment where the closure is defined (thus affecting what, if anything, is moved _into_ the closure), the code in the body of the closure defines what happens to the references or values when the closure is evaluated later (thus -affecting what, if anything, is moved _out of_ the closure). A closure body can -do any of the following: move a captured value out of the closure, mutate the -captured value, neither move nor mutate the value, or capture nothing from the -environment to begin with. +affecting what, if anything, is moved _out of_ the closure). + +A closure body can do any of the following: move a captured value out of the +closure, mutate the captured value, neither move nor mutate the value, or +capture nothing from the environment to begin with. The way a closure captures and handles values from the environment affects which traits the closure implements, and traits are how functions and structs @@ -282,18 +284,18 @@ can specify what kinds of closures they can use. Closures will automatically implement one, two, or all three of these `Fn` traits, in an additive fashion, depending on how the closure’s body handles the values: -1. `FnOnce` applies to closures that can be called once. All closures implement - at least this trait because all closures can be called. A closure that moves - captured values out of its body will only implement `FnOnce` and none of the - other `Fn` traits, because it can only be called once. -2. `FnMut` applies to closures that don’t move captured values out of their - body, but that might mutate the captured values. These closures can be - called more than once. -3. `Fn` applies to closures that don’t move captured values out of their body - and that don’t mutate captured values, as well as closures that capture - nothing from their environment. These closures can be called more than once - without mutating their environment, which is important in cases such as - calling a closure multiple times concurrently. +* `FnOnce` applies to closures that can be called once. All closures implement + at least this trait because all closures can be called. A closure that moves + captured values out of its body will only implement `FnOnce` and none of the + other `Fn` traits because it can only be called once. +* `FnMut` applies to closures that don’t move captured values out of their + body, but that might mutate the captured values. These closures can be + called more than once. +* `Fn` applies to closures that don’t move captured values out of their body + and that don’t mutate captured values, as well as closures that capture + nothing from their environment. These closures can be called more than once + without mutating their environment, which is important in cases such as + calling a closure multiple times concurrently. Let’s look at the definition of the `unwrap_or_else` method on `Option` that we used in Listing 13-1: @@ -331,20 +333,21 @@ closures implement `FnOnce`, `unwrap_or_else` accepts all three kinds of closures and is as flexible as it can be. > Note: If what we want to do doesn’t require capturing a value from the -> environment, we can use the name of a function rather than a closure. For -> example, we could call `unwrap_or_else(Vec::new)` on a `Option>` value -> to get a new, empty vector if the value is `None`. The compiler automatically +> environment, we can use the name of a function rather than a closure where we +> need something that implements one of the `Fn` traits. For example, on an +> `Option>` value, we could call `unwrap_or_else(Vec::new)` to get a +> new, empty vector if the value is `None`. The compiler automatically > implements whichever of the `Fn` traits is applicable for a function > definition. -Now let’s look at the standard library method `sort_by_key` defined on slices, +Now let’s look at the standard library method `sort_by_key`, defined on slices, to see how that differs from `unwrap_or_else` and why `sort_by_key` uses `FnMut` instead of `FnOnce` for the trait bound. The closure gets one argument in the form of a reference to the current item in the slice being considered, and returns a value of type `K` that can be ordered. This function is useful when you want to sort a slice by a particular attribute of each item. In Listing 13-7, we have a list of `Rectangle` instances and we use `sort_by_key` -to order them by their `width` attribute from low to high: +to order them by their `width` attribute from low to high. @@ -362,12 +365,12 @@ This code prints: The reason `sort_by_key` is defined to take an `FnMut` closure is that it calls the closure multiple times: once for each item in the slice. The closure `|r| -r.width` doesn’t capture, mutate, or move out anything from its environment, so +r.width` doesn’t capture, mutate, or move anything out from its environment, so it meets the trait bound requirements. In contrast, Listing 13-8 shows an example of a closure that implements just the `FnOnce` trait, because it moves a value out of the environment. The -compiler won’t let us use this closure with `sort_by_key`: +compiler won’t let us use this closure with `sort_by_key`. diff --git a/src/ch13-02-iterators.md b/src/ch13-02-iterators.md index 5abca98c98..7113cedb35 100644 --- a/src/ch13-02-iterators.md +++ b/src/ch13-02-iterators.md @@ -20,10 +20,10 @@ useful. The iterator is stored in the `v1_iter` variable. Once we’ve created an -iterator, we can use it in a variety of ways. In Listing 3-5 in Chapter 3, we -iterated over an array using a `for` loop to execute some code on each of its -items. Under the hood this implicitly created and then consumed an iterator, -but we glossed over how exactly that works until now. +iterator, we can use it in a variety of ways. In Listing 3-5, we iterated over +an array using a `for` loop to execute some code on each of its items. Under +the hood, this implicitly created and then consumed an iterator, but we glossed +over how exactly that works until now. In the example in Listing 13-11, we separate the creation of the iterator from the use of the iterator in the `for` loop. When the `for` loop is called using @@ -74,7 +74,7 @@ iterator. The `Iterator` trait only requires implementors to define one method: the `next` method, which returns one item of the iterator at a time, wrapped in -`Some` and, when iteration is over, returns `None`. +`Some`, and, when iteration is over, returns `None`. We can call the `next` method on iterators directly; Listing 13-12 demonstrates what values are returned from repeated calls to `next` on the iterator created @@ -111,7 +111,7 @@ trait. Some of these methods call the `next` method in their definition, which is why you’re required to implement the `next` method when implementing the `Iterator` trait. -Methods that call `next` are called _consuming adapters_ because calling them +Methods that call `next` are called _consuming adapters_, because calling them uses up the iterator. One example is the `sum` method, which takes ownership of the iterator and iterates through the items by repeatedly calling `next`, thus consuming the iterator. As it iterates through, it adds each item to a running @@ -129,7 +129,7 @@ test illustrating a use of the `sum` method. We aren’t allowed to use `v1_iter` after the call to `sum` because `sum` takes ownership of the iterator we call it on. -### Methods that Produce Other Iterators +### Methods That Produce Other Iterators _Iterator adapters_ are methods defined on the `Iterator` trait that don’t consume the iterator. Instead, they produce different iterators by changing @@ -139,7 +139,7 @@ Listing 13-14 shows an example of calling the iterator adapter method `map`, which takes a closure to call on each item as the items are iterated through. The `map` method returns a new iterator that produces the modified items. The closure here creates a new iterator in which each item from the vector will be -incremented by 1: +incremented by 1. @@ -160,15 +160,14 @@ never gets called. The warning reminds us why: iterator adapters are lazy, and we need to consume the iterator here. To fix this warning and consume the iterator, we’ll use the `collect` method, -which we used in Chapter 12 with `env::args` in Listing 12-1. This method -consumes the iterator and collects the resultant values into a collection data -type. +which we used with `env::args` in Listing 12-1. This method consumes the +iterator and collects the resultant values into a collection data type. In Listing 13-15, we collect the results of iterating over the iterator that’s returned from the call to `map` into a vector. This vector will end up containing each item from the original vector, incremented by 1. -+ ```rust {{#rustdoc_include ../listings/ch13-functional-features/listing-13-15/src/main.rs:here}} diff --git a/src/ch13-03-improving-our-io-project.md b/src/ch13-03-improving-our-io-project.md index 5cb4a739ae..69811a6cd4 100644 --- a/src/ch13-03-improving-our-io-project.md +++ b/src/ch13-03-improving-our-io-project.md @@ -68,7 +68,7 @@ we’re passing ownership of the iterator returned from `env::args` to Next, we need to update the definition of `Config::build`. Let’s change the signature of `Config::build` to look like Listing 13-19. This still won’t -compile because we need to update the function body. +compile, because we need to update the function body. @@ -118,7 +118,7 @@ thing for the `file_path` value. ### Making Code Clearer with Iterator Adapters We can also take advantage of iterators in the `search` function in our I/O -project, which is reproduced here in Listing 13-21 as it was in Listing 12-19: +project, which is reproduced here in Listing 13-21 as it was in Listing 12-19. @@ -132,8 +132,8 @@ We can write this code in a more concise way using iterator adapter methods. Doing so also lets us avoid having a mutable intermediate `results` vector. The functional programming style prefers to minimize the amount of mutable state to make code clearer. Removing the mutable state might enable a future enhancement -to make searching happen in parallel, because we wouldn’t have to manage -concurrent access to the `results` vector. Listing 13-22 shows this change: +to make searching happen in parallel because we wouldn’t have to manage +concurrent access to the `results` vector. Listing 13-22 shows this change. @@ -146,23 +146,37 @@ concurrent access to the `results` vector. Listing 13-22 shows this change: Recall that the purpose of the `search` function is to return all lines in `contents` that contain the `query`. Similar to the `filter` example in Listing 13-16, this code uses the `filter` adapter to keep only the lines for which -`line.contains(query)` returns `true` for. We then collect the matching lines -into another vector with `collect`. Much simpler! Feel free to make the same -change to use iterator methods in the `search_case_insensitive` function as -well. +`line.contains(query)` returns `true`. We then collect the matching lines into +another vector with `collect`. Much simpler! Feel free to make the same change +to use iterator methods in the `search_case_insensitive` function as well. -### Choosing Between Loops or Iterators +For a further improvement, return an iterator from the `search` function by +removing the call to `collect` and changing the return type to `impl +Iterator` so that the function becomes an iterator adapter. +Note that you’ll also need to update the tests! Search through a large file +using your `minigrep` tool before and after making this change to observe the +difference in behavior. Before this change, the program won’t print any results +until it has collected all of the results, but after the change, the results +will be printed as each matching line is found because the `for` loop in the +`run` function is able to take advantage of the laziness of the iterator. + + + + + +### Choosing Between Loops and Iterators The next logical question is which style you should choose in your own code and why: the original implementation in Listing 13-21 or the version using -iterators in Listing 13-22. Most Rust programmers prefer to use the iterator -style. It’s a bit tougher to get the hang of at first, but once you get a feel -for the various iterator adapters and what they do, iterators can be easier to -understand. Instead of fiddling with the various bits of looping and building -new vectors, the code focuses on the high-level objective of the loop. This -abstracts away some of the commonplace code so it’s easier to see the concepts -that are unique to this code, such as the filtering condition each element in -the iterator must pass. +iterators in Listing 13-22 (assuming we’re collecting all the results before +returning them rather than returning the iterator). Most Rust programmers +prefer to use the iterator style. It’s a bit tougher to get the hang of at +first, but once you get a feel for the various iterator adapters and what they +do, iterators can be easier to understand. Instead of fiddling with the various +bits of looping and building new vectors, the code focuses on the high-level +objective of the loop. This abstracts away some of the commonplace code so it’s +easier to see the concepts that are unique to this code, such as the filtering +condition each element in the iterator must pass. But are the two implementations truly equivalent? The intuitive assumption might be that the lower-level loop will be faster. Let’s talk about performance. diff --git a/src/ch13-04-performance.md b/src/ch13-04-performance.md index a5a9720a45..2cb9710db4 100644 --- a/src/ch13-04-performance.md +++ b/src/ch13-04-performance.md @@ -15,7 +15,7 @@ test bench_search_iter ... bench: 19,234,900 ns/iter (+/- 657,200) ``` The two implementations have similar performance! We won’t explain the -benchmark code here, because the point is not to prove that the two versions +benchmark code here because the point is not to prove that the two versions are equivalent but to get a general sense of how these two implementations compare performance-wise. @@ -33,53 +33,12 @@ _zero-overhead_ in “Foundations of C++” (2012): > don’t use, you don’t pay for. And further: What you do use, you couldn’t hand > code any better. -As another example, the following code is taken from an audio decoder. The -decoding algorithm uses the linear prediction mathematical operation to -estimate future values based on a linear function of the previous samples. This -code uses an iterator chain to do some math on three variables in scope: a -`buffer` slice of data, an array of 12 `coefficients`, and an amount by which -to shift data in `qlp_shift`. We’ve declared the variables within this example -but not given them any values; although this code doesn’t have much meaning -outside of its context, it’s still a concise, real-world example of how Rust -translates high-level ideas to low-level code. - -```rust,ignore -let buffer: &mut [i32]; -let coefficients: [i64; 12]; -let qlp_shift: i16; - -for i in 12..buffer.len() { - let prediction = coefficients.iter() - .zip(&buffer[i - 12..i]) - .map(|(&c, &s)| c * s as i64) - .sum::() >> qlp_shift; - let delta = buffer[i]; - buffer[i] = prediction as i32 + delta; -} -``` - -To calculate the value of `prediction`, this code iterates through each of the -12 values in `coefficients` and uses the `zip` method to pair the coefficient -values with the previous 12 values in `buffer`. Then, for each pair, we -multiply the values together, sum all the results, and shift the bits in the -sum `qlp_shift` bits to the right. - -Calculations in applications like audio decoders often prioritize performance -most highly. Here, we’re creating an iterator, using two adapters, and then -consuming the value. What assembly code would this Rust code compile to? Well, -as of this writing, it compiles down to the same assembly you’d write by hand. -There’s no loop at all corresponding to the iteration over the values in -`coefficients`: Rust knows that there are 12 iterations, so it “unrolls” the -loop. _Unrolling_ is an optimization that removes the overhead of the loop -controlling code and instead generates repetitive code for each iteration of -the loop. - -All of the coefficients get stored in registers, which means accessing the -values is very fast. There are no bounds checks on the array access at runtime. -All these optimizations that Rust is able to apply make the resultant code -extremely efficient. Now that you know this, you can use iterators and closures -without fear! They make code seem like it’s higher level but don’t impose a -runtime performance penalty for doing so. +In many cases, Rust code using iterators compiles to the same assembly you’d +write by hand. Optimizations such as loop unrolling and eliminating bounds +checking on array access apply and make the resultant code extremely efficient. +Now that you know this, you can use iterators and closures without fear! They +make code seem like it’s higher level but don’t impose a runtime performance +penalty for doing so. ## Summary