已经进行了许多尝试以一种编程语言编写的代码转换为另一种编程语言,并且有许多类型的商业工具。使用的主要目的是确保兼容性,例如,存在将用FORTRAN,BASIC或Python 2编写的代码转换为C ++或Python 3并进行集成的用例。
到目前为止,已使用的方法是使用语法树对其进行结构化,然后通过应用熟悉这两种编程语言的专家制定的规则来对其进行转换。该方法有时效果不佳,即使转换成功,结果代码质量也通常很低。
如果您考虑自然语言翻译的领域,基于神经网络模型的翻译员的表现要优于基于规则的翻译员。但是,通常需要大量的数据,并将原始语言映射到目标语言表示形式,并且很难获得用于编程语言的此类数据。在这项研究中,完全引入了无监督学习来解决这种数据短缺现象,尤其是应用了在自然语言模型中广泛使用的屏蔽语言模型预训练。
以下是Facebook TransCoder的github存储库和论文的链接,该论文在Java,C ++和Python之间进行翻译(翻译)。还包括预训练的模型和测试数据,因此您可以立即对其进行测试。根据本文的测试结果,尽管不受监督,但出于相同目的,它已经超过了商业程序的性能。
facebookresearch / TransCoder
TransCoder研究项目的公开发布https://arxiv.org/pdf/2006.03511.pdf – facebookresearch / TransCoder