【Rust日报】2022-09-27 cargo careful:为你的代码提供更多安全保证

【Rust日报】2022-09-26 Apache APISIX 热爱 Rust

Apache APISIX 热爱 Rust Apache APISIX建立在两个巨人的肩膀上: Nginx, 一个广泛使用的开源反向代理 OpenResty, 一个允许通过 LuaJIT 使用Lua编程语言编写 Nginx 脚本的平台 这让 APISIX 提供…

cargo careful:为你的代码提供更多安全保证

您是否知道标准库充满了用户永远看不到的有用检查?标准库中有很多断言,它们会做一些事情,比如检查 char::from_u32_unchecked 必须针对一个有效的 char、CStr::from_bytes_with_nul_unchecked 只能在没有内部 null 字节的情况下调用,copy 或者 copy_nonoverlapping 必须针对内存布局对齐的非 null 指针(非重叠)。但是,由 rustup 分发的常规标准库是在没有调试断言的情况下编译的,因此用户很难从这些额外检查中受益。

cargo careful 就是为了弥补这个差距,它在第一次调用时,会从源代码构建一个带有调试断言的标准库,然后使用该标准库运行您的程序或测试套件。

您可以通过 cargo install cargo-careful 快速安装,然后执行 cargo +nightly careful run/test 用于执行二进制 crate 或测试,并进行额外的调试检查。

需要注意的是,这自然会比常规调试或发布版本慢,但它比在 Miri 中执行程序要快得多,并且仍然有助于找到一些未定义的行为。当然,如果您想要更加彻底的检查,Miri 会是一个更好的选择,两者结合使用,体验更佳。

https://github.com/RalfJung/cargo-careful

Axum 风格的函数参数示例

作者使用 Axum 时候,思考了这样一件事:Rust 是一个静态编译的语言,并且没有函数重载和可选参数这类特性,但是 Axum 中,get 函数却可以接收不同类型的函数指针,这是为什么呢?

let app = Router::new()
.route("/users", get(get_users))
.route("/products", get(get_product));

async fn get_users(Query(params): Query<Params>) -> impl IntoResponse {
let users = /* ... */

Json(users)
}

async fn get_product(State(db): State<Db>, Json(payload): Json<Payload>) -> String {
let product = /* ... */

product.to_string()
}

作者创建了一个仓库,动手实践,详细解释了其中的奥秘。

值得一提的是,Axum 当时也参考了 bevy 的 query system 设计,感兴趣的小伙伴不妨来学习一下。

https://github.com/alexpusch/rust-magic-function-params

https://bevy-cheatbook.github.io/programming/queries.html

编译器优化的思考

Rust 编译器背后为我们做了很多优化,但是,如果让你来实现,你会如何下手呢?典型的思路可能是:

  1. 找到可以应用特定优化方法的场景

  2. 通过分析,找到这种场景

  3. 应用你的优化方法

如果将很多编译优化方法结合起来,编译器的性能就能提升一大截。但是,这也绝非易事,在一个场景下实现编译优化,所要考虑的因素和需要的信息,远比你想象的要多。

本文的作者就通过几个例子,解释了他对于编译优化背后的思考,相信你耐心看完,肯定有不少收获。

https://faultlore.com/blah/oops-that-was-important/

— From 日报小组 RustPlumber

社区学习交流平台订阅:

  • Rust.cc 论坛: 支持 rss

  • 微信公众号:Rust 语言中文社区

我做 B 级片”臀部”演员这些年

路在何方:除了大厂、大热行业和大梦想,想过一种自我驱动的小日子,年轻人的“林中小径”会有哪些,会通向哪里?这里提供一些略不常见的职业选择, ta 们讲述自己在做什么,为什么会做这个,以及选择这样做之后,生活会是什么样。餐馆服务员,芯片厂工人,屠宰场冷库库管,有…

Click to rate this post!
[Total: 4 Average: 1]

人已赞赏
Rust开发每日优选

【Rust日报】2022-09-26 Apache APISIX 热爱 Rust

2022-9-28 11:50:52

Dfinity小白百科每日优选

从ICP的经济模型出发,详解近一年ICP的供应关系

2022-9-28 11:53:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索