第5章 Ruby、Groovy、Clojure 语言中的内部DSL设计

本章内容

  • 利用鸭子类型和元编程使DSL更简洁
  • 用Ruby语言实现交易处理DSL
  • 用Groovy语言改进之前的指令处理DSL
  • 用Clojure语言转换思路重新实现交易处理DSL
  • 一些实现语言的常见陷阱

学习新范式和新设计手段的最佳途径,是找到最能体现该范式特点的语言,观察语言和范式在真实的实现案例中的表现。第4章我们谈了不少有利于提高内部DSL表现力的惯用法和模式。本章我挑选了三种目前最流行的JVM语言,向你示范如何用它们建立符合现实需要的DSL。

本章将按照图5-1所示内容展开讨论。

enter image description here

图5-1 本章路线图

本章选择的语言都是动态类型语言。我首先会说明动态类型语言拥有哪些特质能造就优秀的DSL,其次解释为何选择Ruby、Groovy、Clojure这三种语言来展开讨论。然后我们进入实现环节,依次引导你用这三种语言分别实现一个完整的DSL。这期间我们会讨论每种语言中常用于DSL设计的主要特性,同时介绍选取正确实现模式的若干原则和思路。

阅读完本章,你对于如何在具有类似特性的语言中开展DSL设计工作将有一个全面的认识。经过多个完整的DSL实现过程,你将学会从目标DSL的角度去思考,学会按照设计意图把实现语言编排成你希望提供给用户的DSL语法。

本章涉及大量编程实践。请你把相应语言的解释器都找出来,准备好迎接大量代码。我们的例子都比较简短明了,保证不会让你厌烦。本书附录为三种语言都准备了简单的复习资料,如果你对哪种语言不太熟悉,不妨翻看一下作为热身。如果你对多语开发,即同时使用多种语言进行开发的概念感到陌生,附录G可以作为入门介绍。下面我们就从选择这三种语言的理由说起。