最近ruby语言的流行似乎再次引发了DSL(Domain Specific Language)讨论的热潮。从语法表现形式上看,通过对于ruby语言的深度hack, 充分挖掘ruby语言的某些语法特征,可以使得正常的ruby语句看起来比其他计算机语言更接近于人类的自然语言,某些人因此认定ruby语言是DSL的天然载体。但是在我看来,具体语言的语法表达形式对于DSL的核心价值而言并不是最关键的。
首先,DSL的核心在于高效的表达语义,而并不在于是否接近自然语言。接近于自然语言并不意味着更加domain, 因为自然语言也是一种通用语言,它未必能够比采用其他语法形式的语言更加有效的对domain事物进行描述。典型的有数学符号和化学分子式。
第二,作为DSL, 紧凑的表达形式是一方面,另一方面是这种表达形式的稳定性,即如何防止人们写出不符合DSL规范的语句。ruby语言的片断直接作为DSL无疑是一种naive的解决方案,我们可以轻易写出大量不同形式的ruby语句,而它们在语义上是等价的(这意味着通过单元测试也无法发现它们的不同),即人们不按照设计的DSL语法书写,这造成DSL的解体。
作为一种DSL构造语言,其核心能力在于如何将second class的domain中的概念(非语言本身内置的概念)封装到first class的表达形式中。ruby作为一种动态语言,可以更加轻易对于自身meta data进行内省,典型的如ruby中的ActiveRecord设计. 但是在我看来,这种概念提升能力在ruby的语法结构中也是有限的,原因恰在于ruby的语法太多样化了。实际上,我更加看好xml结构的均一性。
分享到:
相关推荐
squib, 用于Prototype卡游戏的ruby DSL 点火 点火器是一个用于Prototype卡和电路板游戏的ruby DSL插件。 写一点 ruby,定义你的数据库,然后将你的游戏编译成一系列的print-and-play甚至 print-on-demand 。
Ruby-JMeter是一个强大的工具,它将Ruby编程语言与Apache JMeter测试框架相结合,为性能测试和负载测试提供了灵活且易于使用的领域特定语言(DSL)。这个工具使得测试人员和开发者能够用Ruby编写JMeter测试计划,...
cfer, 工具箱和 ruby DSL,用于自动化使用 AWS CloudFormation的基础架构 Cfer Cfer是一个用于管理CloudFormation模板的轻量级工具包。请阅读这里的Cfer 。支持Cfer是 pre-1.0 软件,可能包含 Bug 或者不完整的功能...
Ruby DSL(领域特定语言)是Ruby编程语言的一个强大特性,它允许开发者创建易于理解、高度定制化的代码结构,类似于自然语言。Aman King的“Simple Ruby DSL Techniques”演讲旨在探讨如何利用Ruby的灵活性来构建...
使用Ruby DSL编写您自己的业务流程配置,使您可以拥有混合,导入和变量。 import "../logging.rb" application 'my-cool-app' do variables do var port : 8080 end service "api" do mix "logging.syslog" ...
顺从的[ ] 与其让每个Ruby项目重塑这个轮子,不如让我们的Ruby DSL编码更加温顺...用法基本:Ruby 作为DSL 假设我们要创建一个用于修改Array对象的DSL。 如果仅将Array的方法视为DSL会不会很好? with_array ( [ ] ...
Jbuilder是一个Ruby gem,它提供了一个简洁的Domain Specific Language (DSL),让开发者能够通过一种构造式的语法来构建复杂的JSON对象,避免了手动拼接字符串的繁琐。这个DSL使得编写和维护JSON序列化代码变得更加...
Avro::Builder提供了一个Ruby DSL来创建模式。 创建此DSL的原因是: Ruby不支持 。 Avro IDL仅可用于定义协议。 可以从IDL协议中将模式提取为JSON,但是对导入的支持仍然有限。 提供有关我们为何开发avro-...
ronin-sql| | 描述{Ronin :: SQL}是用于编写的Ruby DSL。产品特点提供用于编码/解码SQL数据的便捷方法。 提供特定于域的语言(DSL),用于编写普通SQL和。例子便利方法转义字符串: "O'Brian".sql_escape# => "'O''...
Saxxy用于 SAX 解析器的 Ruby DSL Saxxy 被设计为用于创建 SAX 解析器的 DSL。 如果有人告诉您您是受虐狂,因为您正在 SAX 解析 HTML,请向她展示Saxxy 。 它目前支持 、 、 并且非常容易实现您自己的解析器绑定。...
翻录Riptables(发音为ri-pee-tables)是用于生成IP表配置的Ruby DSL。 制定了以下设计目标: 必须支持IPv4和IPv6规则必须允许单个文件包含基于给定role和zone多个环境的配置。 必须支持任何类型的表或链。 必须...
它提供了一个简单的Ruby DSL,用于从Nokogiri对象中选择值并将结果存储在类似JSON的Ruby哈希和数组中。 安装 将此行添加到您的应用程序的Gemfile中: gem 'decontaminate' 然后执行: $ bundle 或将其自己安装为...
Main是一个Ruby类工厂和领域特定语言(DSL),专门设计用于快速、简洁地生成命令行程序。 "Main"库的核心理念是通过提供一种结构化的方式来定义命令行选项和子命令,使得代码更加清晰、易于维护。它允许开发者用一...
Ruby-Blender通过其独特的纯Ruby DSL(领域特定语言)和命令行界面(CLI)来实现这一目标。 **DSL:Ruby-Blender的核心** Ruby-Blender的DSL是一种简洁的编程语法,专为描述和执行跨服务器任务而设计。它允许开发者...
Ript提供了干净的Ruby DSL来描述防火墙规则,并实现了类似于数据库迁移的功能,以在停机时间为零的情况下应用规则。 Ript在Linux上可与iptables使用,并且是用Ruby编写的。 正在安装 确保已安装Ruby 1.9+,然后运行...
作为 Ruby DSL 的 MOS6502 汇编器,专注于 Commodore 64。 特征: 你很自然地编写了 MOS6502 程序集,但仍然拥有 Ruby 的全部功能(很棒) 以变量为基本构建块的宏 内置 C64 BASIC 编译器 用生成工具驱动的...
8. **DSL设计**:Ruby的元编程能力使得设计领域特定语言(DSL)变得容易,这可以极大地提高代码的可读性和表达力。 通过《Metaprogramming Ruby》的源代码,读者可以实际操作这些概念,观察它们如何影响程序的行为...
Blockenspiel是一个帮助程序库,旨在简化DSL块的实现。 它被设计为全面而强大的功能,支持大多数常见的使用模式,并且在存在嵌套块和多线程的情况下可以正常工作。 摘要 Blockenspiel是一个帮助程序库,提供了用于...
例如,可以创建自定义的 DSL(领域特定语言),使代码更贴近自然语言,提高代码可读性和开发效率。此外,元编程也能用于创建动态的配置系统,自动生成代码,以及调试和测试。 该书的中文版对于英语不精通的读者来说...
TaxGirl是一个简单的工具,可帮助您使用漂亮的ruby DSL保持计算逻辑明确。 它还避免了为层级和层级计算方法进行繁琐的工作。 组成价格 增加块 阻止您在其中定义将触发组成主要价格金额的方法的位置。 参量 货币和...