mirror of
https://github.com/notohh/rustlings.git
synced 2024-11-29 08:44:16 -05:00
reordered smart pointer exercises
Switched rc and arc so rc comes first, since arc is, like the name implies, atomic rc. This gives the exercises a more logical progression. Moved all smart pointer exercises (box, rc, arc, cow) under threads into their own section. Threads are used in the smart pointer exercises, so they should be introduced first.
This commit is contained in:
parent
6cee997266
commit
cb79be921d
1 changed files with 62 additions and 60 deletions
122
info.toml
122
info.toml
|
@ -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/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 = "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 = "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 = "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.
|
||||||
|
"""
|
||||||
|
|
||||||
# MACROS
|
# MACROS
|
||||||
|
|
||||||
[[exercises]]
|
[[exercises]]
|
||||||
|
|
Loading…
Reference in a new issue