自动化程序合成与传统程序评估的局限
1. 自动化程序合成的影响
一旦认识到计算机程序的能力,就不难发现大规模自动化程序合成的潜在影响是深远的。自动合成的程序将提高软件的健壮性,进而提升许多其他技术的健壮性。可证明正确的程序将使软件可认证,而如今这只能在非常有限的规模和特定环境下实现。自动生成的软件生产成本低且无恶意软件,在运行时间、内存占用或功耗等非功能属性方面也可能表现出色。
这些好处还将超越人类目前编程的界限。自动化程序合成可以帮助解决那些目前在概念上过于复杂或经济上不可行的任务。一个特别有用的应用是在那些对人类来说困难且繁琐,但由于各种原因(如遗留问题、高效转换为机器语言等)仍在实际中使用的编程语言中进行合成。
近年来,程序合成在两个领域取得了显著进展,具有很大的潜力:
1.1 程序改进
由于从头合成程序具有挑战性,近年来人们对改进人类编写的程序,特别是改进其非功能属性(如运行时间、内存占用或功耗)的方法越来越感兴趣。关键优势在于,人类编写的参考程序确定了合成过程的目标。它可以用作测试生成器来构建程序合成任务,也可以作为任务规范的来源,通过形式化方法从其中推导出来。当前一种用法在测试供应有限的情况下尤为有价值。
非功能属性的改进在不同的抽象层面上进行:
- 机器语言层面 :与编译器设计和代码优化中研究的重写系统相关。例如,Schkufza 等人采用马尔可夫链蒙特卡罗技术,改进了 64 位 x86 处理器的机器代码程序的运行时间。参考程序是人类编写的机器代码或从高级语言编译而来的代码。使用 Metropolis - Hastings 算法从其中随机生成新的候选程序,
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



