美国国防部建议将C代码转换为Rust——而且是用AI

为了加快向内存安全编程语言的过渡,美国国防部高级研究计划局(DARPA)正在推动程序代码转换工具 TRACTOR 的开发。

TRACTOR 是 TRanslating All C TO Rust 的缩写,该项目旨在开发机器学习工具,自动将旧 C 代码转换为 Rust 代码。

DARPA 表示希望能够通过 AI 模型推动编程语言的转换,从而使软件更加安全。

TRACTOR 的 DARPA 项目经理 Dan Wallach 在一份声明中表示:

“你可以访问任何一个 LLM 网站,开始与其中一个 AI 聊天机器人聊天,你只需要说 ' 这里有一些 C 代码,请把它翻译成安全的惯用 Rust 代码 ',然后剪切、粘贴,就会有结果,而且通常效果很好...... 

研究的挑战在于大幅提高从 C 到 Rust 的自动转换能力,特别是对于最相关的程序构造。”

e84898b86cbd63c178425bfd04061ada.png

过去几年来,包括谷歌和微软在内的科技巨头一直在宣传内存安全漏洞带来的问题,并推广使用 C 和 C++ 以外不需要手动内存管理的语言

这些消息也引起了拥有大量遗留代码的美国政府公共部门的注意,并促使白宫和美国网络安全和基础设施安全局(CISA)鼓励使用内存安全编程语言 -- 主要是 Rust,还有 C#、Go、Java、Python 和 Swift。

尽管有 C/C++ 开发人员反驳说,只要正确遵守 ISO 标准并认真应用测试工具,就可以取得类似的结果。

但 DARPA 最新的表态指出,经过二十多年的努力,解决 C 和 C++ 的内存安全问题后,软件工程界已经达成共识;国家网络总监办公室呼吁采取更多措施,使软件更加安全,"仅仅依靠错误查找工具是不够的"。

Wallach 向 The Register 表示,TRACTOR 项目的目标是实现高度自动化,因此需要克服一些棘手的技术挑战。

“例如,当你要求 LLM 翻译代码时,LLM 可以给出出人意料的好答案,但它们也会幻化出错误的答案。另一个挑战是,C 语言允许代码使用指针(包括算术),而 Rust 禁止使用指针。要弥合这一差距,需要的不仅仅是从 C 到 Rust 的转换。”

当被问及 DARPA 是否考虑过转换任何特定的代码库时。Wallach 则表示没有任何具体的计划,但 Linux 内核是明确不在范围内的,“因为它们有 Rust 无法解决的技术问题”。 


Reference

https://www.theregister.com/2024/08/03/darpa_c_to_rust/

活动推荐

39f394c5c82243febc1f4f3403dfa48a.png

1309acdaceb342b95e9af2dae998664f.png

END

热门文章

“不可变”发行版Vanilla OS 2发布稳定版:彻底重写、改变使用Linux的方式

前端又叠buff!拥有近4万star的超级HTML增强工具:HTMX

瑞士进入next level——要求所有政府软件开源

VirtualBox重大更新:采用现代化UI、更换Logo

我用十条优化措施,将Redis费用降本46万/月

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是将以上代码转换Rust 的写法: ```rust use std::error::Error; use std::fs::File; use std::io::copy; use std::path::Path; use std::sync::{Arc, Mutex}; use reqwest; struct Downloader { file_metadata: common::FileMetadata, slice_seq: common::SliceSeq, wait_goroutine: Arc<Mutex<()>>, download_dir: String, retry_channel: std::sync::mpsc::Sender<i32>, max_gt_channel: std::sync::mpsc::Sender<()>, start_time: i64, } impl Downloader { fn download_file(&self, filename: &str) -> Result<(), Box<dyn Error>> { if !Path::new(&self.download_dir).is_dir() { println!("指定下载路径:{} 不存在", self.download_dir); return Err("指定下载路径不存在".into()); } let target_url = format!("{}download?filename={}", common::BaseUrl, filename); let response = reqwest::blocking::get(&target_url)?; let file_path = Path::new(&self.download_dir).join(filename); let mut file = File::create(file_path)?; copy(&mut response, &mut file)?; println!("{} 文件下载成功,保存路径:{:?}", filename, file_path); Ok(()) } } ``` 上述代码中,我们使用了 `reqwest` 库来发送 HTTP 请求。`Downloader` 结构体中的字段类型和命名也有所调整,以符合 Rust 的规范。`download_file` 方法的参数使用了 `&str` 类型,返回值使用了 `Result<(), Box<dyn Error>>` 类型,用来处理可能发生的错误。函数体内的错误处理也使用了 `?` 运算符,以简化错误传播的过程。最后,将打印日志的部分修改为使用 `println!` 宏来输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值