Dynamic Language and DSL

VN:F [1.9.10_1130]
Rating: 0.0/5 (0 votes cast)

这是一篇技术评论,呃,请自行掠过

早上拜读了Martin Fowler老人家的BLOG Groovy or Ruby ,兴致勃勃的看这个时尚的家伙对动态语言的高谈阔论。下午就在InfoQ看到了对其新书的点评——Martin Fowler unveils details of his upcoming DSL book. 两样东西放到一起很有意思。动态语言与领域语言(Domain-Specific Language)。

MF的书中是这样介绍的。

如果我们把XSLT看成是专门格式化XML的语言,那么XSLT就是XML的DSL。

那么DSL有什么用呢?

根据MF的论述 Domain-Specific Language

DSL与通用语言相区别,是为特定目的而生的语言,它并不是什么新东西,历史几乎和计算机的历史一样长。

比如Windows的批处理文件,再比如HTML(某种意义上)。处理它们的程序和普通的应用程序不一样,这些程序并不知道这些语言具体描述了什么,却知道他们到最后大概是什么样子。但我们也不能把这些应用程序归结为系统程序,毕竟,你不能用这些动态语言写成任何一个通常意义上的程序。这些语言轻巧灵活,惹人喜爱,却长期处于没人在乎的地位。几乎没有任何一个大学开设JavaScript或者BAT的课程。然而,用它们开发的程序铺天盖地,甚至有些开发者都没有意识到他们在写程序。

我们到底有多少DSL,没有人说的清楚,甚至怎么界定都没有标准。然而这种工具的确越来越受重视。大型的软件通常都有自己的工具语言,比如SAP,比如PepleSoft,比如MathLib,比如SAS,掌握这些工具通常意味着熟练应用这些语言与相关的领域知识。而由于他们之间毫无联系,同种软件之间有着高昂的替换成本。变相垄断使得DSL由最初的简化用户操作变成了对抗新来者的武器。

标准化是由混乱走向秩序的利器。工业化也是软件行业一直追求的目标。让我们看看工业界是怎么做的,他们拥有流水线,有很好的设计,生产,销售流程。我们常常抱怨软件的变化,生产没有变化吗?现在工业可以高效的适应变化,依靠的就是对领域的深切理解,对规则的灵活掌握。

对标准的无尽追寻是业界走向成熟的重要标志。不妨设想,今后的某天,所有的财务软件都有统一的口径标准,统一的数据格式处理流程。集团化,高质量的软件生产和部署使我们更加有序的获取所需的功能。然而这一切,依靠的就是对DSL领域的入侵。Ruby的流行正式反映了这种入侵,当其追逐者不断的在各种平台上实现这门语言的时候,我们也看到了传统语言正积极的调整。Java向.net学习多语言支持。.net努力的靠近开源社区的标准。

我们说GOP,说AOP,无非就是想把领域问题(Domain Problem)从应用问题里面解离,我们需要成熟的软件产品,需要的是真正模块化的组件,而不是某个既成事实。被巨头们忽悠着团团转的我们,也只能等到他们被迫合作的时候,才能轻松一点。

您可能有兴趣的文章:

VN:F [1.9.10_1130]
Rating: 0.0/5 (0 votes cast)
Creative Commons License
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

4 Comments

  • 2007/12/04 - 12:48 PM | Permalink

    爬过来踩踩

    VA:F [1.9.10_1130]
    Rating: 0 (from 0 votes)
  • 2007/12/04 - 2:39 PM | Permalink

    寒死……
    在我那么专业的文章下面这样……

    VA:F [1.9.10_1130]
    Rating: 0 (from 0 votes)
  • 番禺
    2009/01/01 - 3:55 PM | Permalink

    不错,不错;

    VA:F [1.9.10_1130]
    Rating: 0 (from 0 votes)
  • Pingback: 笔记:DSL之一 简介 | Himmel

  • Leave a Reply

    Your email address will not be published. Required fields are marked *

    *

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>