`

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

    博客分类:
  • DSLs
阅读更多

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

Tag:向上走 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),虽然这篇不像那两篇一样讨论语言的差异,但也算是在语言表达能力上的探讨吧!
分享到:
评论

相关推荐

    领域语言(DSL)的设计与实践

    领域语言(DSL)的设计与实践领域语言(DSL)的设计与实践领域语言(DSL)的设计与实践

    全栈语言的力量——Red语言设计者Nenad Rakocevic专访

    Red 是一门新的编程语言,它受到了 REBOL 很大的启发,但由于它有本地代码编译器,Red 的应用领域更加广泛——下到系统编程上到高级脚本,同时提供了对现代的多核 CPU 并发编程的支持。 主要特点为: 函数式、声明...

    802Dsl子程序库说明.pdf

    802Dsl子程序库说明pdf,802Dsl子程序库说明

    dsl8b20仿真程序

    dsl8b20在proteus下的仿真程序

    moustache, 用于连接环形处理器和中间件的微型网络框架/内部 DSL.zip

    moustache, 用于连接环形处理器和中间件的微型网络框架/内部 DSL Moustache (app ["hi"] {:get"Hello World!"})Moustache是一个微型网络框架/内部 DSL,用于连接环形处理器和中间件。它是多么的微小?那么,你只需要...

    前端智能化实践——让机器理解设计.pdf

    3. DSL目标语言数据处理:使用DSL语言来处理设计稿数据,生成目标语言代码。 4. 语义分析:对设计稿数据进行语义分析,生成对应的代码。 四、实现思路 让机器理解设计的实现思路可以分为以下几个步骤: 1. 设计稿...

    Java8采用Martin Fowler的方法创建内部DSL

    NULL 博文链接:https://357029540.iteye.com/blog/2381151

    Sinumerik 840Dsl 内部集成刀库管理功能

    Sinumerik 840Dsl 内部集成刀库管理功能使用,PLC编程,调试.示例

    用XText工具开发的自定义DSL语言

    用XText工具开发的自定义DSL语言,实现了一个简单的表达式语言解释器

    8051系列单片机C程序设计完全手册_清晰版_2-2

    6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典型资源编程 7.1 中断系统设计...

    xtext eclipse DSL

    小型领域特定语言(DSL),亦或是实现一门成熟的通用的计算机程序设计语言。总而言之,使用XText您可以立刻着手创建一套完全属于你所有的语言。

    DSL论坛-DSL介绍

    这是DSL论坛的一篇学习资料,通过该文档可以让我们对DSL有一些初步的概念和认识

    8051系列单片机C程序设计完全手册_清晰版_2-1

    6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典型资源编程 7.1 中断系统设计...

    802Dsl_PLC子程序库说明

    802Dsl_PLC子程序库说明802Dsl_PLC子程序库说明

    西门子802DSL PLC程序

    本程序为西门子802DSL数控车床实例程序已在产品上应用

    用Groovy实现DSL领域定义语言

    在groovy中实现DSL领域特定语言的技术。 版权声明: 本系列文章是从原著《Groovy For Domain-Specific Languages》(原作者: Fergal Dearle)中翻译而来,从中加入了一些本人自己的读书笔记和理解。本系列文章不为...

    西门子828D_840Dsl车床操作和编程培训手册.pdf

    西门子828D_840Dsl车床操作和编程培训手册——内部培训资料 车床目录 工艺基础知识、基本操作、参数操作区域、利用Shopmill车削、利用Shopmil钻削、利用Shop turn车削轮廓、利用ShopTrun铣削轮廓、...

    西门子840 Dsl 调试ppt

    西门子840 Dsl 调试ppt 西门子840 Dsl 调试ppt 西门子840 Dsl 调试ppt

    DSL领域定制语言实战

    本书是第一本领域专用语言(DSL)的实战类图书,它面向真正的实践者,是一本让奋战在开发第一线的实干家备感实用的专著! 《领域专用语言实战》基于一系列JVM语言(Java、Ruby、Groovy、Scala和Clojure),分析了...

    elasticSearch查询语句DSL

    在这篇资源中,我们将详细介绍如何使用DSL来构建复杂的查询语句,以满足各种搜索需求。首先,我们将学习DSL的基本结构和语法规则,包括查询、过滤器、聚合和排序等核心概念。通过深入了解DSL的语法,您将能够灵活地...

Global site tag (gtag.js) - Google Analytics