程序设计语言的表达——内部DSL

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dreamhead.blogbus.com/logs/17667876.html

 

使用Java实现内部领域特定语言
One Lair and Twenty Ruby DSLs
Implementing an Internal DSL

上面几个文章都是关于DSL的,不过,在这里,我并不是太关心DSL的话题,我更感兴趣的是代码的写法。按照这几篇的分类方法,直接用程序设计语言编写的DSL算是内部DSL,也就是说,所谓内部DSL,也就是一种标准的程序代码。

Kent Beck在他的《Implementation Patterns》的第三章《A Theory Of Programming》中,谈到了编程的价值观(Value):Communication(沟通)、Simplicity(简单)和Flexibility(灵活)。如果说简单和灵活很容易理解的话,那么把沟通放在价值观中,尤其排在所有价值观的第一位,则显现出Kent Beck对于编程的深刻。在这个软件开发越来越需要协作的年代,写代码的时候,多站在让别人理解的角度考虑一下,会极大提升代码的可读性。在ThoughtWorks的招聘流程中,有一个Code Review的环节,拜这个环节所赐,我看过很多人的代码,不在少数的应聘者其代码唯一的优点就是完成了需求。以沟通为标准进行衡量,这显然是不够的。

同样,以沟通为标准,那么内部DSL显然在这方面做得更好,因为DSL本身就是为了让人更容易理解而存在的。这几篇文章中提供了很多内部DSL的手法,比如Method ChainingExpression Builder等等。抛开DSL这样的BuzzWord,这些方法应该属于增强程序本身表达能力的方法。

JDK有一个很好的Method Chaining的例子:StringBuffer的append方法。

StringBuffer sb = new StringBuffer();
sb.append("log1").append("log2").append("log3");

这样的写法显然比下面的写法更为简洁,尤其是需要往StringBuffer中添加很多内容的时候。

StringBuffer sb = new StringBuffer();
sb.append("log1");
sb.append("log2");
sb.append("log3");

在我看来,这些内部DSL技术为我们打开了一扇窗,它让我们在编写代码,尤其作为API提供的代码时,有了一个新的思考方向。当然,并不是一味的应用这些内部DSL技术就会写出好代码,作为一个有经验的软件开发人员,我们需要一定的鉴别能力,分辨出究竟怎样做才会真正的提高代码的“沟通”能力。

之前写过两篇关于程序设计语言表达的blog(12),虽然这篇不像那两篇一样讨论语言的差异,但也算是在语言表达能力上的探讨吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
领域特定语言DSL)是一种根据特定领域需求和约束而设计的编程语言。相比通用编程语言DSL更加专注于解决特定领域的问题,能够提供更高效、简洁和易于理解的解决方案。 DSL的设计与实践包括以下几个方面: 首先,DSL的设计要考虑特定领域的需求和约束。通过深入了解和分析特定领域的问题与业务逻辑,设计者可以确定DSL所需的语法、语义和功能,以满足领域内的编程需求。 其次,DSL的实践需要选择合适的实现方式。常见的DSL实现方式包括内部DSL和外部DSL内部DSL通常是在通用编程语言的基础上构建,使用该语言的语法和库来扩展和定制。而外部DSL则是基于独立的语法和语义,通过解析器和执行器来实现。 另外,DSL的设计还需要注重易用性和可读性。DSL应该是简洁而直观的,让领域专家和非专业开发人员能够容易理解和使用。为了提高可读性,可以使用领域特定的术语和表达方式,使代码更富有表达力和可解释性。 此外,DSL的实践过程中,还需要提供良好的工具和支持。这包括编写DSL的编辑器、调试器和代码生成器,以及相关的开发环境和文档。这些工具可以帮助开发人员更快地开发和调试DSL程序,提高开发效率和质量。 总之,领域特定语言的设计与实践需要深入了解特定领域的需求和约束,选择合适的实现方式,注重易用性和可读性,并提供相应的工具和支持。通过合理的设计和实践,DSL能够提供更高效、简洁和易于理解的解决方案,提升领域内编程的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值