The End of History? Using a Proof Assistant to Replace Language Design with Library Design

The End of History? Using a Proof Assistant to Replace Language Design with Library Design
复制标题

历史的终结?

DOI:
10.4230/lipics.snapl.2017.3
复制
发表时间:
2017
期刊:
影响因子:
3.5
通讯作者:
Katherine Q. Ye
Katherine Q. Ye
中科院分区:
生物学3区
文献类型:
--
作者:
A. Chlipala;Benjamin Delaware;Samuel Duchovni;Jason Gross;Clément Pit;Sorawit Suriyakarn;Peng Wang;Katherine Q. Ye

文献摘要

被引文献

相似文献

软件系统的功能之所以爆炸,部分原因是编程语言支持对包装可重复使用的功能作为库的进步。开发人员受益于用相同语言公开许多接口所产生的统一性,而不是将命令行工具的大杂货串在一起。当这些界面变得如此灵活以至于应被称为编程语言时,特定于域的语言可以被视为可重复使用界面的力量的演变。但是,针对特定领域的语言的通用方法放弃了以丰富的通用语言来建立图书馆的许多优势,甚至传统的方法在学习新API方面也构成了重大挑战。我们建议,我们的社区不再继续开发特定于领域的新语言,而应以非常表现力的语言将基于图书馆的生态系统融合在一起,这些语言将编程和定理证明。我们的原型框架菲亚特(Coq Pearl Assistan)的库,通过模块化功能和性能彼此远离的关键思想,将语言变成了易于理解的库,前者是通过宏来通过优化脚本将其删除为高阶逻辑,而后者则将其删除为高阶逻辑从逻辑程序中得出有效的代码。
Functionality of software systems has exploded in part because of advances in programming-language support for packaging reusable functionality as libraries. Developers benefit from the uniformity that comes of exposing many interfaces in the same language, as opposed to stringing together hodgepodges of command-line tools. Domain-specific languages may be viewed as an evolution of the power of reusable interfaces, when those interfaces become so flexible as to deserve to be called programming languages. However, common approaches to domain-specific languages give up many of the hard-won advantages of library-building in a rich common language, and even the traditional approach poses significant challenges in learning new APIs. We suggest that instead of continuing to develop new domain-specific languages, our community should embrace library-based ecosystems within very expressive languages that mix programming and theorem proving. Our prototype framework Fiat, a library for the Coq proof assistant, turns languages into easily comprehensible libraries via the key idea of modularizing functionality and performance away from each other, the former via macros that desugar into higher-order logic and the latter via optimization scripts that derive efficient code from logical programs.