写点什么

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

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

关注

评论

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

文心智能体的乌镇时间,指路AI新十年

脑极体

AI

史宾格平台荣获信通院“首批” 个人信息保护合规审计产品能力验证

百度安全

SnailSVN Pro for mac(SVN客户端)v1.10免激活版

Rose

《一文讲透》第 3 期:简易快速实现 KWDB 的高效管理

KWDB数据库

sql JDBC 数据库管理 开源数据库 数据库系统

揭秘小红书笔记详情API接口:解锁内容营销新境界

代码忍者

API 接口 pinduoduo API

『OpenCV-Python』安装以及图像的读取、显示、保存

德育处主任

OpenCV-Python

鸿蒙网络编程系列50-仓颉版TCP回声服务器示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

Java性能测试利器:JMH入门与实践|得物技术

得物技术

Java JVM JMH JMH性能基准测试

(br2025)Bridge 2025 v15.0.0 最新破解版下载安装

Rose

Premiere Pro 2025(pr2025) v25.0中文破解版

Rose

Spark要解决的核心问题

paver1023

spark

vivo 企业云盘服务端实现简介

vivo互联网技术

企业云盘

轻量级低代码:为复杂业务场景打造灵活解决方案

天津汇柏科技有限公司

低代码平台

过等保三级需要堡垒机吗?为什么?

行云管家

等保 堡垒机 等保测评 等保三级

1688商品详情数据接口(1688.item_get)丨1688API接入指南

tbapi

1688商品详情接口 1688API

Maxon Cinema 4D 2024激活补丁(C4D 2024下载安装)

Rose

ABBYY FineReader OCR:文字识别超神,精准转录无误差

Rose

分身应用还谈个人隐私?

iofomo

安全 隐私保护 微信分身

SmartGit for Mac 老牌Git客户端 v22.1.1正式激活版

Rose

macOS 14 Sonoma(最新MacOS系统) pkg完整安装包14.7.1正式版

Rose

DNS滥用:全球网络安全的新挑战

防火墙后吃泡面

业务系统的基石:数据库是如何构建数字世界的?

小鲸数据

山西大同等保测评机构地址在哪里?电话多少?

行云管家

等保 等级保护 等保测评 大同

解锁电商新纪元:1688 API接口图片搜索商品——拍立淘深度探索

代码忍者

API 接口 pinduoduo API

异步编程在ArkTS中具体怎么实现?

威哥爱编程

HarmonyOS ArkTS HarmonyOS NEXT

Python哪个框架合适开发淘宝商品详情api?

科普小能手

API 框架 -python Python开发 API 接口

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