计算机编程的复杂性正在逐渐降低。
最早,程序员依靠手工编写代码,将符号记录在方格纸上,经过打孔后,计算机才能进行处理。任何一个标记的错误都可能导致整个过程的重做。

现在,程序员借助一系列强大的工具,能够自动化大部分工作。然而,愚蠢的 bug 依然可能导致软件崩溃,随着系统复杂性的增加,追踪这些 bug 变得愈加困难。
最近,英特尔的科学家与麻省理工学院和佐治亚理工学院的研究人员联合推出了一种创新的机器编程系统——机器推断代码相似性(MISIM)。这一系统通过分析代码结构,并研究具有相似行为的其他代码之间的句法差异,旨在学习特定软件执行的操作。
MISIM 的性能比当前最先进的系统高出 40 倍,显示了从代码推荐到自动错误修复的广泛应用潜力。

随着异构计算的兴起,硬件与软件系统的复杂性日益增加。这种复杂性,加上缺乏能够在多种体系结构下以专家水平进行编程的开发者,使得对新开发方法的需求愈发紧迫。
自动代码生成一直是学术界的研究热点。微软正在将基本的代码生成功能融入其广泛使用的软件开发工具中。
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 在一次采访中表示:“如果我们在机器编程方面取得成功,最终目标之一就是让所有人都能创造软件。”
