BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

在JRuby中构建领域特定语言

| 作者 Ian Roughley 关注 0 他的粉丝 ,译者 Jason lai 关注 0 他的粉丝 发布于 2007年5月24日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

JavaOne大会闭幕演讲是Rob Harrop主题为《JRuby探索:为Java虚拟机创建领域特定语言》的演讲。领域特定语言(Domain Specific Languages,DSLs)提供了为程序开发或业务的特定目标创建出一种自定义语言的方式,并且人气与日俱增。InfoQ网站上就有Martin Fowler介绍领域特定语言的演讲,以及对博客圈子里相关论战的报导。

但问题是,为什么你要这么做呢?原因有很多,其中包括:可以简化重复性任务,可以封装样板式代码(Boiler-plate Code),或者是可以更有效表达代码目的的API。不管你有什么特殊原因,所有的DSL都可以为你的项目带来清晰的价值。

在演讲中探讨的方法是创建一个JRuby的DSL,可以在Java类内部使用。因为由JRuby生成的字节码最终会在JRE上运行,所以这个DSL应该被视为“内部”DSL——使用一个通用编程语言来创建一个特定编程语言。另外一种可选方式是“外部”DSL,需要一个外部的编译器和生成器,这样则会使得整合工作难度增大。

这个方法的优点在于创建DSL,其中展示了一些JRuby语言的技术,使得DSL的开发变得更加容易:

  • 运算符重载——对运算符进行重载可以使DSL可以提供一个更为自然的语法
  • Hash和符号(Symbol)——使用Hash和符号可使表达关系和标识对象更加容易
  • Block——Block可以封装可运行逻辑,并允许逻辑储存起来(置于Hash中),用于稍后执行
  • 动态类型扩展——可以用动态的方式向类和对象加入方法
  • 方法缺失(Method Missing)——当调用了一个不存在的方法时,可以进行自陷(Trap),这样可以避免需要提前了解所有操作
  • 整合——可以使用已有Java代码
为了全面获得使用JRuby创建DSL的好处,演讲中还给出了关于编程方式的技巧:
  • 确保你不会使用动态语言来编写Java代码
  • 从通用构建Block(Common Building Blocks)创建DSL
  • 识别问题,然后创建出一个合适的语法表达出解决方案
  • 提供元数据和行为——不要让你的DSL变成配置文件
  • 用Ruby的方式思考:使用类型扩展;使用Block;在对象上使用方法
  • 保证有限的作用域;仅仅解决领域中相应的小部分问题,不要让DSL变成一个通用编程语言

对于开发人员来说,DSL是另外一种可以利用的工具。只要花一小部分时间,就可以节省更大部分的时间。

查看英文原文:Building Domain-Specific Languages in JRuby

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT