2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:003639
用户头像

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

关注

评论

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

一线大厂软件测试流程(思维导图)详解

程序员阿沐

编程 程序员 软件测试 测试工程师 测试流程

阿里二面,面试官居然把 TCP 三次握手问的这么细致

Java 编程 架构 面试 网络

一篇文章让你彻彻底底理解 I/O 多路复用

Java 程序员 架构 面试 计算机

Redis 内存碎片清理

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

LeetCode链表专题01: 反转链表

小马哥

Java 链表 LeetCode 数据结构与算法 七日更

mysql 检索分享上篇

new life

Go语言的初体验

Phoenix

Go 语言

面试三轮我倒在了一道sql题上——sql性能优化

牧小农

MySQL 数据库 面试 索引 索引优化

Java面试:阿里公开内部P7架构师(Java)成长路线图,满满的干货

Java架构追梦

Java 阿里巴巴 架构 面试 P7岗

设计与思考,关于资源和生命周期(三)

程序员架构进阶

设计模式 架构设计 28天写作 3月日更 池化技术

蚂蚁开源增强版 SpringBoot,都有高级特性?

Java小咖秀

开源 springboot 蚂蚁金服 SOFA

go-admin开源项目分析-1[安装、配置、启动]

happlyfox

学习 3月日更 Go 语言 go-admin

Python OpenCV 图像标记,取经之旅第 12 天

梦想橡皮擦

3月日更

极客时间·产品训练营·第八周作业

二大爷

极客大学产品经理训练营

畅玩国服LOL?MacBook M1 Windows虚拟机体验

Zhendong

arm MacBook m1

看完这篇,再也不怕面试官问我线程池了

牧小农

多线程 高并发 线程池 阻塞队列 拒绝策略

华为 IS-IS防环、泄露

艺博东

网络

火爆全网!2021年最新发布Java面试清单(九大技术点)

比伯

Java 程序员 架构 程序人生 架构师

阿里二面,面试官居然把 TCP 三次握手问的这么细致

鞋子特大号

面试 TCP 三次握手 四次挥手

初识Golang之条件语句

Kylin

基础语法 3月日更 Go 语言

音视频开发经验之路【一】Android中如何实现无缝切换播放源

鱼哥

音视频

隐式等待、显示等待和强制等待?

Geek_6370d5

音视频开发经验之路【二】ijkplayer实际开发中遇到的问题总结

鱼哥

音视频

Go Modules 常见使用陷阱

Rayjun

go modules Go 语言

Redis - AOF

insight

redis 3月日更

架构师知识笔记2

felix徐

程序思维与架构思维

Simon

架构实战营

Redis - RDB

insight

redis 3月日更

小白也能看懂的锁升级过程和锁状态

牧小农

乐观锁 悲观锁 锁升级

Spring Boot Feign 使用与源码学习

Yangjing

Feign Spring boot Feign 源码解读

(Day31) 变革流程的流程

mtfelix

28天写作 bewriting

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