@ -809,7 +809,7 @@ If you use a lifetime annotation in a struct's fields, where else does it need t
[ [ exercises ] ]
[ [ exercises ] ]
name = "iterators1"
name = "iterators1"
path = "exercises/ standard_library_type s/iterators1.rs"
path = "exercises/ iterator s/iterators1.rs"
mode = "compile"
mode = "compile"
hint = "" "
hint = "" "
Step 1 :
Step 1 :
@ -826,7 +826,7 @@ https://doc.rust-lang.org/std/iter/trait.Iterator.html for some ideas.
[ [ exercises ] ]
[ [ exercises ] ]
name = "iterators2"
name = "iterators2"
path = "exercises/ standard_library_type s/iterators2.rs"
path = "exercises/ iterator s/iterators2.rs"
mode = "test"
mode = "test"
hint = "" "
hint = "" "
Step 1
Step 1
@ -847,7 +847,7 @@ and very general. Rust just needs to know the desired type."""
[ [ exercises ] ]
[ [ exercises ] ]
name = "iterators3"
name = "iterators3"
path = "exercises/ standard_library_type s/iterators3.rs"
path = "exercises/ iterator s/iterators3.rs"
mode = "test"
mode = "test"
hint = "" "
hint = "" "
The divide function needs to return the correct error when even division is not
The divide function needs to return the correct error when even division is not
@ -866,7 +866,7 @@ can make the solution to this exercise infinitely easier."""
[ [ exercises ] ]
[ [ exercises ] ]
name = "iterators4"
name = "iterators4"
path = "exercises/ standard_library_type s/iterators4.rs"
path = "exercises/ iterator s/iterators4.rs"
mode = "test"
mode = "test"
hint = "" "
hint = "" "
In an imperative language , you might write a for loop that updates
In an imperative language , you might write a for loop that updates
@ -878,7 +878,7 @@ Hint 2: Check out the `fold` and `rfold` methods!"""
[ [ exercises ] ]
[ [ exercises ] ]
name = "iterators5"
name = "iterators5"
path = "exercises/ standard_library_type s/iterators5.rs"
path = "exercises/ iterator s/iterators5.rs"
mode = "test"
mode = "test"
hint = "" "
hint = "" "
The documentation for the std : : iter : : Iterator trait contains numerous methods
The documentation for the std : : iter : : Iterator trait contains numerous methods
@ -895,66 +895,6 @@ The fold method can be useful in the count_collection_iterator function.
For a further challenge , consult the documentation for Iterator to find
For a further challenge , consult the documentation for Iterator to find
a different method that could make your code more compact than using fold . "" "
a different method that could make your code more compact than using fold . "" "
[ [ exercises ] ]
name = "box1"
path = "exercises/standard_library_types/box1.rs"
mode = "test"
hint = "" "
Step 1
The compiler ' s message should help : since we cannot store the value of the actual type
when working with recursive types , we need to store a reference ( pointer ) to its value .
We should , therefore , place our ` List ` inside a ` Box ` . More details in the book here :
https : / / doc . rust-lang . org / book / ch15-01-box . html #enabling-recursive-types-with-boxes
Step 2
Creating an empty list should be fairly straightforward ( hint : peek at the assertions ) .
For a non-empty list keep in mind that we want to use our Cons "list builder" .
Although the current list is one of integers ( i32 ) , feel free to change the definition
and try other types !
"" "
[ [ exercises ] ]
name = "arc1"
path = "exercises/standard_library_types/arc1.rs"
mode = "compile"
hint = "" "
Make ` shared_numbers ` be an ` Arc ` from the numbers vector . Then , in order
to avoid creating a copy of ` numbers ` , you ' ll need to create ` child_numbers `
inside the loop but still in the main thread .
` child_numbers ` should be a clone of the Arc of the numbers instead of a
thread-local copy of the numbers .
This is a simple exercise if you understand the underlying concepts , but if this
is too much of a struggle , consider reading through all of Chapter 16 in the book :
https : / / doc . rust-lang . org / stable / book / ch16-00-concurrency . html
"" "
[ [ exercises ] ]
name = "rc1"
path = "exercises/standard_library_types/rc1.rs"
mode = "compile"
hint = "" "
This is a straightforward exercise to use the Rc < T > type . Each Planet has
ownership of the Sun , and uses Rc : : clone ( ) to increment the reference count of the Sun .
After using drop ( ) to move the Planets out of scope individually , the reference count goes down .
In the end the sun only has one reference again , to itself . See more at :
https : / / doc . rust-lang . org / book / ch15-04-rc . html
* Unfortunately Pluto is no longer considered a planet : (
"" "
[ [ exercises ] ]
name = "cow1"
path = "exercises/standard_library_types/cow1.rs"
mode = "compile"
hint = "" "
Since the vector is already owned , the ` Cow ` type doesn ' t need to clone it .
Checkout https : / / doc . rust-lang . org / std / borrow / enum . Cow . html for documentation
on the ` Cow ` type .
"" "
# THREADS
# THREADS
[ [ exercises ] ]
[ [ exercises ] ]
@ -1016,6 +956,68 @@ of the original sending end.
See https : / / doc . rust-lang . org / book / ch16-02-message-passing . html for more info .
See https : / / doc . rust-lang . org / book / ch16-02-message-passing . html for more info .
"" "
"" "
# SMART POINTERS
[ [ exercises ] ]
name = "box1"
path = "exercises/smart_pointers/box1.rs"
mode = "test"
hint = "" "
Step 1
The compiler ' s message should help : since we cannot store the value of the actual type
when working with recursive types , we need to store a reference ( pointer ) to its value .
We should , therefore , place our ` List ` inside a ` Box ` . More details in the book here :
https : / / doc . rust-lang . org / book / ch15-01-box . html #enabling-recursive-types-with-boxes
Step 2
Creating an empty list should be fairly straightforward ( hint : peek at the assertions ) .
For a non-empty list keep in mind that we want to use our Cons "list builder" .
Although the current list is one of integers ( i32 ) , feel free to change the definition
and try other types !
"" "
[ [ exercises ] ]
name = "rc1"
path = "exercises/smart_pointers/rc1.rs"
mode = "compile"
hint = "" "
This is a straightforward exercise to use the Rc < T > type . Each Planet has
ownership of the Sun , and uses Rc : : clone ( ) to increment the reference count of the Sun .
After using drop ( ) to move the Planets out of scope individually , the reference count goes down .
In the end the sun only has one reference again , to itself . See more at :
https : / / doc . rust-lang . org / book / ch15-04-rc . html
* Unfortunately Pluto is no longer considered a planet : (
"" "
[ [ exercises ] ]
name = "arc1"
path = "exercises/smart_pointers/arc1.rs"
mode = "compile"
hint = "" "
Make ` shared_numbers ` be an ` Arc ` from the numbers vector . Then , in order
to avoid creating a copy of ` numbers ` , you ' ll need to create ` child_numbers `
inside the loop but still in the main thread .
` child_numbers ` should be a clone of the Arc of the numbers instead of a
thread-local copy of the numbers .
This is a simple exercise if you understand the underlying concepts , but if this
is too much of a struggle , consider reading through all of Chapter 16 in the book :
https : / / doc . rust-lang . org / stable / book / ch16-00-concurrency . html
"" "
[ [ exercises ] ]
name = "cow1"
path = "exercises/smart_pointers/cow1.rs"
mode = "compile"
hint = "" "
Since the vector is already owned , the ` Cow ` type doesn ' t need to clone it .
Checkout https : / / doc . rust-lang . org / std / borrow / enum . Cow . html for documentation
on the ` Cow ` type .
"" "
# MACROS
# MACROS
[ [ exercises ] ]
[ [ exercises ] ]