3 minutes reading | Também disponível em 🇧🇷
Review of Programming Rust: Fast, Safe Systems Development
Book: Programming Rust: Fast, Safe Systems Development. Rating: ⭐️⭐️⭐️⭐️⭐️.
This is a great book for sure. I started reading it in 2017 but never find the time to read it. Now, thanks to having two babies at home, I have enough time to read while waiting for them to sleep. :)
There are many things I like about this book. The first is the comparisons with C and C++ since both authors are/were C/C++ developers. This kind of experience helps you understand how Rust is useful and what practical problems it’s actually solving. I always hear about the theory, but the practical examples are gold.
I love the final example where the authors build a wrapper around libgit2 using FFI. It shows how to create a crate that deals with a non-safe interface while building a safe interface for yourself.
The book is a complete and fluid reading for those wanting to understand how Rust works and what you can do by using it.
Here is my raw notes about the book:
- Rust infers float if no type was given. It defaults to f64 in case both (f32 and f64) are possible
std::f32::const
define constants forINFINITY
,NEG_INFINITY
,NAN
,MIN
,MAX
. The same for f64- While let pattern = expression
- Lifetimes for loops. Use ’name_of_lifetime before the loop, so you can use break and continue using this label
unwrap_or_else( function)
executes the function when there’s an error.- expect is the same as unwrap but let you define a message in case o fr the 9f a panic
- The only reasonable use of unwrap is when your function can’t fail. E.g. when yiu have a set of data defined but the function you’re using to convert returns a result
- if let = Err(err) is used to unpackage the err tha can be used inside the if block
- static is a variable created before your program starts. Const is just like C++, it fill be compiled in place to every usage of it
debug_assert()
anddebug_assert_eq()
may be used in common code and will not be added in the release- If you expect a test to panic, add
#[should_panic]
attribut to your test - Rangefull is the unit-struct for ..
- Use .. when you don’t care about the other fields of the struct in pattern matching
- If you implement the trait From and you have single argument constructor, you
gain
into
for free - By following Rust’s strict contract of how to use closures (move, clone, or borrowing),, you gain thread safety
- Fn trait is implemented by functions and closures. If you define a function and expects an fn only, you will only be able to receive functions, not closures.