C和Rust的相对性能
「谎话跑得飞快,真相在后面蹒跚而行(falsehood flies, and the truth comes limping after it)」
作者用这句话来描述基准测试,原因有二:
- 难以量化系统的性能
- 即使获得了正确的结果,实际上也是在系统上下文是正确的
所以作者此文并不是另一个基准测试。
测试结果简要概括:
CPU L1 缓存命中率 : Rust 96.9%, C 77.9%, L2缓存Rust表现也比较稳定,但C就不行了
作者又进一步探索了,到底是Rust语言的优势,还是数据结构的优势?
结论:
- Rust的基础数据结构表现非常好,测试结果的差异大部分是数据结构的差异。
- 但因为Rust的所有权机制,迫使开发者不得不仔细优化这些数据结构的实现
Rust是强大的抽象又不损失性能,这并不意味着Rust总是能胜过C,但是你可以通过这篇文章,对Rust有一个正确的看待了。
[延伸阅读 ](Rust中BTreeMap实现机制 http://cglab.ca/~abeinges/blah/rust-btree-case/)
书籍预告: Programming WebAssembly with Rust
该文作者准备和https://pragprog.com/合作,正在写一本书《Programming WebAssembly with Rust》。
目前进度已完成 2/3,可以关注下
Tower Web 0.3 发布
支持async/await和 Handlebars模板渲染
struct MyResource;
impl_web! {
impl MyResource {
#[get("/")]
async fn index(&self) -> String {
let data = await!(load_data());
format!("Data = {}", data)
}
}
}
Tower Web当然还要准备和Warp合并,但在合并之前,作者希望达到一个完成度比较高的抽象。
「专业提示」在使用cargo fmt/rustfmt的时候请使用rustfmt.toml 文件
这样方便与别人协作,直接使用你的配置。即便你使用的是rustfmt默认的配置,也需要放一个空的rustfmt.toml文件,它表示你是希望跟你协作的人也使用rustfmt。
大家怎么看? 我觉得有道理。
评论区
写评论还没有评论