summaryrefslogtreecommitdiffstats
path: root/src/doc/book/listings/ch08-common-collections
diff options
context:
space:
mode:
Diffstat (limited to 'src/doc/book/listings/ch08-common-collections')
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs10
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs14
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt16
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs11
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs15
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs9
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs10
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs19
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs7
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt20
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs10
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs13
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs13
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs12
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs13
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs16
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs9
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs9
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs14
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt6
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs5
90 files changed, 669 insertions, 0 deletions
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs
new file mode 100644
index 000000000..45e45581e
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let v: Vec<i32> = Vec::new();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs
new file mode 100644
index 000000000..3b10a53e8
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![1, 2, 3];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs
new file mode 100644
index 000000000..147223f9a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = Vec::new();
+
+ v.push(5);
+ v.push(6);
+ v.push(7);
+ v.push(8);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs
new file mode 100644
index 000000000..fa4e090d5
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![1, 2, 3, 4, 5];
+
+ let third: &i32 = &v[2];
+ println!("The third element is {}", third);
+
+ let third: Option<&i32> = v.get(2);
+ match third {
+ Some(third) => println!("The third element is {}", third),
+ None => println!("There is no third element."),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs
new file mode 100644
index 000000000..783d9b110
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![1, 2, 3, 4, 5];
+
+ let does_not_exist = &v[100];
+ let does_not_exist = v.get(100);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt b/src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt
new file mode 100644
index 000000000..ab512a9e6
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling collections v0.1.0 (file:///projects/collections)
+error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
+ --> src/main.rs:6:5
+ |
+4 | let first = &v[0];
+ | - immutable borrow occurs here
+5 |
+6 | v.push(6);
+ | ^^^^^^^^^ mutable borrow occurs here
+7 |
+8 | println!("The first element is: {}", first);
+ | ----- immutable borrow later used here
+
+For more information about this error, try `rustc --explain E0502`.
+error: could not compile `collections` due to previous error
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs
new file mode 100644
index 000000000..1b42274a6
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = vec![1, 2, 3, 4, 5];
+
+ let first = &v[0];
+
+ v.push(6);
+
+ println!("The first element is: {}", first);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs
new file mode 100644
index 000000000..38b97784b
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![100, 32, 57];
+ for i in &v {
+ println!("{}", i);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs
new file mode 100644
index 000000000..c62ba21b4
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = vec![100, 32, 57];
+ for i in &mut v {
+ *i += 50;
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs
new file mode 100644
index 000000000..c2198883b
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs
@@ -0,0 +1,15 @@
+fn main() {
+ // ANCHOR: here
+ enum SpreadsheetCell {
+ Int(i32),
+ Float(f64),
+ Text(String),
+ }
+
+ let row = vec![
+ SpreadsheetCell::Int(3),
+ SpreadsheetCell::Text(String::from("blue")),
+ SpreadsheetCell::Float(10.12),
+ ];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs
new file mode 100644
index 000000000..abda2db66
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ {
+ let v = vec![1, 2, 3, 4];
+
+ // do stuff with v
+ } // <- v goes out of scope and is freed here
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs
new file mode 100644
index 000000000..4cf4c81c2
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::new();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs
new file mode 100644
index 000000000..d9e5e768a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let data = "initial contents";
+
+ let s = data.to_string();
+
+ // the method also works on a literal directly:
+ let s = "initial contents".to_string();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs
new file mode 100644
index 000000000..b81e37453
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let s = String::from("initial contents");
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs
new file mode 100644
index 000000000..f701fd578
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ // ANCHOR: here
+ let hello = String::from("السلام عليكم");
+ let hello = String::from("Dobrý den");
+ let hello = String::from("Hello");
+ let hello = String::from("שָׁלוֹם");
+ let hello = String::from("नमस्ते");
+ let hello = String::from("こんにちは");
+ let hello = String::from("안녕하세요");
+ let hello = String::from("你好");
+ let hello = String::from("Olá");
+ // ANCHOR: russian
+ let hello = String::from("Здравствуйте");
+ // ANCHOR_END: russian
+ // ANCHOR: spanish
+ let hello = String::from("Hola");
+ // ANCHOR_END: spanish
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs
new file mode 100644
index 000000000..7dec657d9
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("foo");
+ s.push_str("bar");
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs
new file mode 100644
index 000000000..8938dc143
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let mut s1 = String::from("foo");
+ let s2 = "bar";
+ s1.push_str(s2);
+ println!("s2 is {}", s2);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs
new file mode 100644
index 000000000..0a9e8cc0a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("lo");
+ s.push('l');
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs
new file mode 100644
index 000000000..93939a69f
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("Hello, ");
+ let s2 = String::from("world!");
+ let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt b/src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt
new file mode 100644
index 000000000..95577772e
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt
@@ -0,0 +1,20 @@
+$ cargo run
+ Compiling collections v0.1.0 (file:///projects/collections)
+error[E0277]: the type `String` cannot be indexed by `{integer}`
+ --> src/main.rs:3:13
+ |
+3 | let h = s1[0];
+ | ^^^^^ `String` cannot be indexed by `{integer}`
+ |
+ = help: the trait `Index<{integer}>` is not implemented for `String`
+ = help: the following other types implement trait `Index<Idx>`:
+ <String as Index<RangeFrom<usize>>>
+ <String as Index<RangeFull>>
+ <String as Index<RangeInclusive<usize>>>
+ <String as Index<RangeTo<usize>>>
+ <String as Index<RangeToInclusive<usize>>>
+ <String as Index<std::ops::Range<usize>>>
+ <str as Index<I>>
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `collections` due to previous error
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs
new file mode 100644
index 000000000..fc08e9cea
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("hello");
+ let h = s1[0];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs
new file mode 100644
index 000000000..54c201091
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs
new file mode 100644
index 000000000..07551549d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+
+ let team_name = String::from("Blue");
+ let score = scores.get(&team_name).copied().unwrap_or(0);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs
new file mode 100644
index 000000000..2b2a73f94
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let field_name = String::from("Favorite color");
+ let field_value = String::from("Blue");
+
+ let mut map = HashMap::new();
+ map.insert(field_name, field_value);
+ // field_name and field_value are invalid at this point, try using them and
+ // see what compiler error you get!
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs
new file mode 100644
index 000000000..e8684cf2b
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Blue"), 25);
+
+ println!("{:?}", scores);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs
new file mode 100644
index 000000000..3ad97b57a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+ scores.insert(String::from("Blue"), 10);
+
+ scores.entry(String::from("Yellow")).or_insert(50);
+ scores.entry(String::from("Blue")).or_insert(50);
+
+ println!("{:?}", scores);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs
new file mode 100644
index 000000000..f3f6aa166
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs
@@ -0,0 +1,16 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let text = "hello world wonderful world";
+
+ let mut map = HashMap::new();
+
+ for word in text.split_whitespace() {
+ let count = map.entry(word).or_insert(0);
+ *count += 1;
+ }
+
+ println!("{:?}", map);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs
new file mode 100644
index 000000000..4995650d1
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("tic");
+ let s2 = String::from("tac");
+ let s3 = String::from("toe");
+
+ let s = s1 + "-" + &s2 + "-" + &s3;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs
new file mode 100644
index 000000000..4a38e63d2
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("tic");
+ let s2 = String::from("tac");
+ let s3 = String::from("toe");
+
+ let s = format!("{}-{}-{}", s1, s2, s3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs
new file mode 100644
index 000000000..2e7dc02e6
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+
+ for (key, value) in &scores {
+ println!("{}: {}", key, value);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt
new file mode 100644
index 000000000..98d1f183a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling collections v0.1.0 (file:///projects/collections)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.43s
+ Running `target/debug/collections`
+thread 'main' panicked at 'byte index 1 is not a char boundary; it is inside 'З' (bytes 0..2) of `Здравствуйте`', library/core/src/str/mod.rs:127:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs
new file mode 100644
index 000000000..9283ff5bd
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let hello = "Здравствуйте";
+
+ let s = &hello[0..1];
+}