超越 NULL:Rust 的空指针防御和安全编程的艺术
作者总结了 Rust 是如何解决“十亿美元错误”的。Rust 通过引入以下特性来解决这个问题:
- 所有权和借用:Rust 引入了独特的所有权系统来跟踪数据的使用情况
- Option类型和Result类型:Rust 强制我们使用其Option类型和Result类型来显式处理值的缺失。这意味着我们不能意外地使用空值,从而导致崩溃或其他错误。
- 没有数据竞争:Rust 的借用检查器不仅可以防止空指针解引用,还可以消除数据竞争的可能性。数据竞争是导致错误的另一个常见原因,Rust 可以通过在编译时检查代码来避免这种情况。
- 无畏的并发性:Rust 允许我们编写并发代码而无需担心错误。Rust 的所有权系统和借用规则确保多个线程不会相互干扰,从而避免了传统线程编程的陷阱。
- 无损性能:Rust 的所有安全措施都不会影响性能。Rust 代码可以像任何其他语言一样高效地运行。
crates.io 上的crate 排名
这里列出了 截止到 2023-08-12 为止 crates.io 上 前 2000 使用量的 crates.
看看你喜欢的 crates 排名如何? 也可以作为crate 选择的参考.
Struson: 流式 JSON 读写库
Struson 是遵循 RFC 8259 的流式 JSON reader和 writer.
Struson 的主要目的是允许以内存高效的方式写入 JSON 文档,而无需在内存中存储完整的 JSON 文档结构.
不过目前还在试验阶段,一些地方的性能可能还没那么好.
读取的例子:
use struson::reader::*;
let json = r#"{"a": [1, true]}"#;
let mut json_reader = JsonStreamReader::new(json.as_bytes());
json_reader.begin_object()?;
assert_eq!("a", json_reader.next_name()?);
json_reader.begin_array()?;
assert_eq!(1_u32, json_reader.next_number()??);
assert_eq!(true, json_reader.next_bool()?);
json_reader.end_array()?;
json_reader.end_object()?;
// Ensures that there is no trailing data
json_reader.consume_trailing_whitespace()?;
使用 Rust 来处理 contract
contract 是 illumos 中一个非常有趣的功能,可以用来管理进程。在本篇文章中,作者介绍了如何使用 Rust 来访问 contract 中的进程成员。
--
From 日报小组 FBI小白
社区学习交流平台订阅:
1
共 0 条评论, 1 页
评论区
写评论还没有评论