写点什么

DSL:单一语言开发的终结者?

  • 2007-08-08
  • 本文字数:1347 字

    阅读完需:约 4 分钟

许多年以来,对于软件项目,企业软件开发的主流实践一直都倾向于在单一的通用编程语言上进行标准化,从而使得 Java 和 C#成为今天编程语言的主流选择。随着越来越多的目光开始投向 DSL,也许我们的前脚已经踏在了一道新的门槛之上,向前望去,我们会发现在软件项目中采用多种语言已经成为一个标准,但 80 年代和 90 年代初出现的问题不会重现。

Martin Fowler提出,也许我们正在迈进这样的一个新时期

[……] 在这个时期内,我们将见证多种语言在同一个项目上的应用,人们就像现在选择框架一样,根据功能来选择相应的语言。

Fowler 称:“像 Hibernate、Struts 和 ADO 这样的大型框架,给人们在学习上带来的挑战,绝不亚于学习一门语言,即便你在单一一门宿主语言上使用这些框架编程也是如此。”此外,在它们的宿主语言中表述需求的难度可能会相当大,并可能引出笨拙难用的配置文件,“这些配置文件实际上就是使用 XML 写的外部领域特定语言”。

在语言中嵌入 DSL,而不是使用类库,可能会是一个更为合适的解决方案。Martin 给出了这样的一个分析结论:“API 就好比是在声明一个词汇表,而 DSL 则为其增加了相应的语法,使得人们能够写出条理清晰的句子。”因此,使用 DSL 而不是框架会使代码丰富表现力,为人们带来“更良好的抽象处理方式”,并使“阅读我们写出的代码及对我们意图的展示变得更加容易”。

Piers Cawley 称,DSL 的主要特性并非其可读性,而是“它们对去相应领域的高度专注”使得它们能够更加明确地表义。Cawley 为了阐述他的观点举了一个例子,说明 DSL 不仅仅能让我们“写出读起来像领域专家说出来的话一样的程序”,也可以很技术化,用来代表一个使用它们的语法进行操控的框架。

Neal Ford 也相信,被他称为多语言编程(Polyglot Programming)的势头正在兴起。在软件开发的这个新纪元中,日益明显的主要特征就是嵌入更多的语言,使人们能够“为所做的菜选择一把恰到好处的刀,并且恰如其分地使用它”。他举了一个例子,展示在 Java 编程语言中并行类库的使用难度,并将其与 Haskell 作比。Haskell 是一门函数式语言,“消除了变量所带来的副作用”,并使“编写线程安全的代码”变得更容易。Ford 强调说,Java 和.NET 平台都存在 Haskell 语言的实现(Jaskell 和 Haskell.net)。

不再使用单一语言进行开发所带来的风险之一可能让 80 年代末 90 年代初所出现的问题又再次重现,当时语言就是完全独立的平台,既不能互操作也不能放在一起良好地使用。Martin Fowler 指出,现在的情况有这样的一个重要区别:

在 80 年代末期,人们很难让各个语言之间紧密地互操作。这些年来,人们花了很大精力创建出可以让不同语言紧密共存的环境。脚本语言在传统上与 C 语言有着很密切的关系。在 JVM 和 CLR 平台上也有人为互操作花费了大量精力。另外人们也在类库上投入了很多人力物力,为的是让语言忽视类库的存在。

最终,要学习并使用多种语言,对于业界乃至开发人员都可能会变成一项重要资产。《Pragmatic Programmers》这本书里面就说到,由于这样做会对人们对编程的思考方式产生影响,因此这样能帮助人们发现解决问题的新途径。

您是怎样认为的呢?在下去的五年中,我们会开始混合使用语言,并像用类库一样频繁地使用 DSL 吗?

查看英文原文: DSLs bringing the end of single language development?

2007-08-08 04:003460
用户头像

发布了 117 篇内容, 共 19.0 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

简单的词法分析器

Java 程序员 后端

线索化二叉树的作用

Java 程序员 后端

绝了!华为技术专家居然把JVM内存模型讲解这么细致!

Java 程序员 后端

线上频出MySQL死锁问题!分享一下自己教科书般的排查和分析过程

Java 程序员 后端

终于有人把Java程序员必学知识点整理出来了,令人有如醍醐灌顶

Java 程序员 后端

终于等到了!十位Java架构师整理的“阿里P7”养成计划

Java 程序员 后端

绝了!字节大牛最新上线1940页LeetCode刷题秘籍,堪称完美

Java 程序员 后端

第六章(1(1)

Java 程序员 后端

终于,字节跳动要取消大小周了,我 1

Java 程序员 后端

老夫带你深度剖析Redisson实现分布式锁的原理

Java 程序员 后端

耗时4个月,阿里架构师打造java面试突击文档,10位朋友已拿offer

Java 程序员 后端

聊一聊Java中那些常见的并发控制手段

Java 程序员 后端

纯干货“Java面试指南+Java核心宝典”!

Java 程序员 后端

腾讯Java岗面试,竟被“锁”给搞晕了?这样复习

Java 程序员 后端

线程的介绍与创建

Java 程序员 后端

统一处理controller层接口返回的数据

Java 程序员 后端

聊一哈,新入如何优雅的跟老板打招呼

Java 程序员 后端

聊一聊Java中那些常见的并发控制手段(1)

Java 程序员 后端

终于等到了!阿里内部“性能怪兽”开源了,竟是Nginx

Java 程序员 后端

编码习惯-函数编写建议

Java 程序员 后端

网络编程三-原生JDK的BIO以及应用

Java 程序员 后端

网络编程四-原生JDK的NIO及其应用

Java 程序员 后端

美团二面问源码卒!闭门偷学318页Spring深度手册,再战

Java 程序员 后端

网关性能大PK,Spring Cloud Gateway让人大失所望!

Java 程序员 后端

第六章(1

Java 程序员 后端

策略模式---动态更改算法

Java 程序员 后端

算法基础三之链表、栈、队列、递归

Java 程序员 后端

经典算法(21)毕业生求职必会算法 八皇后问题

Java 程序员 后端

给Swagger换了个新皮肤,瞬间高大上了

Java 程序员 后端

肝到吐血!字节跳动技术专家耗时两年整理出1014页SSM开发实战,你还没看过吧!

Java 程序员 后端

腾讯T3大牛-带你深入解析静态分派-&-动态分派原理

Java 程序员 后端

DSL:单一语言开发的终结者?_架构_Sadek Drobi_InfoQ精选文章