写点什么

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

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

关注

评论

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

鸿蒙开发:基于ArkUI的儿童早教钢琴应用实现

chengxujianke

鸿蒙开发:ArkUI实现图书听书应用界面

chengxujianke

EMQX Cloud、TDengine Cloud 实现数据互通!联手打造端到端云上大数据解决方案

EMQ映云科技

鸿蒙开发:英语词汇学习应用的ArkUI开发实践

chengxujianke

鸿蒙开发:ArkUI在园林设计类应用中的实践

chengxujianke

浅谈企业应用中台的构建

天翼云开发者社区

企业应用中台

鸿蒙开发:ArkUI实现兴趣社群聊天界面

chengxujianke

鸿蒙开发:ArkUI实现美颜自拍功能

chengxujianke

鸿蒙运动开发:计算户外运动步频与步幅,与地图路线绘制

王二蛋和他的张大花

鸿蒙 os

鸿蒙开发:人才招聘类应用的ArkUI实践

chengxujianke

鸿蒙开发:政务服务类国风文创应用实践

chengxujianke

HarmonyOS NEXT 中级开发笔记:动漫社团社交应用的ArkUI实践

chengxujianke

鸿蒙开发:ArkUI实现儿童早教应用交互界面

chengxujianke

助力科学智能发展!上海人工智能实验室『AI4S攀登者行动计划』申请持续进行中!

ModelWhale

科学智能 AI4S

鸿蒙开发:旅游攻略应用的ArkUI实践

chengxujianke

鸿蒙开发:课程表应用开发实践

chengxujianke

玩转C++11多线程:让你的程序飞起来的std::thread终极指南

电子尖叫食人鱼

C#

AI-Ready TapData:如何基于 MCP 协构建企业级 AI 实时数据中枢?(含教程)

tapdata

实时数据平台 MCP协议 AI+数据 AI数据调用 企业数据中枢

鸿蒙开发:ArkUI实现旅游类机酒预订界面

chengxujianke

鸿蒙开发:基于ArkUI的小说漫画应用界面实践

chengxujianke

鸿蒙开发:政务办理类应用的ArkUI实践

chengxujianke

鸿蒙开发:假期日历应用实践

chengxujianke

鸿蒙开发:ArkUI实现语音笔记应用布局

chengxujianke

鸿蒙开发:ArkUI实现远程会议应用界面

chengxujianke

Kmesh v1.1.0 正式发布!官网焕新升级

华为云原生团队

云计算 容器 云原生

【CodeBuddy】三分钟开发一个实用小功能之:九宫格图片切割&生成器

jimaks

CSS

鸿蒙开发:ArkUI 实现早间新闻快速加载与流畅滚动

chengxujianke

鸿蒙开发:ArkUI实现相机滤镜组件的实践

chengxujianke

边缘云特点、应用实践和发展趋势浅析

天翼云开发者社区

边缘云 天翼云

鸿蒙开发:今日热点类应用开发实践

chengxujianke

阿里云基础网络技术5篇论文入选全球网络顶会NSDI

阿里技术

阿里云 论文

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