最近学编程语言不提Rust都不好意思和别人打招呼了,可是我们这些只会C语言的老程序员怎么办呢?别怕,今天的论文推荐给你介绍一篇将C代码自动化翻译成Rust代码的论文,来自SPLASH 2021 (OOPSLA)
本文一开始并没有关注怎么去开发一个新的C语言-Rust语言翻译系统,而是调查了当前工业界和学术界在实现C语言-Rust语言翻译这一目标取得的已有成果,并对存在的问题进行分析。其中作者特别关注了c2rust
这个工具( https://c2rust.com ),并调查了该自动化翻译工具在翻译过程中可能会引入unsafety的问题
之后,作者才相应地提出了相关技术,通过hook Rust编译器,提取更多的信息,将一些翻译后的存在unsafety状态的代码进行重写,消除其中的不安全内容。
作者首先建立了一个C代码的语料库(corpus),其中部分是c2rust
工具手册中已经提到的。
然后,作者也简单介绍了一下Rust语言里面的一个特性——允许unsafe code的存在,具体是由具备下列特征的代码引入的:
作者对自己的语料库中导致unsafe code的因素进行了统计分析,发现其中最容易引起unsafety的是raw pointer dereference这一特征
接下去,作者定量分析了如果要减少翻译后的代码中的unsafe function,主要应该考虑哪几个方面。分析结果表明,要去除一半以上的unsafe function,只需要想办法处理最容易引入unsafety状态的四类特征(raw pointer dereference, memory allocation, extern calls, access to globals)
作者在第三章介绍了他们的代码重写技术,针对一个c2rust
翻译得到的结果(如下图所示),经过一系列处理后得到了更为安全的代码(具体的细节,小编才疏学浅,请熟悉rust的读者不吝留言评论啊)
作者评估了他们提出的技术的优势,可以从下表中看到,他们的重写技术能够消除很大比例的unsafe functions
论文页面:
https://dl.acm.org/doi/10.1145/3485498
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 学术论文推荐 2021-12-13 Translating C to safer Rust