Skip to main content
QUICK REVIEW

[论文解读] Fearless Concurrency? Understanding Concurrent Programming Safety in Real-World Rust Software

Zeming Yu, Linhai Song|arXiv (Cornell University)|Feb 5, 2019
Software Testing and Debugging Techniques参考文献 13被引用 11
一句话总结

本文首次对真实世界 Rust 应用中的并发编程进行了实证研究,分析了三个主要开源项目——Servo、TiKV 和 Rand 中的并发使用情况与缺陷。研究发现,由于原子操作的误用,安全 Rust 代码中仍可能发生数据竞争,这挑战了“无畏并发”的理念,并凸显了针对不安全代码和原子操作开发高级静态与动态分析工具的必要性。

ABSTRACT

Rust is a popular programming language in building various low-level software in recent years. It aims to provide safe concurrency when implementing multi-threaded software through a suite of compiler checking rules. Unfortunately, there is limited understanding of how the checking rules influence the safety of concurrent programming in Rust applications. In this paper, we perform a preliminary study on Rust's concurrency safety from two aspects: concurrency usage and concurrency bugs. Our study can provide better understanding on Rust's concurrency and can guide future researchers and practitioners in writing better, more reliable Rust software and in developing debugging and bug detection tools for Rust.

研究动机与目标

  • 理解 Rust 编译器检查如何影响真实世界的并发编程。
  • 调查生产环境中 Rust 软件中并发缺陷的普遍性和性质。
  • 评估 Rust 所承诺的“无畏并发”在实践中是否成立。
  • 为未来检测 Rust 中并发缺陷的工具开发提供依据。

提出的方法

  • 对三个大型生产级 Rust 应用(Servo(浏览器)、TiKV(键值存储)和 Rand(工具库))进行了静态与动态分析。
  • 收集并分析了源代码、提交历史和缺陷报告,以识别并发模式与缺陷。
  • 识别并逆向工程了实际的并发缺陷,特别是涉及原子操作和不安全代码的缺陷。
  • 使用形式化推理与编译器语义验证了安全代码中数据竞争的根本原因。
  • 评估了 Rust 的所有权与借用系统对并发原语使用模式和程序员行为的影响。
  • 基于观察到的模式与缺陷,提出了对语言设计与工具开发的启示。

实验结果

研究问题

  • RQ1真实世界的 Rust 应用在多大程度上依赖不安全代码实现并发,这如何影响安全性?
  • RQ2是否存在安全 Rust 代码中的数据竞争?如果存在,其根本原因是什么?
  • RQ3Rust 的所有权与借用规则在实践中如何影响并发原语的使用?
  • RQ4在真实系统中观察到的并发 Rust 编程的常见模式与反模式是什么?
  • RQ5鉴于 Rust 独特的安全模型,现有并发缺陷检测技术需要如何调整以适应 Rust?

主要发现

  • 尽管 Rust 拥有强大的类型系统和编译时所有权检查,数据竞争仍会在安全 Rust 代码中发生,主要原因是原子操作的错误使用。
  • 本研究在 Rand 库中发现了一个真实存在的数据竞争,其根源是使用原子变量对共享状态进行非原子更新,该问题后来通过使用 Once 原语修复。
  • Rust 编译器检查限制了某些编程模式,导致开发人员采用替代方案,如使用 Once 或不安全代码以实现期望的并发语义。
  • 不安全代码仍是数据竞争的主要来源,但安全代码中的原子操作也存在此类问题,表明静态分析必须同时覆盖两者。
  • 对“无畏并发”的信念被高估了——开发人员不能仅依赖编译器来防止所有并发缺陷。
  • 未来针对 Rust 的工具应聚焦于检测不安全代码中的竞争条件,以及安全代码中对原子操作的误用。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。