- 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.
- Learning Linux Binary Analysis
- Android 7編程入門經典:使用Android Studio 2(第4版)
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- 網店設計看這本就夠了
- 算法訓練營:提高篇(全彩版)
- Instant Ext.NET Application Development
- Mastering Unity 2D Game Development(Second Edition)
- Unity 2018 Shaders and Effects Cookbook
- JavaScript腳本特效編程給力起飛
- Hands-On JavaScript for Python Developers
- Flink技術內幕:架構設計與實現原理
- jQuery從入門到精通(微課精編版)
- Mastering Embedded Linux Programming
- Android應用程序設計
- MySQL數據庫教程(視頻指導版)