QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

阿里P6到P9的技术栈有哪些?Java程序员该如何准备学习?

收到请回复

Java 云计算 开源 架构 编程语言

互联网大厂裁员30%,仍靠第3版Java多线程编程笔记成功逆袭大厂

程序知音

Java 多线程 多线程与高并发 java架构师 后端技术

Sophon AutoCV Q&A大放送:如何加速视觉模型生产和落地(上篇)

星环科技

关于 NFTScan 支持以太坊合并(The Merge)的公告

NFT Research

以太坊 PoS

金九银十!100页6W字Java面试题,去大厂面试的程序员都说被问到过!

收到请回复

Java 云计算 开源 架构 编程语言

出海人反脆弱,那些遭遇「刺客」突袭的虐心瞬间

融云 RongCloud

白皮书 程序员、

自动化测试如何区分用例集合

老张

自动化测试 测试用例

UI设计培训主要学习内容是哪些

小谷哥

哪些人适合在Java培训机构学习

小谷哥

音视频开发成长之路与音视频知识点总结

C++后台开发

WebRTC ffmpeg 音视频开发 流媒体服务器开发 嵌入式音视频开发

优雅的MVC思想

叫练

MobTech袤博科技接入全国SDK管理服务平台,共建数智安全生态 | 新闻速递

MobTech袤博科技

大数据 数据安全

低代码平台选型6大能力:品牌/产品/技术/服务/安全/价值

优秀

低代码平台

上海大数据培训机构哪家好?

小谷哥

2022年汽车智能座舱市场分析

易观分析

汽车 智能座舱

北京UI设计学校怎么选?

小谷哥

美图SRE:一次线上大事故,我悟出了故障治理的3步9招

TakinTalks稳定性社区

故障 SRE实践

【9.9-9.16】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

武汉Java培训哪家靠谱

小谷哥

2022年,移动应用行业有哪些值得关注的技术趋势?

最新动态

阿里云弹性计算SRE实践:亿级调用量下的预警治理

TakinTalks稳定性社区

预警 告警体系 监控治理 SRE实践

设计模式简要介绍

六月的雨在InfoQ

Java 设计模式 单例模式 23种设计模式 9月月更

原生实现异步处理利器 —— Observable

掘金安东尼

前端 9月月更

大数据体系和SQL

孤衫

大数据 后端 sql 9月月更

哪款去水印工具好用?6款热门在线去水印工具对比评测

少油少糖八分饱

图片去水印 去水印 水印 水印消除

禅道的Bug管理流程介绍

禅道项目管理

测试 禅道 bug管理

JavaScript之面向对象

楠羽

JavaScript 笔记 9月月更

状态监测与故障智能诊断技术在能源动力机械内燃机的应用

PreMaint

设备预测性维护 设备状态监测 内燃机状态监测 内燃机故障诊断 设备故障诊断

Flink 引擎

孤衫

大数据 flink 9月月更

关于iPhone 14 Pro 的灵动岛设计的思考

宇宙之一粟

iphone 思考 设计 9月月更

5 大核心能力+1 套全局防护策略,星环科技 Defensor 构建企业数据安全护城河

星环科技

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