对于DSL,一直处于一种似懂非懂的状态,在网上搜了一下,看到了一篇文章,才算是有了些理解,以下摘出其中一段。
其实,大家在每天的软件开发中都在不经意的使用着这项工具。当我们在使用面向对象语言进行软件开发时,其实我们是在一种抽象的层面上进行工作。有了这层抽象,我们所编写的软件就会更有表现力,更为简洁。比如:当我们写下下面的代码行时:class Cat extends Animal。我们想表达的是Cat is a Animal,面向对象语言为我们提供了强有力的支持。而这个抽象的实现细节则由编译器来完成,我们无需关心。这样我们就能够在一个更高、更直接、更易于理解抽象的层面进行开发和交流,同时也大大降低了出现错误的机会。当我们使用支持泛型或者AOP的语言进行软件开发时,其实我们是在另外一种抽象层面上工作。比如:当我们写下如下代码时:
template <typename T >
T Add(T, T)
我们想表达的是求两个类型为T的变量之和,而不管T到底是什么具体类型。想想看,如果语言不支持这种表达规范,我们要写多少个雷同的Add方法。有了这种表达规范,我们就可以直接、简洁地表达出我们的意图,而具体的转换工作就有编译器代劳了。还有,如果我们在支持AOP的环境中进行软件开发,那么我们只要使用该环境提供的AOP语言规范定义出我们希望的横切关系(其实就是一种抽象),剩余代码的编写和插入工作就由该环境帮我们自动完成了。虽然编译器或者开发环境在底层生成的实际上也是大量重复的代码,但是这些代码的抽象规范却只有一份,而人们开发、维护、沟通所基于的正是这唯一的一份抽象规范,底层的重复实现细节对开发者来说是不可见的,并且是自动和抽象规范保持一致的。可以说,在开发者的头脑中,是没有重复的。从而有力的支持了“once and only once”和DRY原则。试想,如果语言种没有提供这种描述规范,那么我们要编写多少晦涩、难懂、重复的代码才能描绘我们想要表达的概念。
上面提到的抽象是一些比较通用的机制,因此一般都是语言内置支持的。也正是其通用性使其有效性范围受到了限制。一般来说,上面的一些抽象机制是仅仅针对开发者群体而言的,并且使用这些抽象机制进行的表达也是由编译器来自动生成底层执行代码的。但是,还有一种抽象表达更为重要,它的作用是在开发者和客户之间进行沟通、交流。说它重要是因为它和所要开发的系统是否能够真正满足客户需要密切相关。这种抽象表达更贴近具体的问题领域,因此也称为领域相关语言(Domain-Specific Language(DSL))。比如,如果我们开发的是一个金融系统,那么如果我们能够使用一套金融术语及其关系来刻画金融领域中的一些业务逻辑,那么不但表达起来会简洁、直接得多,更重要的是客户也更容易理解,和客户沟通起来也更为容易。再如,如果我们要开发一个科学计算系统,那么如果我们拥有了一套描述科学计算领域的词汇,那么在表达该系统时不但会容易、自然很多,而且也更加高效。有了这套DSL之后,剩下的工作就是要自己实现一个编译/解释器,来把DSL自动生成为目标语言。由于这个DSL一般都局限于某个特定领域,因此其编译/解释器实现起来也不会有多大困难。
敏锐的读者一定会发现,我们在前面列举的支持面向对象(OO)、泛型(GP)或者面向方面(AOP)的语言,其实也是DSL的一种。只不过它们所针对的是更为通用的,和软件要面临的实际问题领域无关的领域。它们的作用是为了提高一些通用问题描述的抽象层次,并且也为构建更贴近问题领域的抽象提供了基础。
C++之父Bjarne Stroustrup经常强调的“用库来扩充语言,用库来进行思考”( http://www.artima.com/intv/elegance.html有近期对Bjarne Stroustrup的采访,他再次强调了这个问题),其实就是在强调DSL以及自下向上开发的重要性。库就是DSL的一种形式,Bjarne Stroustrup所列举的科学计算库的例子就是科学计算领域的DSL。构建库的过程其实就是在朝着更加贴近问题领域抽象的方向迈进。明白了这一点,我们就不难理解Bjarne Stroustrup一直强调的泛型在构建一个优雅、高效库的方面的重要性了,因为泛型为构建这种抽象提供了一个坚实的基础。
不仅C++如此,其他一些语言(比如:Java)也拥有众多的库。这些库在我们进行软件开发时,为我们提供了强大的支持。不过,这些库往往都只实现了它所针对领域的一些通用基础性的问题。因此,在某些特定问题上,可能无法直接地使用这些库来进行表达。此时,你就应该考虑建立一个特定于自己问题的特定库了。
分享到:
相关推荐
通过阅读LSM6DSL应用手册,开发者可以深入理解该模块的特性,学习如何将其集成到不同的应用中,以及如何处理和利用数据。LSM6DSL提供了一系列丰富的功能,让开发者可以根据不同的需求来定制和优化应用的性能,尤其是...
同时,我们还将介绍布尔查询、should查询和must_not查询等与逻辑关系相关的查询语句,帮助您更好地理解DSL的灵活性和强大之处。此外,我们还将深入讨论聚合操作在DSL中的应用。通过使用聚合查询,您可以对检索结果...
以上就是关于"STM32f4的LSM6DSL程序"的一些核心知识点,这些内容对于理解如何利用LSM6DSL传感器与STM32F4微控制器进行交互至关重要。在实际开发过程中,需要结合具体项目需求,对这些知识点进行深入研究和灵活运用。
DSL(Domain-Specific Language,领域特定语言)是一种为了特定应用领域设计的计算机语言,它通常比通用编程语言更简洁、直观,更容易理解。在VHDL(Very High-Speed Integrated Circuit Hardware Description ...
2. **代码补全**:IDE(如Android Studio)能提供更好的代码补全支持,帮助开发者更快地编写和理解构建脚本。 3. **更少的冗余代码**:Kotlin DSL的语法结构使得脚本更加简洁,减少了不必要的括号和分号,提高了...
在本文中,我们将深入探讨802DSL简明调试2008.02版本的相关知识点,帮助读者理解和掌握其核心功能和操作流程。 首先,802DSL数控系统是工业自动化领域中广泛应用的一种控制系统,它集成了先进的控制算法和用户友好...
为了在Dify平台成功导入并使用这些工作流,用户需要对当前的前端开发流程有深入的理解,并能够准确地将这些流程转化为工作流文件中定义的指令和规则。此外,用户还需要了解如何在Dify平台中管理、配置和执行这些工作...
LSM6DSL是意法半导体(STMicroelectronics)推出的一款高度集成的六轴传感器,集成了3D加速度计和3D陀螺仪。这款传感器广泛应用于移动设备、物联网(IoT)、穿戴设备、机器人、无人机以及健康监测等领域,提供精确的...
接下来,我们将基于文档的部分内容对Groovy实现DSL的关键知识点进行详细解释。 ##### Groovy简介 Groovy是一种灵活的编程语言,旨在提供一种强大的脚本能力,同时保持与Java的高度兼容性。它支持多种编程范式,包括...
根据提供的文件内容,我们可以梳理出有关SINUMERIK 840Dsl数控系统的知识点,这些知识点涵盖了系统简介、...通过对手册的阅读和理解,用户能够掌握系统调试的基础知识,以及如何正确地进行后续的系统维护和升级工作。
这款工具对于理解和操作西门子840DSL控制系统至关重要,因为它提供了全面的功能来支持从最初的系统配置到日常运行的所有过程。 首先,让我们了解一下840DSL数控系统。840DSL是西门子的一款高端数控系统,广泛应用于...
在数控系统领域,西门子840Dsl是一个非常著名的控制系统,而五轴功能的调试对于...整个调试过程需要细致的操作和对五轴机床及控制系统有深刻理解。调试完成后,能够确保五轴机床高效、精确地工作在复杂的加工环境中。
Step7 5.5版本是该软件的一个重要里程碑,提供了对S7-300、S7-400以及部分SIMATIC S7-1200和S7-1500系列PLC的全面支持。它拥有强大的编程语言,包括Ladder Diagram(梯形图)、Structured Text(结构化文本)、...
这些源代码可以作为开发者快速集成LSM6DSL到STM32系统的起点,通过参考和修改代码,用户可以实现对传感器数据的采集、处理和传输。 标签“LSM6DSL”和“STM32”是关键词,分别代表了主要的技术焦点。而“中文”标签...
2. **易于理解和维护**:DSL的语法往往更加贴近自然语言,这使得即使是非技术背景的人也能够理解程序的大致逻辑,降低了维护成本。 3. **提高开发效率**:通过减少冗余代码并提供更直观的编程接口,DSL有助于加快...
Java 8采用Martin Fowler的方法创建内部DSL(领域特定语言)是一种强大的编程技术,它允许我们构建高度定制且易于理解的代码。内部DSL是通过在已有的编程语言内部构造一种专用的语言来实现的,使得代码更贴近所要...
二次开发通常要求开发者具备一定的编程能力和对数控系统架构的深入理解。 NCU(Numerical Control Unit)操作系统是西门子840Dsl数控系统的控制核心,负责解析加工程序,指挥机床运动和运行。NCU操作系统保证了机床...
DSL是一种专门针对某一特定领域或任务设计的编程语言,它通常比通用编程语言更简洁,更容易理解。在本案例中,我们用XText创建了一个自定义的DSL语言,目的是实现一个简单的表达式解释器。 DSL的开发首先需要定义其...
本项目所展现的基于Java的动态脚本语言(DSL)解析框架设计源码,不仅提供了一个高效的编程模型,也通过源码的开源分享,推动了社区对于DSL技术的理解和应用。该项目的成功实现和开源,无疑将加速动态脚本语言在不同...
根据提供的文件信息,以下是对“840Dsl简明调试手册”中知识点的详细说明: 1. 系统连接:手册提供了840Dsl系统连接的详细步骤,包括必要的硬件接口和接线配置。 2. PLC开机调试:介绍了如何进行PLC(可编程逻辑...