• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

下一代编程范型主要原则

发布: 2008-10-06 11:25 | 作者: 不详 | 来源: 测试时代采编 | 查看: 66次 | 进入软件测试论坛讨论

领测软件测试网



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”就可以;我们不需要到处去使用它,但几乎所有的程序都会有一些组成部分用到它,在那里,它是完成工作最合适的工具

Base Language之所以如此命名,是因为它是很多需要基本编程支持如变量、语句、循环等的语言很好的基础;它能够以三种方式使用:你可以扩展它以创建出你自己的基于它的语言,你可以在你的程序中引用它的概念,你还可以以Base Language生成你的代码;将会有几种可用的生成器来将Base Language转换成其它语言如Java,C++等;当然,不是每种语言都需要使用Base Language,但是在很多情况下,它是一个很好的起点

Collection Language 

下一种我们需要的最重要的语言是和集合一起工作的语言;对集合支持的需求是普遍存在的;每种主要的主流语言都提供了对集合某种类型的支持,例如,在Java 中你有java.util,在C++中你有STL;每个人都需要集合;如果每种DSL都提供自己的对集合的支持,那么将会有a Babylon of不同的集合语言,它们互不兼容;这就是为什么MPS必须提供一种每个人都使用的单一的Collection Language的原因

在很多主流语言中,集合并非语言特性而是类库,一个例子是Java的java.util包;这种支持技术上来说是存在的,但它是不方便的,杂乱的,并且易于出错的

Yuck!今天大部分的Java代码被一行接一行多余的、重复的处理集合的代码弄的杂乱无章;图6显示了一个例子,Collection Language是如何beats the tar out of a 类库的;例子是一个计算一组给定的点的convex hull的算法;更多关于Collection Language的细节会在以后的文章中提及

User Interface Language 

User Interface Language是我们的平台中下一种最重要的DSL;有趣的是,我前面提到的Editor Language能够另人信服的用来提供用户界面,但是一种专为图形用户界面设计的语言将会更灵活;这种语言带来的益处是巨大的;Java Swing代码就是一个想成为DSL的类库的极好的例子:功能有了,但很容易被误用,并且Swing的代码是彻底杂乱的;很多如今的开发环境都包含GUI builder来简化用户界面的创建;User Interface Language将把这项任务带到一个更高的层次;我将在以后的文章中讨论更多细节

Getting Started with MPS 
我已经能够听到一些对LOP怀疑的反应:“听起来不错,但是我们的项目已经步入正轨,现在切换到LOP是不可行的”,或者“听起来不错,但用一个像LOP这样的未经检验的方法来启动一个现实生活中的项目风险太大了”,或者“听起来不错,但是它什么时候才能为它的黄金时期做好准备呢?别忘了OOP用了20年才成为主流”

好消息是我们不需要一头扎进未知里,你可以先用脚趾头试一下水;你可以在你的项目中只是应用LOP的一小块来看一下它有没有提供一些实际的好处,然后如果你喜欢你可以用多一点;在不远的未来,你可以在MPS里试验两个可能的LOP应用: 

Using MPS on Java Applications 

已经有一个IntelliJ IDEA的原型插件允许你在你的项目中包含MPS的概念模型;当你编辑模型时,模型会自动在后台被转换成Java源代码;因此,你可以使用MPS来编写 Java应用的部分模块,喜欢用多点就用多点,喜欢用少点就用少点;这意味着你得到了MPS全部的力量,比如创建和使用特定DSLs的能力,做任何你想要的语言扩展,同时使用定制的带有自动完成、错误加亮、重构功能的编辑器,等等;插件将和IDEA紧密集成,允许你在你的MPS模型中嵌入Java代码,导航到嵌入或生成的Java代码,甚至进行概念层次的调试,就像IDEA中已经可用的JSP调试支持一样;更多集成特性正在计划中;这将是使用IDEA的 Java开发者可用的一个重要的新工具

Configuring and Scripting Your Applications 

有一个我见过很多次的模式,一个应用程序启动时需要某种形式的配置,可能是一个简单的配置文件,或者更完整的部署描述符文件;最后,配置变的更复杂,应用程序最后需要一种脚本语言;对于简单的配置文件,XML很流行;对于脚本语言,你可以创建自己的,或者借用一种general-purpose的脚本语言,像VBScript,Python/Jyphon,Tcl,Javascript,或者Lisp;这些方案中的每一种都至少有一些主流编程方法的标准缺陷:很长的实现时间,陡峭的学习曲线,难以扩展,匮乏的环境支持,等等

作为替代的,你能够使用MPS创建你自己的配置/脚本语言;你的应用程序的用户将会拥有一种易于使用的、智能的编辑器来编写他们的脚本,包括语法加亮,错误加亮,代码完成,导航等;只需花费很少的时间来创建并集成这种语言到你的应用中;为了使用这种应用,你可以分发MPS的运行时

Conclusion 
LOP 和MPS背后的思想并不新鲜,实际上已经出现超过20年了;Language Oriented Programming本身这个词也已经提出至少10年了;新鲜的是这些思想一直在软件开发社区默默的渗透,而它们的时代最终到来了;通过这篇文章,我希望提供一颗种子,使这些思想能够产生新的讨论、意见、批评、实验、研究、和最终的真实生活中的项目

文章来源于领测软件测试网 https://www.ltesting.net/

54/5<12345>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网