本文是一篇关于将C语言代码翻译为Rust语言的用户研究的学术论文,由Ruishi Li、Bo Wang、Tianyu Li、Prateek Saxena和Ashish Kundu共同撰写,发表于2025年的NDSS(网络与分布式系统安全)研讨会。该研究的主要目的是探讨人类用户如何将现有的C语言代码翻译为Rust语言,并分析其翻译策略、安全性、性能以及功能正确性。
C语言程序中的内存安全问题仍然是当前软件漏洞的主要来源之一。尽管通过编译器插入运行时检查可以实现完全的内存安全,但这通常会导致较高的性能开销(≥50%),因此在生产环境中很少部署。部分内存安全防御措施虽然开销较低(<20%),但并不能完全消除内存安全漏洞。Rust作为一种新兴的主流编程语言,提供了低级别的内存控制,同时保证了完全的内存安全。Rust的设计理念与传统的C语言安全方言不同,它放弃了C语言中的许多不安全编程抽象,如未检查的原始指针和不安全的类型转换。
近年来,自动将C代码翻译为Rust的技术开始出现,主要分为两种方法:基于编译器分析的方法和基于大语言模型(LLM)的方法。然而,这两种方法的效果都非常有限,尤其是在处理小型程序时。因此,本文通过用户研究,探讨人类用户如何完成C到Rust的翻译任务,并分析其翻译策略。
研究选取了8个真实世界的C语言程序作为基准,要求参与研究的本科生在20天内将这些程序翻译为安全的Rust代码。参与者熟悉C语言和内存安全问题,但对Rust的了解较少。研究共收集了33名参与者的翻译结果,其中31个翻译能够编译并通过测试。
研究表明,将C代码翻译为Rust是值得的,因为用户翻译的Rust程序在性能和安全性之间取得了良好的平衡。尽管自动翻译工具目前效果有限,但用户翻译的策略为未来的自动翻译工具提供了有价值的参考。特别是,用户翻译中广泛使用的零成本抽象和消除不安全代码模式的做法,展示了Rust在内存安全方面的潜力。
研究还分析了现有自动翻译工具的局限性,并提出了改进建议。特别是,基于LLM的翻译工具虽然生成的代码更具可读性,但在处理长代码时仍面临挑战。未来的研究可以探索如何更好地分解C程序,以便LLM能够更有效地生成可编译的Rust代码。
本文通过用户研究揭示了人类用户在C到Rust翻译中的策略和挑战,展示了Rust在内存安全方面的潜力。尽管自动翻译工具目前效果有限,但用户翻译的策略为未来的工具开发提供了宝贵的参考。