Facebook研究人员还开发了一种名为TransCoder AI的“神经编译器” 。它是一个可以在Java,Python和C ++等高级语言之间转换代码的系统。将现有的代码库迁移到更现代或更高效的语言需要大量的资源,包括财务和人力。从理论上讲,转编译器可以帮助消除从头重写代码所需的费用。
但是,由于源语言和目标语言都具有不同的语法,变量类型,标准库函数和平台API,因此在实践中很难构建它们。
TransCoder AI:适用于任何编程语言的代码转换器
Facebook的TransCoder AI通过无监督的学习方法来应对这些挑战。它可以在无人监督的情况下不受监督地运行,从而在没有标签的情况下在数据集中找到未检测到的模式,并且以“显着”的优势胜过基于规则的基准。
无论使用哪种编程语言,神经编译器都可以将代表相同指令的代码段映射到相同代码段。
关于Facebook TransCoder的最好之处在于,它可以轻松地推广到任何编程语言,并且不需要任何专业知识就可以将代码从一种编程语言转换为另一种编程语言。
Facebook研究人员在GitHub上超过280万个开源存储库中的公开代码上对TransCoder AI进行了培训,以专注于功能级别的代码转换。
为了评估TransCoder AI的性能,他们从GeeksforGeeks中选择了852个C ++,Java和Python并行函数。GeeksforGeeks是一个流行的平台,可教授问题解答并提供几种编程语言的解决方案。
他们使用上述两个数据,开发了一种称为“计算精度”的新指标,该指标可检查翻译后的函数是否生成与源语言中相同的输出和相同的输入。
结果
这是AI转换代码时获得的结果的准确性水平
C ++到Java:74.8%
从C ++到Python:67.2%
Java到C ++:91.6%
Java到Python:68.7%
从Python到Java:56.1%
从Python到C ++:57.8%
研究人员说,TransCoder AI已经展示出对每种语言(Java,Python和C ++)的语法及其数据结构的理解。它甚至可以设法在各种语言之间正确对齐库,同时进行一些小的修改,例如在输入中重命名变量。
尽管Transcoder并非十分完美,因为它无法在代码生成过程中考虑某些变量类型。但是,它的性能确实优于重写人类专家使用知识手动构建的规则的框架。