他们的研究论文题为“ Rust 何时能实现无所畏惧且零成本的并行?”,探究 Rust 是否实现了其宣称的为并行编程实现“无所畏惧且零成本的并发” 。
该研究涉及对从 C++ 移植到 Rust 的 14 个基准的分析,涵盖常规和不规则并行性。研究人员使用 Rayon 库进行并行构造,并评估了在 Rust 中表达并行性的简易性和安全性。
这篇经过深入研究的论文发现,尽管 Rust 在处理常规并行性方面表现出色,但在处理非常规并行性方面却举步维艰,这使得 rustacean 面临着与其他语言相同的挑战。
以下是该研究的一些主要发现:
- 常规并行性:Rust的类型系统擅长在编译时捕获具有常规数据访问模式(例如并行前缀和)的程序的并发错误。这使得并行编程在这些情况下“无所畏惧” 。
- 非常规并行:当任务对共享数据的访问模式非常规时(例如,同时修改哈希表中的元素),Rust 需要unsafe不安全的代码(有风险)或同步原始类型(开销和错误的可能性)。这让并行编程再次变得“可怕” 。
- 同步:虽然 Rust 通过要求同步来强制执行数据竞争,但它并不能消除其他同步错误,如死锁或活锁。程序员仍然需要谨慎对待此类情况。
- 性能。Rust的基准测试通常比 C++ 慢,但差距并不大。
- 无所畏惧:错误在编译时就被捕获。
- 舒适:运行时可捕获错误,并提供清晰的诊断。
- 害怕:错误可能无法被检测到,从而导致不确定的行为。(大多数语言包括Java等都存在)
小结
Rust特点是小而快,非常规并发是服务器后端常见的方式,Java等语言中对于“同时修改哈希表中的元素”提供ConcurrentMap等SDK内部处理,Java还有更多并发支持,因此非常适合后端服务多个大并发量的Web互联网场合,而Rust在后端可能有类似NodeJS那样,通过异步模式实现相对要求不严格并发处理,对于“同时修改哈希表中的元素”可委托给数据库#ACID锁 实现。
本周其他精彩Rust文摘
- Rust Types 团队在博客中发布了有关类型团队更新和路线图的内容。
- 使用 Rust 进行构建变得更加顺畅,AWS CodeArtifact 现在支持 Rust 包管理器 Cargo 。
- Rust Ukraine 2024 CFP现已开启,提交您的演讲并加入史诗般的开发者聚会。申请截止日期为 7 月 6 日 ⏳
- Rust 能撑过下一个十年吗?Tweede Golf 的 Hugo 提出了每个人都想知道的问题!
- Orhun Parmaksız 发布了git-cliff 2.4.0 。
- 卢卡·帕尔米耶里 (Luca Palmieri) 在与德鲁的一次采访中透露了有关 Pavex 和其他令人愉快的开发话题,这次采访比周五晚上的部署更为精彩。
- Uuid 包现在正确支持版本 7 计数器。
- 谁知道学习 Rust 可以游戏化?Jonathan Österberg 的Kartoffels让您通过游戏掌握 Rust 编程。
- Mahor Foruzesh 发布了reddish-shift - jonls/redshift 到 Rust 的移植版。
- David 撰写了一篇关于在 Rust 中实现 JSON 解析的教程。我们保证它一定非常好。
本周项目Rust推荐:
C2Rust 可帮助您将符合 C99 的代码迁移到 Rust。转换器(或转译器)c2rust transpile会生成与输入的 C 代码非常相似的不安全 Rust 代码。转换器的主要目标是保留功能;测试套件在转换后应继续通过。
C2Rust 提供的功能:
- C2Rust 将您的 C 代码转换为 Rust 代码,旨在保留功能。
- 翻译后的 Rust 代码设计为内存安全的,有助于防止崩溃和安全漏洞。
- C2Rust 分析您的 C 代码以了解其结构和功能。
- 虽然目前还没有完全实现,但 C2Rust 的目标是最终支持为不同平台翻译代码。目前,不支持翻译代码的交叉编译。
Reddish Shift
Redshift的移植版。借助C2Rust逐行翻译。将 jonls/redshift 移植到 Rust
Reddish Shift 会根据周围环境调整屏幕的色温。如果您晚上在屏幕前工作,这可能会减轻您的眼睛疼痛。
另外工具,适用于逆向工程师、程序员和凌晨 3 点工作时重视视网膜的人员的十六进制编辑器:
https://github.com/WerWolv/ImHex/