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};}
评论