Domain-specific languages (DSLs) are routinely created to simplify difficult or specialized programming tasks. They expose useful abstractions and design patterns in the form of language constructs, provide static semantics to eagerly detect misuse of these constructs, and dynamic semantics to completely define how language constructs interact. However, implementing and composing DSLs is a non-trivial task, and there is a lack of tools and techniques. We address this problem by presenting a complete module system over LP for DSL construction, reuse, and composition. LP is already useful for DSL design, because it supports executable language specifications using notations familiar to language designers. We extend LP with a module system that is simple (with a few concepts), succinct (for key DSL specification scenarios), and composable (on the level of languages, compilers, and programs). These design choices reflect our use of LP for industrial DSL design. Our module system has been implemented in the FORMULA language, and was used to build key Windows 8 device drivers via DSLs. Though we present our module system as it actually appears in our FORMULA language, our emphasis is on concepts adaptable to other LP languages.
翻译:为简化困难或专门编程任务,通常会创建特定语言(DSL),以简化困难或专门编程任务。它们暴露了语言结构形式的有用的抽象和设计模式,提供了静态语义,以敏锐地检测这些结构的滥用,以及动态语义,以完整地定义语言结构的相互作用。然而,实施和组成DSL是一个非三边性的任务,而且缺乏工具和技术。我们通过为DSL的构建、再利用和构成提供一个完整的模块系统来解决这个问题。LP对于DSL的设计已经有用,因为它支持使用语言设计者熟悉的词汇来实施语言规范。我们扩展LP,其模块系统简单(有几个概念),简洁(关键DSLL规格设想),并且(在语言水平、编程和程序上)可比较。这些设计选择反映了我们在工业DSLV设计中使用LP的情况。我们的模块系统已经在FOMLA语言中实施,并被用于通过DSLSLS建立关键视窗8设备驱动器。尽管我们把模块系统放在了我们改制语言中的其他概念上。