授权协议: BSD
开发语言: Rust
操作系统: 跨平台
收录时间: 2019-08-04
提 交 者: terenceyhj

C2Rust工具能够将大多数C模块翻译成语义上等价的rust代码。这些模块将单独编译,以生成兼容的对象文件。支持C99标准。
在我们的工具翻译C源代码之前,使用clang对其进行分析和类型检查。

帮助您将符合C99的代码迁移到Rust。它提供:

  • C to Rust翻译器
  • Rust代码重构工具
  • 对照新的Rust代码并交叉检查C代码执行情况的工具

架构图如下:

转换示例:

C 语言源码:

void insertion_sort(int const n, int * const p) {

    for (int i = 1; i < n; i++) {
        int const tmp = p[i];
        int j = i;
        while (j > 0 && p[j-1] > tmp) {
                p[j] = p[j-1];
                j--;
        }
        p[j] = tmp;
    }
}

转换后的 Rust 代码:

#![allow(dead_code,
         mutable_transmutes,
         non_camel_case_types,
         non_snake_case,
         non_upper_case_globals,
         unused_mut)]
#![feature(libc)]
extern crate libc;
#[no_mangle]
pub unsafe extern "C" fn insertion_sort(n: libc::c_int, p: *mut libc::c_int) {
    let mut i: libc::c_int = 1i32;
    while i < n {
        let tmp: libc::c_int = *p.offset(i as isize);
        let mut j: libc::c_int = i;
        while j > 0i32 && *p.offset((j - 1i32) as isize) > tmp {
            *p.offset(j as isize) = *p.offset((j - 1i32) as isize);
            j -= 1
        }
        *p.offset(j as isize) = tmp;
        i += 1
    };
}

 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

C2Rust 的相关资讯

还没有任何资讯

C2Rust 的相关博客

【重磅】用Rust重写Linux内核模块体验

本文来自知乎 https://zhuanlan.zhihu.com/p/137077998 作者 Kevin Wang 最近,我用Rust重写了一个2W+行C代码的linux内核模块...

【Rust日报】 2020-07-03 Google的Android將使用Rust

將linux kernel程式碼轉換成rust的筆記 這裡主要使用 c2rust 來做轉換而非人工轉換 在clang 9.0的新功能asm gotos加進來後,能...

【Rust日报】 2019-09-10:博客文章- Futures并发

Rustup 1.19.0 发布 Rustup工作组很高兴地宣布发布Rustup 1.19.0。可以从通常的地方或通过运行rustup self update来获取更新它...

【Rust日报】 2019-08-23:ICFP 2019編程競賽 團隊使用Rust贏得第一

C2Rust 一個把C code轉換成 rust code的小程式,現在可以用cargo 下載安裝。 簡單的程式還可以,有用到動態指標動態載入的庫就...

C2Rust 的相关问答

还没有任何问答,马上提问

评论 (24)

加载中
如果有MFC2Rust就好了
03/30 12:10
回复
举报
感觉这个项目的方向错了
01/29 00:12
回复
举报
转换后的代码 可读性也太差了吧
01/28 23:56
回复
举报
rust,越弄越麻烦,宁愿用C
2019/08/19 19:17
回复
举报
有Java2C的话你必火
2019/08/19 17:58
回复
举报
那还要方舟干什么
01/29 10:05
回复
举报
有C++2RUST吗……
2019/08/19 13:25
回复
举报
表示不看好rust. 继续java.php.js
2019/08/19 05:25
回复
举报
rz
看完翻译后的代码,发现还不如写C来的方便
2019/08/18 16:16
回复
举报
翻译后的Rust代码没有C代码优雅
2019/08/19 09:44
回复
举报
我也这么觉得。看rust再看看c觉得清爽好多。。。
2019/08/22 23:27
回复
举报
rust的语法本来就令人眼花缭乱,现在翻译后的rust代码更混乱了,可读性太差
2019/08/18 16:08
回复
举报
与其这样写,还不如写个库来调用
2019/08/18 15:49
回复
举报
更多评论
24 评论
33 收藏
分享
返回顶部
顶部