记住Model Query Language, template languages, 和pattern languages都由强大的编辑器支持其自动完成、重构、引用检查、错误勘测、等等;即使复杂的查询、宏、模式,都可以很容易的编写;代码生成从来没有这么强大过
Using Languages Together
前面有关代码生成的章节带来了一些关于这些语言如何一起工作的有意思的问题;事实上有几种方法能让语言一起工作;在MPS中,所有的概念模型都互相知晓;既然语言也是概念模型,那么便意味着所有的语言都彼此知晓,可以潜在的被连接在一起
语言彼此之间可以有不同的关系;你能够通过扩展现存的语言来创建新语言,继承所有的概念,修改其中的一些,并加入你自己的概念;一种语言可以引用其它语言中的概念;你甚至能将一种语言插入到另一种语言中去;我将在以后的文章中讨论进一步的细节
Platforms, Frameworks, Libraries, and Languages
我们支持Language Oriented Programming的系统需要比元编程能力更多的功能才能更有用;它应该提供程序员依赖于当前的编程语言提供的所有事物:集合,用户界面,网络,数据库连接,等等;程序员不止是单单基于语言本身来选择语言;例如,Java的大部分功能不是语言提供的,而是有成千上万的framework和API供 Java程序员选择;他们买的不是Java语言,而是整个Java平台;MPS也将有一个它自己的支持平台
在我进入细节前,我们先简要谈一下frameworks;什么是framework?在主流的编程中,它通常意味着一堆类和方法打包成的一个类库;让我们更近一点的观察这一点,看看在LOP的镜片下我们会看到什么
我们为什么想要把类和方法打包成库呢?程序员会背诵他们的教授曾经告诉他们的:“复用”;但这只是在原来的位置上留下了另一个问题:我们为什么要复用类库?答案是类库在解决特定类型的问题方面很有用,如制作用户界面,访问数据库等等;你可以说类库对应着某个领域;你瞧,我们看到了联系,Class libraries are wannabe DSLs!这个悲伤的事实真令我沮丧
今天的Domain-specific languages以类库的形式存在,除了它们不是语言,没有语言的优势,并拥有类和方法所有的局限;特别的,类和方法直接绑定到了特定的运行时行为,而特定的运行时行为是不能修改和扩展的,因为行为是提供“类”和“方法”的概念定义的;因为它们不是语言,类库很少被环境(例如编译器和编辑器)聪明的支持
我们应该忠于wannabe DSLs,还是应该拥有当需要DSLs的时候使用真正DSLs的自由?当然是自由;每个类库都是为我们的平台创建一种完全的DSL的候选;例如,JDK的所有类库都应该是MPS平台上的DSLs;其中一些DSL在现在刚开始的时候不是那么紧急需要,但其它一些从一开始就对平台的功能和可复用性有强烈的影响;我将介绍随MPS提供的三种最重要的平台语言:The Base Language, the Collection Language, and the User Interface Language
Base Language
我们首先需要的语言是对应最简单编程领域的,一种general-purpose的命令式编程;这种简单的语言应该支持近乎通用的语言特性诸如算术、条件、循环、函数、变量等等;在MPS中我们有这样一种语言,它被称为Base Language
对这种语言的需求应该是很明显的,例如,如果我们想把两个数字加在一起,我们应该能够简单的说一句“a + b”就可以;我们不需要到处去使用它,但几乎所有的程序都会有一些组成部分用到它,在那里,它是完成工作最合适的工具
文章来源于领测软件测试网 https://www.ltesting.net/