【Rust日报】2023-08-14 超越 NULL:Rust 的空指针防御和安全编程的艺术


超越 NULL:Rust 的空指针防御和安全编程的艺术

作者总结了 Rust 是如何解决“十亿美元错误”的。Rust 通过引入以下特性来解决这个问题:
  • 所有权和借用:Rust 引入了独特的所有权系统来跟踪数据的使用情况
  • Option类型和Result类型:Rust 强制我们使用其Option类型和Result类型来显式处理值的缺失。这意味着我们不能意外地使用空值,从而导致崩溃或其他错误。
  • 没有数据竞争:Rust 的借用检查器不仅可以防止空指针解引用,还可以消除数据竞争的可能性。数据竞争是导致错误的另一个常见原因,Rust 可以通过在编译时检查代码来避免这种情况。
  • 无畏的并发性:Rust 允许我们编写并发代码而无需担心错误。Rust 的所有权系统和借用规则确保多个线程不会相互干扰,从而避免了传统线程编程的陷阱。
  • 无损性能:Rust 的所有安全措施都不会影响性能。Rust 代码可以像任何其他语言一样高效地运行。
原文链接: https://medium.com/@ugochukwuchizaramoku/the-billion-dollar-mistake-and-how-rust-eliminates-75604c251e66

crates.io 上的crate 排名

这里列出了 截止到 2023-08-12 为止 crates.io 上 前 2000 使用量的 crates.
看看你喜欢的 crates 排名如何? 也可以作为crate 选择的参考.
原文链接: https://gist.github.com/paolobarbolini/9416630ead9478e3913223e0edf0fece

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()?;
github 地址: https://github.com/Marcono1234/struson

使用 Rust 来处理 contract

contract 是 illumos 中一个非常有趣的功能,可以用来管理进程。在本篇文章中,作者介绍了如何使用 Rust 来访问 contract 中的进程成员。
原文链接: https://lightsandshapes.com/posts/process-contracts-with-rust/
--
From 日报小组 FBI小白
社区学习交流平台订阅:
  • Rustcc论坛: 支持rss
  • 微信公众号:Rust语言中文社区

请使用浏览器的分享功能分享到微信等