写点什么

DSL:单一语言开发的终结者?

  • 2007-08-08
  • 本文字数:1347 字

    阅读完需:约 4 分钟

许多年以来,对于软件项目,企业软件开发的主流实践一直都倾向于在单一的通用编程语言上进行标准化,从而使得 Java 和 C#成为今天编程语言的主流选择。随着越来越多的目光开始投向 DSL,也许我们的前脚已经踏在了一道新的门槛之上,向前望去,我们会发现在软件项目中采用多种语言已经成为一个标准,但 80 年代和 90 年代初出现的问题不会重现。

Martin Fowler提出,也许我们正在迈进这样的一个新时期

[……] 在这个时期内,我们将见证多种语言在同一个项目上的应用,人们就像现在选择框架一样,根据功能来选择相应的语言。

Fowler 称:“像 Hibernate、Struts 和 ADO 这样的大型框架,给人们在学习上带来的挑战,绝不亚于学习一门语言,即便你在单一一门宿主语言上使用这些框架编程也是如此。”此外,在它们的宿主语言中表述需求的难度可能会相当大,并可能引出笨拙难用的配置文件,“这些配置文件实际上就是使用 XML 写的外部领域特定语言”。

在语言中嵌入 DSL,而不是使用类库,可能会是一个更为合适的解决方案。Martin 给出了这样的一个分析结论:“API 就好比是在声明一个词汇表,而 DSL 则为其增加了相应的语法,使得人们能够写出条理清晰的句子。”因此,使用 DSL 而不是框架会使代码丰富表现力,为人们带来“更良好的抽象处理方式”,并使“阅读我们写出的代码及对我们意图的展示变得更加容易”。

Piers Cawley 称,DSL 的主要特性并非其可读性,而是“它们对去相应领域的高度专注”使得它们能够更加明确地表义。Cawley 为了阐述他的观点举了一个例子,说明 DSL 不仅仅能让我们“写出读起来像领域专家说出来的话一样的程序”,也可以很技术化,用来代表一个使用它们的语法进行操控的框架。

Neal Ford 也相信,被他称为多语言编程(Polyglot Programming)的势头正在兴起。在软件开发的这个新纪元中,日益明显的主要特征就是嵌入更多的语言,使人们能够“为所做的菜选择一把恰到好处的刀,并且恰如其分地使用它”。他举了一个例子,展示在 Java 编程语言中并行类库的使用难度,并将其与 Haskell 作比。Haskell 是一门函数式语言,“消除了变量所带来的副作用”,并使“编写线程安全的代码”变得更容易。Ford 强调说,Java 和.NET 平台都存在 Haskell 语言的实现(Jaskell 和 Haskell.net)。

不再使用单一语言进行开发所带来的风险之一可能让 80 年代末 90 年代初所出现的问题又再次重现,当时语言就是完全独立的平台,既不能互操作也不能放在一起良好地使用。Martin Fowler 指出,现在的情况有这样的一个重要区别:

在 80 年代末期,人们很难让各个语言之间紧密地互操作。这些年来,人们花了很大精力创建出可以让不同语言紧密共存的环境。脚本语言在传统上与 C 语言有着很密切的关系。在 JVM 和 CLR 平台上也有人为互操作花费了大量精力。另外人们也在类库上投入了很多人力物力,为的是让语言忽视类库的存在。

最终,要学习并使用多种语言,对于业界乃至开发人员都可能会变成一项重要资产。《Pragmatic Programmers》这本书里面就说到,由于这样做会对人们对编程的思考方式产生影响,因此这样能帮助人们发现解决问题的新途径。

您是怎样认为的呢?在下去的五年中,我们会开始混合使用语言,并像用类库一样频繁地使用 DSL 吗?

查看英文原文: DSLs bringing the end of single language development?

2007-08-08 04:003651
用户头像

发布了 117 篇内容, 共 20.9 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

目标检测的发展与现状

阿炜小菜鸡

目标检测 8月月更

正畸MIA微种植体支抗技术中国10周年交流会在沈举办

联营汇聚

【python小游戏】用python写一款小游戏--贪吃蛇

BROKEN

8月日更 8月月更

Go 语言快速入门指南:什么是 TLS 安全传输层协议

宇宙之一粟

安全 Go 语言 8月月更

【数据挖掘概论】数据挖掘的简单描述

晴天

8月月更

视频目标检测

阿炜小菜鸡

8月月更 视频目标检测

开源一夏 | 基于若依springboot架构实现数据多维统计

六月的雨在InfoQ

开源 8月月更

SRv6网络的安全解决方案

穿过生命散发芬芳

8月月更 SRv6

手写分布式配置中心(1)

分享干货的你

java; spring-boot SpringCould 签约计划第三季

头脑风暴:完全背包

HelloWorld杰少

8月月更

【K8s入门必看】第三篇 —— K8s必备基础概念大梳理

Albert Edison

Docker Kubernetes 容器 云原生 8月月更

数据库治理的探索与实践

阿里巴巴云原生

数据库 阿里云 微服务 云原生

七日算法先导(三)—— 快速排序,插入排序

工程师日月

8月月更

Android条件控制宏编译

桑榆

8月月更

服务器

武师叔

8月月更

基于YOLOV5行人跌倒检测实验

阿炜小菜鸡

8月月更 行人检测

学生管理系统架构设计

张立奎

经验分享|盘点企业进行知识管理时的困惑类型

Baklib

知识分享|如何设计有效的帮助中心,不妨来看看以下几点

Baklib

那些年,在Linux指令上踩过的坑~

芒果酱

Linux 签约计划第三季

工业物联网 —— 新型数据库的召唤

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

什么是内部客户服务?

Geek_da0866

【爬虫+可视化】Python爬取疫情并可视化处理数据(爬虫入门案例)

BROKEN

Python 8月月更

python绘制一个时间的七段数码管实例基本的七段数码管绘制

BROKEN

8月日更 8月月更

Axure9基本交互操作(一)

乔乔

8月月更

Service Mesh落地路径

阿泽🧸

Service Mesh 8月月更

git操作

Jason199

git 8月月更

多个平台显示IP属地,必须大力推行互联网实名制

石头IT视角

开源一夏 | 云服务器ECS安装Mysql、JDK、RocketMQ

六月的雨在InfoQ

开源 8月月更

C++对象的初始化和清理之构造函数和析构函数分析与实例(一)

CtrlX

c++ 面向对象 后端 代码 8月月更

Nacos配置中心之客户端长轮询

急需上岸的小谢

8月月更

DSL:单一语言开发的终结者?_架构_Sadek Drobi_InfoQ精选文章