`

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

相关推荐

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

    Java 8采用Martin Fowler的方法创建内部DSL(领域特定语言)是一种强大的编程技术,它允许我们构建高度定制且易于理解的代码。内部DSL是通过在已有的编程语言内部构造一种专用的语言来实现的,使得代码更贴近所要...

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

    领域语言(DSL)的设计与实践是一门专门研究如何为特定领域设计专业语言的学问,这些领域包括但不限于音效编程、数据库操作、财务计算等。DSL旨在为这些特定领域的用户提供更高效、更直观的编程和操作方式,从而简化...

    DSLs实战-DSLs in Action

    第五章聚焦于三种流行脚本语言——Ruby、Groovy和Clojure——并详细讲解了如何在这三种语言中设计和实现内部DSL。每个部分都包含了具体的代码实例和解释,帮助读者了解如何利用这些语言的特性来构建高效且易用的DSL...

    程序语言设计发展状况

    #### 一、程序设计语言的发展历程 程序设计语言作为连接人类思维与计算机执行的桥梁,历经了从原始到先进的演变过程。根据历史发展脉络,我们可以将其分为四代: 1. **第一代:机器语言** - **特点**:直接使用...

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

    ### 全栈语言的力量——Red语言设计者Nenad Rakocevic专访 #### Red语言概览 Red是一种新兴的编程语言,深受REBOL语言的影响。与REBOL相比,Red不仅具备本地代码编译功能,还拓宽了其应用领域,能够胜任从系统级...

    InternalJavaDSLBuilder:用于 DSL 的 Java 内部 DSL-Builder,重点是实例化模型

    在软件开发领域,DSL(Domain-Specific Language,领域特定语言)是一种为特定应用领域设计的编程语言,它简化了在该领域内的复杂操作。DSL 可以分为外部DSL和内部DSL。外部DSL像XML,独立于主编程语言,而内部DSL则...

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

    总的来说,利用XText开发自定义DSL语言并实现表达式解释器,是一个涉及语言设计、解析理论和程序执行的综合过程。它可以帮助我们为特定任务创建简洁、高效的解决方案,并且XText的自动化工具链极大地简化了这一过程...

    bupt期末DSL设计:一种领域特定脚本语言的解释器的设计与实现(java版本,代码加报告加用户说明)

    DSL(Domain-Specific Language,领域特定语言)是一种为了特定领域设计的编程或标记语言,它通常比通用编程语言更为简洁,针对性更强。在这个项目中,我们聚焦于一个使用Java实现的DSL解释器的设计与实现,这是一份...

    dsl8b20仿真程序

    它能够通过一根数据线(单总线)与主机通信,读取并报告精确的温度数据,分辨率最高可达9位(±0.5℃),精度则可以达到±0.5℃或±1.0℃,这取决于传感器内部的校准系数。 该传感器的显著特点是其独特的单线通信...

    groovy 一个不错的文档 实现dsl

    这意味着文档将深入探讨Groovy语言如何支持DSL的设计与实现,并可能包括一些实际案例和最佳实践。 #### 内容部分解析 文档由三位Groovy领域的专家共同撰写:Andrew Eisenberg、Paul King 和 Guillaume Laforge。...

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

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

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

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

    DSL论坛-DSL介绍

    ### DSL技术概述与演变 #### 一、DSL技术简介 DSL(Digital Subscriber Line,数字用户线路)是一种通过传统电话线提供高速数据传输的技术。它利用现有的铜线电话网络,在不干扰普通电话服务的情况下,实现宽带...

    DSL-SQL源码分析

    - 在源码层面,这通常涉及到解析器(parser)和编译器(compiler)的设计,解析器将DSL表达转化为内部数据结构,编译器再将这个数据结构转换为实际的SQL字符串。 2. **解析器实现**: - 解析器可能使用词法分析...

    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 中断系统设计...

    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 中断系统设计...

    LSM6DSL应用手册

    其内部的加速度计和陀螺仪都拥有超低噪声性能,使得LSM6DSL可以实现始终开启的低功耗特性,并提供卓越的感应精度,为用户带来最佳的运动体验。此外,加速度计还具有智能休眠到唤醒(Activity)和从唤醒返回到休眠...

Global site tag (gtag.js) - Google Analytics