C2Rust 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
C2Rust 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
C2Rust 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 BSD
开发语言 Rust
操作系统 跨平台
软件类型 开源软件
所属分类 开发工具编译器
开源组织
地区 不详
投 递 者 terenceyhj
适用人群 未知
收录时间 2019-08-04

软件简介

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 指数为
超过 的项目

评论

点击加入讨论🔥(30) 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
30 评论
42 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部