< 返回版块

gensmusic 发表于 2023-08-14 18:47

超越 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()?;

github 地址

使用 Rust 来处理 contract

contract 是 illumos 中一个非常有趣的功能,可以用来管理进程。在本篇文章中,作者介绍了如何使用 Rust 来访问 contract 中的进程成员。

原文链接

--

From 日报小组 FBI小白

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页