- Rust Programming Cookbook
- Claus Matzinger
- 414字
- 2021-06-24 12:27:50
How it works...
While unsafe is one way to enable easier solutions to sometimes tricky situations, this book (https://rust-unofficial.github.io/too-many-lists/index.html) describes the limitations of safe programming perfectly with something as simple as a linked list.
After setting up the project in Step 1, we are adding the first function in Step 2. Its purpose is similar to chunks() (https://doc.rust-lang.org/std/primitive.slice.html#method.chunks_mut), but instead of an iterator, we are returning the entire collection right away, which is OK as an example, but should be thought about when implementing it for production use. Our function splits a provided (mutable) slice into a parts number of chunks of equal size and returns mutable references to them. Since the input is also a mutable reference to the entire part of the memory, we will have parts + 1 number of mutable references to the same memory area; clearly, a violation of safe Rust! On top of that, this function allows going beyond the allocated memory with the ptr.offset() call (which does pointer arithmetic).
In the test created in Step 3, we show that it compiles and executes without any major problems. Step 4 provides another example for unsafe code: changing the data type without casting. The transmute (https://doc.rust-lang.org/std/mem/fn.transmute.html) function can easily change the data type of a variable with all the consequences that come with that. Had we changed the type to something else, such as u64, we would end up with a totally different result and read memory that does not belong to the program. In Step 5, we run the whole test suite.
unsafe Rust can be interesting to get that last bit of performance out of a data structure, do some magic bin-packing, or to implement Send and Sync (https://doc.rust-lang.org/std/mem/fn.transmute.html). Whatever you intend to do with unsafe, check out the nomicon (https://doc.rust-lang.org/nightly/nomicon/) to delve deeper into the depths.
Equipped with that knowledge, let's move on to the next recipe.
- Web Development with Django Cookbook
- Scratch真好玩:教小孩學編程
- Java性能權威指南(第2版)
- 網店設計看這本就夠了
- Getting Started with Python Data Analysis
- C#程序設計
- Scientific Computing with Scala
- Instant Nancy Web Development
- Python編程:從入門到實踐(第3版)
- 從0到1:HTML5 Canvas動畫開發
- Java Hibernate Cookbook
- 百萬在線:大型游戲服務端開發
- Flink入門與實戰
- Flask開發Web搜索引擎入門與實戰
- 輕松學Scratch 3.0 少兒編程(全彩)