您当前的位置:首页 > 指南 > 正文

系统进行必要的修改 将代码从一个程序移植到另一个程

导读: 麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员开发了一种新系统,允许程序员将代码从一个程序移植到另一个程序中。程序员可以...

麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员开发了一种新系统,允许程序员将代码从一个程序移植到另一个程序中。程序员可以从一个程序中选择代码,在第二个程序中选择插入点,系统将自动进行必要的修改 - 例如更改变量名称 - 以将代码集成到新的上下文中。

至关重要的是,该系统能够在捐赠者和接受者计划使用的“数据表示”之间进行转换。例如,图像处理程序需要能够处理各种格式的文件,例如jpeg,tiff或png。但在内部,它将使用单一标准化方案代表所有此类图像。但是,不同的程序可能使用不同的内部方案。CSAIL研究人员的系统自动将捐赠者计划的方案映射到接收者的方案,以无缝地导入代码。

研究人员在计算机协会软件工程基础研讨会上介绍了名为CodeCarbonCopy的新系统。

“CodeCarbonCopy使软件工程成为可能之一:自动代码重用,”CSAIL的研究科学家,该论文的第一作者Stelios Sidiroglou-Douskos说。“这是让人类远离开发周期的又一步。我们的观点是,或许我们已经编写了大部分我们需要的软件 - 我们现在只需要重复使用它。”

研究人员进行了8次实验,他们使用CodeCarbonCopy在六种流行的开源图像处理程序之间移植代码。八个移植中的七个成功,接收者程序正确执行新功能。

加入Sidiroglou-Douskos的是电气工程和计算机科学教授Martin Rinard ; Fan Long,麻省理工学院电气工程和计算机科学专业的研究生; 和Eric Lahtinen以及Anthony Eden,他们在麻省理工学院完成合同时是合同工程师。

经过必要的修正

使用CodeCarbonCopy,将代码从一个程序移植到另一个程序的第一步是为它们提供相同的输入文件。然后系统比较两个程序如何处理文件。

例如,如果捐赠者程序对特定数据片段执行一系列操作并将结果加载到名为“mem_clip-> width”的变量中,并且接收者对同一条数据执行相同的操作并加载将结果导入名为“picture.width”的变量,系统将推断变量在各自的程序中扮演相同的角色。

一旦确定了变量之间的对应关系,CodeCarbonCopy就会将它们呈现给用户。它还提供了捐赠者中无法在接收者中找到匹配的所有变量,以及这些变量的初始定义。通常,这些变量在捐赠者中扮演一些与接受者无关的角色。用户可以将这些变量标记为不必要,CodeCarbonCopy将自动删除从移植代码中使用它们的任何操作。

新命令

为了将一个程序中的数据表示映射到另一个程序的数据表示,CodeCarbonCopy查看两个程序存储在内存中的精确值。例如,数字图像中的每个像素都由三种颜色值控制:红色,绿色和蓝色。但是,有些程序按红色,绿色,蓝色的顺序存储这些值的三元组,而其他程序则按蓝色,绿色,红色的顺序存储它们。

如果CodeCarbonCopy发现一个程序存储的值与另一个程序存储的值之间存在系统关系,则会生成一组用于在表示之间进行转换的操作。

CodeCarbonCopy适用于文件格式,例如图像,其数据是严格组织的,以及程序(如图像处理器),它们将数据表示存储在数组中,这些数据表示基本上是相同大小的内存单元行。在正在进行的工作中,研究人员正在寻求推广他们的文件格式方法,允许更灵活的数据组织和使用除数组之外的数据结构的程序,例如树或链表。

“一般来说,代码引用是软件中许多问题的来源,”康奈尔大学与以色列理工学院联合学术合作的康奈尔科技公司计算机科学教授维塔利·施马蒂科夫说。“两个漏洞和安全漏洞 - 当一个地方有功能时,很多都会发生,有人试图在另一个地方剪切或粘贴或重新实现这个功能。他们犯了一个小错误,这就是事情的破坏。所以拥有将代码从一个地方移动到另一个地方的自动化方式将是一个巨大的,巨大的交易,这是迈向它的非常坚实的一步。“

“认识到对他们引用的功能不重要的不相关代码,这是另一项重要的技术创新,”Shmatikov补充道。“对于许多以前的方法来说,这就是一个障碍 - 你知道正确的代码就在那里,但它与许多与你想要做的事情无关的代码混在一起。所以能够将其分开是一项相当重要的技术贡献。“


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 正宗马芬杯蛋糕的做法 马芬纸杯蛋糕的做法

下一篇: 一斤等于多少克? 一斤等于多少克



推荐阅读