计算机编程从未如此简单。
最初,程序员用手编写程序,将符号写到方格纸上,然后将它们穿孔打卡,计算机才可以对其进行处理。如果有一个标记不准确,整个过程可能需要重做。
如今,程序员使用了一系列功能强大的工具,可自动完成大部分工作。但是如果出现一个愚蠢的 bug 仍然可能使整个软件崩溃,随着系统变得越来越复杂,跟踪这些 bug 变得越来越困难。
最近,英特尔科学家与麻省理工学院(MIT),以及佐治亚理工学院(Georgia Tech)的研究人员共同推出了一种新的机器编程(MP)系统——机器推断代码相似性(MISIM)。该系统是一种自动引擎,旨在通过研究代码的结构,并分析具有类似行为的其他代码的句法差异来学习某个软件计划执行的操作。
MISIM系统的性能要比当前最先进的系统高出40倍,可以看出从代码推荐到自动错误修复的应用前景。
论文地址:https://arxiv.org/pdf/2006.05265.pdf
随着异构计算的兴起,硬件和软件系统变得越来越复杂。这种复杂性,再加上缺乏能够在多种体系结构中以专家水平进行编程的程序员,使得人们对新开发方法的需求日益凸显。
多年来,自动代码生成一直是研究的热点。微软正在将基本的代码生成构建到其广泛使用的软件开发工具中。
Facebook 开发了一个名为 Aroma 的系统,该系统可以自动完成小程序,而 DeepMind 开发的神经网络可以提供比人类设计的更有效的简单算法版本。甚至 OpenAI 的 GPT-3 语言模型也可以从自然语言提示中生成简单的代码段。
机器编程是英特尔实验室和麻省理工学院在「The Three Pillars of Machine Programming」论文中提出的一个术语 ,旨在通过使用自动化工具来提高开发效率。
这些新兴机器编程工具中的一项关键技术是代码相似性,它能准确有效地自动化某些软件开发过程来满足这一需求。
然而,建立精确的代码相似性系统是一个尚未解决的问题。这些系统试图确定两个代码片段是否显示出相似的特征或旨在达到相似的目标。当仅学习源代码时,这是一项艰巨的任务。
因此, 研究人员提出了机器推断代码相似性(MISIM),这是一种全新的端到端代码相似性系统。MISIM 可以准确推断两段代码何时执行相似的计算,即使这两段代码使用不同的数据结构和算法。
英特尔实验室首席科学家兼机器编程研究总监 Justin Gottschlich 表示,「这是迈向更宏伟的机器编程愿景的重要一步。」
MISIM 与现有代码相似性系统之间的核心区别在于其新颖的上下文感知语义结构(CASS),其目的是了解代码的实际作用,可以帮助从代码语法中提升语义含义。
与其他现有方法不同,它可以将 CASS 配置为特定的上下文,从而使其可以捕获更高级别描述代码的信息。CASS 可以提供有关代码功能而非方法的更具体的见解。
此外,MISIM 无需使用编译器即可对代码进行评级,编译器将人类可读的源代码转换为计算机可执行的机器代码。
与现有系统相比,MISIM 还具有许多优势,包括能够在开发人员当前正在编写的不完整代码段上执行的能力,这是推荐系统或自动错误修复的重要实用特征。
MISIM系统总揽
MISIM 提供了基于神经的代码相似性评分算法,该算法可通过具有学习参数的各种神经网络体系结构来实现。
一旦将代码的结构集成到 CASS 中,神经网络系统就会根据其设计要执行的工作,为代码片段提供相似性评分。
换句话说,如果两段代码在结构上看起来有很大不同,但执行相同的功能,则神经网络会将它们评为大致相似。
研究人员最后将 MISIM 与三个最新的检测代码相似性系统进行了比较:
(i)code2vec
(ii)Neural Code Comprehension
(iii) Aroma
通过将这些原理整合到一个统一的系统中,研究人员发现MISIM能够比当前的最新系统更准确地识别相似的代码,最多可识别40倍。
尽管英特尔仍在扩展 MISIM 的功能集,但公司已将其从研究工作转移到了演示工作,目的是创建一个代码推荐引擎,以协助所有软件开发人员能够跨英特尔各种异构体系结构进行编程。
这种类型的系统将能够识别开发人员输入的简单算法背后的意图,并提供语义上相似但性能有所提高的候选代码。
Gottschlich 表示,「我想,如果有可能,大多数开发人员会很乐意让机器为他们查找并修复错误」。
这可以为雇主省去一些麻烦,更不用说帮助开发人员自己了。
根据剑桥大学 Judge 商学院发表的一项研究,程序员将50.1%的工作时间用于编程,而将一半的时间用于调试。估计每年的调试总费用为3120亿美元。可以看出,这需要消耗大量精力和财力。
英特尔机器编程实验室还与英特尔的软件部门合作,以了解如何将 MISIM 集成到他们的日常开发中。像 MISIM 这样的以AI为动力的代码推荐和审查工具有望大幅削减开发成本,同时使编码人员能够专注于更具创造性、更少重复性的任务。
Gottschlich 在一次采访时表示,「如果我们在机器编程方面取得成功,最终目标之一就是使所有人能够创建软件。」
领取专属 10元无门槛券
私享最新 技术干货