general-purpose 和 domainspecific 之间,并不是对立的;我需要所有的自由,我希望能够做任何事情,同时有很高的生产效率;目前为止还没有什么好方法能够做到这点;理想情况下,我能够为程序的各个特定部分使用不同的语言,而它们能够融洽的一起工作,并且开发环境会完全支持这些语言,包括重构,代码补全,导航,以及主流语言具有的所有其它生产力工具
为了获得这种独立性,我需要有创建、重用、修改语言和环境的自由;为了使这种自由是可行的,它需要很容易的被获得;如果我们解决了易于进行语言和环境的开发的问题,对程序员来说将是一个巨大的进步;这就是Language Oriented Programming的切入点
要理解Language Oriented Programming是什么,让我们首先看一下今天的主流编程方法,它基本上是这样:
思考: 你需要编程解决一个问题,因此你在你的头脑里形成了如何解决这个问题的概念模型
选择: 你选择了某种general-purpose的语言来编写解决方案
编程: 你通过将你的概念模型艰难的映射到编程语言来编写解决方案
编程这一步是瓶颈所在,因为大部分情况映射不是容易的和自然的;这种方法在程序员表达复杂的设计方面已经被证明是低效的;相对的,下面是LOP的工作方式:
思考: 你需要编程解决一个问题,因此你在你的头脑里形成了如何解决这个问题的概念模型
选择: 你选择了某些特定的DSLs来编写解决方案
创建: 如果没有合适的DSL适合你的问题,你便创建一种DSL来适应你的问题
编程: 你通过将你的概念模型相对直接的映射到DSLs来编写解决方案
现在,编程这一步is much less of a 瓶颈了,因为DSLs大大简化了如何将问题翻译成某种计算机能够理解的东西;看起来困难已经简单的转移到了“创建”这一步,然而,通过联合使用工具支持和将LOP应用到自身,将使这一步更加简单
LOP 背后的动机基本是这样的:我想用我正试图解决的问题相关的概念和意图的词汇来工作,而不是被迫将我的思想翻译成某种general-purpose的语言所能理解的概念(比如:类,方法,循环,条件,等等...);为了达到这个目标,我需要使用domain-specific languages;怎样得到它们呢?创建它们;
我已经开始开发一个通用的平台(the Meta Programming System)来设计domainspecific languages,带有工具支持和开发环境;它将允许程序员像现在编写程序一样容易的来定义语言;这个平台将完全支持LOP,给程序员为程序的每一部分选择使用最合适的语言的自由,而不是将他们绑在某种固定的general-purpose的编程语言上
MPS 只是Language Oriented Programming的一个示例,尽管我在这里使用MPS来做示例,而实际上LOP可以用许多不同的方法来实现,你自己就可能知道一些替代方法;LOP 的概念不等同于它的实现,就像OOP的概念不等同于Java或C++或Smalltalk一样
文章来源于领测软件测试网 https://www.ltesting.net/