写点什么

外部 DSL:成功与失败的因素

  • 2008-12-23
  • 本文字数:903 字

    阅读完需:约 3 分钟

领域特定语言持续升温的背景之下, Michael Feathers 对外部 DSL 提出了一些看法,包括它们的优点、缺点,以及技术之外的成功和失败因素。他强调,外部 DSL“进一步解放了你的双手”,允许你建立“一套完整的语法,并直接根据特定领域的需要去调整”,然而更重要的是,一旦公司使用了它们,就代表着承担了一种重大的义务。并且这种“义务并不随着软件实现的完工而结束”。

由于内部 DSL 专注于特定的领域,它可能带来高昂的维护成本,因为你需要专业的技能才能应用 DSL 应对变化。同样的原因,使用外部 DSL 也使得公司的招聘变得更困难,尤其在雇用领域专家的时候更是如此:

让我们面对现实吧,如果你正在寻找工作,那么希望在简历上写点儿什么?写你熟悉一种专属于某一家公司的语言,还是一种整个业界都熟知的语言?

一个非常流行的例子是 Erlang。今天,人们正在强烈地关注 Erlang,但是我们不应该忘记,在某种程度上,它曾经被 Ericsson 放弃,因为 Ericsson 担心自身招聘和培养开发者的能力。很多人都知道 Erlang 的故事,但是他们没有意识到这种场景在业界有多普遍。我看过很多的遗留代码,其中的很大一部分代码都是用公司“自产自销”的语言开发的,而公司在支持这些代码的时候就遇到了麻烦。

因此,Michael Feathers 的建议就是,对于外部 DSL 来说,“成功的决定因素远远不止技术方面”。公司只有客观地评估了将要承担的负担,决定即使在“不利的商业环境下”也不退缩,才能真正地释放外部 DSL 的威力。除了这些以外,Feathers 还罗列了一些如何降低采纳外部 DSL 之代价的建议:

  1. 如果你创建了一套外部 DSL,那么考虑将它开源,或者至少考虑在业界形成一个围绕它的组织。这样可以在一定程度上降低维护的开销,也能避免招聘的麻烦。
  2. 如果你不能或者不愿向外界开放你的 DSL,那么也不要指望你的开发者会完全忠实地使用这些 DSL。否则,你就要为同等能力的开发者支付更多的薪水。在协商薪水的时候,公司就要为使用小众(little known)技术的开发者多付出一些了。

内嵌式 DSL 是值得考虑的另一种选择,因为根据作者的观点,内嵌式 DSL 更容易构建,并具有很多与外部 DSL 相同的优势。

查看英文原文: External DSLs: Success and Failure Factors

2008-12-23 03:492111
用户头像

发布了 53 篇内容, 共 16.5 次阅读, 收获喜欢 2 次。

关注

评论

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

Airtest入门及多设备管理总结

行者AI

自动化测试

webrtc stream,source,track

webrtc developer

揭开MySQL索引神秘面纱

咔咔

MySQL 索引

如何避免成为一个油腻的中年猥琐男?

石云升

读书笔记 中年 28天写作 4月日更

霸榜GitHub!银四匠心之作:拼多多/蚂蚁/百度面经分享

Java 编程 程序员 架构 面试

2021 优质前端资源精选 —— 持续更新,欢迎共建

清秋

大前端 教程 资源 社区 4月日更

来学Python啦,用Python详细讲解温度转换器

Bob

Python Python 游戏编程 4月日更

学习笔记

山@支

我叫小M,立志建立MySQL帝国。

yes

MySQL

从零开始写游戏服务器①:前期了解

Integer

c

MySQL查询优化必备

咔咔

MySQL 查询优化

在华为云专属月中,寻觅互联网更需要的云味道

脑极体

Wireshark数据包分析学习笔记Day28

穿过生命散发芬芳

Wireshark 数据包分析 4月日更

容器&服务: ClickHouse与k8s架构

程序员架构进阶

Kubernetes Prometheus Clickhouse 28天写作 4月日更

优秀程序员必备技能之如何高效阅读源码

中间件兴趣圈

方法论 源码解读

聪明人的训练(八)

Changing Lin

4月日更

解Bug之路-主从切换”未成功”?

无毁的湖光

数据库 主从环境

Edge 修改使用的默认搜索引擎

HoneyMoose

starforce源码解读二:游戏入口

风翱

Unity 源码解读 4月日更

百度联合研究成果登上《自然》子刊 推动人才管理大数据智能化转型

百度大脑

百度 AI

如何保护您的SaaS应用程序?

龙归科技

网络安全 SaaS 远程工作 单点登录

你对JVM垃圾收集器了解多少?面试官夺命13问谁碰谁不迷糊啊!

北游学Java

Java JVM 垃圾回收

webrtc 开启新特性

webrtc developer

知乎高赞:为什么同样是分布式架构的Kafka需要Leader而Redis不需要

中间件兴趣圈

分布式 raft 一致性 数据分片

7.1 Go语言从入门到精通:Cobra介绍

xcbeyond

cobra Go 语言 4月日更

飞桨与宸曜科技完成兼容性认证

百度大脑

认证 飞桨

Python OpenCV 泛洪填充,取经之旅第 21 天

梦想橡皮擦

Python OpenCV 4月日更

c 语言思维地基搭建(vis2013编译+第一个c语言程序)

-jf.

4月日更

上来就问MySQL事务,瑟瑟发抖...

咔咔

MySQL 事务

MVCC:听说有人好奇我的底层实现

咔咔

MySQL MVCC

众盟科技:直播浪潮下,医美行业的私域营销之变

脑极体

外部DSL:成功与失败的因素_开源_Sadek Drobi_InfoQ精选文章