C2Rust 编程语言转译器开源项目

我要开发同款
匿名用户2019年08月04日
99阅读
开发技术Rust
所属分类编译器、开发工具
授权协议BSD

作品详情

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

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

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

架构图如下:

转换示例:

C语言源码:

voidinsertion_sort(intconstn,int*constp){for(inti=1;i<n;i++){intconsttmp=p[i];intj=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)]externcratelibc;#[no_mangle]pubunsafeextern"C"fninsertion_sort(n:libc::c_int,p:*mutlibc::c_int){letmuti:libc::c_int=1i32;whilei<n{lettmp:libc::c_int=*p.offset(iasisize);letmutj:libc::c_int=i;whilej>0i32&&*p.offset((j-1i32)asisize)>tmp{*p.offset(jasisize)=*p.offset((j-1i32)asisize);j-=1}*p.offset(jasisize)=tmp;i+=1};}

 

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论