美国国防部建议将C代码转换为Rust
内容提要
美国国防部计划开发名为TRACTOR的工具,将C和C++代码转换为Rust代码,以消除内存安全漏洞。DARPA希望通过机器学习技术实现自动转换C代码为Rust代码的目标,但仍面临技术挑战。该计划已公开发布,希望有更多参与者提交解决方案。
延伸解读
从呼吁到工具:政策思路的转变
过去几年,美国多个机构反复呼吁开发者放弃C/C++,转向Rust等内存安全语言,但实际迁移进展缓慢。DARPA的TRACTOR项目标志着策略转变:不再仅靠建议,而是试图用自动化工具直接解决遗留代码的转换难题。这反映出政策制定者意识到,仅靠呼吁难以撼动C语言五十多年的生态根基,必须降低迁移的技术门槛和成本。
技术难点:指针与未定义行为
TRACTOR面临的核心挑战在于C语言允许指针算术和未定义行为,而Rust严格禁止这些操作。DARPA项目经理指出,简单让LLM转换代码可能产生错误答案,且C代码中内存分配的生命周期分析本身就很复杂。如果原程序存在内存漏洞,静态分析可能无法正确推导生命周期,导致转换失败或错误传递。因此,工具不仅需要翻译语法,还需理解程序语义并保证安全性。
开发者质疑:转换还是重写?
开发者对TRACTOR的看法不一。有观点认为,如果工具能发现C代码中的内存错误,那直接修复C代码可能更简单;如果工具只是将错误原样转换,那转换就失去意义。此外,Rust与C的编程习惯差异大,自动生成的代码可能不符合惯用法,仍需大量手动调整。这些质疑表明,自动化转换工具的实际效果和性价比仍需验证。
现实路径:自动化与人工结合
尽管TRACTOR旨在实现高度自动化,但Prossimo项目执行董事指出,当前翻译工具仍需不少手动调整才能让结果正确并符合惯用法。这意味着短期内完全自动转换可能不现实,更可行的路径或许是工具辅助加人工审查。DARPA通过公开竞赛和LLM支持来推动创新,但项目成功与否取决于能否在保证质量的前提下大幅降低人工介入。
Q&A
美国国防部为什么要将C代码转换为Rust?
为了消除内存安全漏洞,提升代码的安全性和可靠性。
TRACTOR工具的主要功能是什么?
TRACTOR工具旨在自动将C和C++代码转换为Rust代码。
DARPA在实现C到Rust的转换时面临哪些技术挑战?
主要挑战包括如何提高自动转换的准确性和处理C语言特有的指针操作。
为什么内存安全漏洞在软件开发中如此普遍?
因为C语言允许直接操作内存,容易引入错误,且存在未定义行为的风险。
向内存安全语言过渡需要哪些投资和规划?
需要重大投资和多年的精心规划,包括人力和财力成本。
开发者对TRACTOR项目的看法如何?
开发者的看法不一,有人质疑转换工具的有效性和可行性。