Facebook 研究人员表示,他们已经开发出了一种名为 TransCoder AI 的“神经编译器” ,该系统可以将代码从一种高级编程语言(如 C ++、Java 和 Python)转换为另一种。
将现有的代码库迁移到更现代或更高效的语言需要大量的资源,包括财务和人力。譬如,澳大利亚联邦银行在 5 年的时间里花费了大约 7.5 亿澳元,将其平台从 COBOL 转换为 Java。而从理论上讲,转编译器可以则帮助消除从头重写代码所需的费用。但是,由于源语言和目标语言都具有不同的语法、变量类型、标准库函数和平台API,因此这个在实践中其实很难构建。
据介绍,Facebook 的 TransCoder AI 则采用了一种无监督的学习方法来应对这些挑战。它可以在无人监督的情况下不受监督地运行,从而在没有标签的情况下在数据集中找到未检测到的模式,比基于规则数据集的模型要高效得多。
无论使用哪种编程语言,神经编译器都可以将代表相同指令的代码段映射到相同代码段。一位共同作者写道:“ TransCoder 可以轻松地推广到任何编程语言,不需要任何专业知识就可以将代码从一种编程语言转换为另一种编程语言,并且在很大程度上优于商业解决方案。我们的结果表明,通过向解码器添加简单的约束以确保生成的函数在语法上是正确的,或者通过使用专用架构,可以轻松解决该模型所犯的许多错误。”
TransCoder AI 的准确性
Facebook 研究人员在超过 280 万个开源存储库中的公开代码上对 TransCoder AI 进行了训练,以专注于功能级别的代码转换。
为了评估 TransCoder AI 的性能,他们从 GeeksforGeeks 中选择了 852 个 C ++、Java 和 Python 并行函数。GeeksforGeeks是一个 在线平台,用于收集编写代码时的问题,并提供多种编程语言的解决方案。
利用以上两个数据,他们开发了一个名为 "计算精度(computational accuracy)"的新指标,用于检查翻译后的函数在输入相同的情况下是否会产生与源语言相同的输出。
结果
这是 AI 从以下位置转换代码时获得的结果的准确性水平:
- C++ to Java: 74.8%
- C++ to Python: 67.2%
- Java to C++: 91.6%
- Java to Python: 68.7%
- Python to Java: 56.1%
- Python to C++: 57.8%
研究人员表示,TransCoder AI 已经展示出对每种语言(Java、Python 和 C ++)的语法及其数据结构的理解。它甚至能够正确地调整每种语言的库,同时适应小的修改--例如,重命名输入中的一个变量。尽管 Transcoder 并非十分完美,无法在代码生成过程中考虑某些变量类型。 但是,它的性能确实优于已有的利用专家知识手动构建的框架。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Dart 引入了 Null safety
Dart 团队宣布,Dart 编程语言通过其新的 null safety 功能的技术预览达到了一个新的主要里程碑。该团队表示,此功能已经开发了一年多,是自Dart 2以来Dart语言最大的新增功能。Null safety 现已可在DartPad版本中进行试用,并将于 2020 年底投入生产。 团队成员 Filip Hracek 和 Michael Thomsen 在帖子中写道:“Null safety 可以帮助你避免一类通常难以发现的bug,并且作为额外的奖励,可以实现一系列的性能改进。” Dart 是一种 type-safe 语言,这意味着编译器可以保证变量的类型,但是类型安全性本身不能保证变量不为 null。Null error 在 Dart 中是常见的,并导致 Dart 代码中出现了许多问题。 Null safety 为开发人员保证他们的代码不包含 null 元素。且 Null safety 在编写代码时会提供静态错误,因此开发人员不必等到代码在运行时编译后即可发现错误。 Dart 团队设计此功能时秉承的三个核心原则为: 它必须在默认情况下是 non-nullable,以便开发人...
- 下一篇
Linus骚话喷Intel补丁 | 种族歧视影响Git“master”分支,Linus会不会再开喷?
回顾一周社区热门资讯 第【七十七】期:20200606-20200612 点击相应标题,跳转阅读全文 AI 换脸或受《民法典》人格权编严监管,我们该如何防范技术作恶? 随着 deepfake 的泛滥,多个国家已出台政策法规监管。此外,为防止技术作恶,人们正尝试用技术制衡技术,也有人在探讨如何为从事技术开发的人员增加一门“道德伦理课”,以追求行业自律…… Fanx 语言 3.2 发布,全面支持中文编程 不同于其他语言的 Unicode 支持,Fanx 是真正地全中文支持,不仅标识符能用汉字,关键字也能用汉字。 Chromium 与 Go 开发者提议替换“blacklist”与“slave”等词 现在甚至有人要将GitHub 中 master 主分支改为“main”表述,GitHub CEO 表示正在实施。而大家都知道 GitHub 中“master”的叫法来自 Linus 的 Git,网友表示坐等Linus 开喷。 又说骚话,Linus 再次严辞拒绝 Intel CPU 漏洞补丁 “我不想某个应用程序跑起来就像在说‘哦,我是一个特别的,漂亮的,如此娇嫩的花,我想刷新 L1D 上的每一个任...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果