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

外部 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:491804
用户头像

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

关注

评论

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

架构误区系列10:不合理的分层

agnostic

软件分层

运维进阶训练营 -W09H

b1a2e1u1u

运维

HTTP请求首部字段

穿过生命散发芬芳

HTTP 12月月更

spaa 22

黄敏

基于Go的缓存实现

俞凡

架构

SAP MM SPED输出报错-No authorization for delivery from shipping point US##-之对策

SAP虾客

SAP MM SPED VL31N 公司间STO

架构训练营模块三作业

张建闯

架构实战营

数据可视化图表系列解析——饼图

Data 探险实验室

数据分析 可视化 数据可视化 可视化数据 可视化工具

WEB23

Lenyi

网络安全 CTF ctfshow 爆破

Web入门开发【二】

小院里的霍大侠

编程开发 初学者 入门实战 Web入门

Flink 在米哈游的应用实践

Apache Flink

大数据 flink 实时计算

【IntelliJ IDEA】连接https报错问题: E230001: Server SSL certificate verification failed:

No8g攻城狮

svn IDEA

OpenTelemetry系列 (四)| 如何使用Java Agent来实现无侵入的调用链

骑牛上青山

Java javaagent 调用链 OpenTelemetry 微服务调用链

学生管理系统

KING

【IntelliJ IDEA】idea 2018版本中没有SVN按钮或者图标的解决方法

No8g攻城狮

svn IDEA git 学习

SDK更新不了问题解决

芯动大师

android hosts SDK 教程

【web 开发基础】PHP 中的预定义数组详解续集 (48)

迷彩

post GET 文件上传 PHP基础 预定义数组

银行如何快速落地营销数字化?

中关村科金

人工智能 大数据 AI 数字化转型 数字化

启科QuSaaS真随机数解决方案与Amazon Braket结合实践

启科量子开发者官方号

人工智能 量子计算 随机数

Flink 1.16:Hive SQL 如何平迁到 Flink SQL

Apache Flink

大数据 flink 实时计算

数据库原理及MySQL应用 | 约束

TiAmo

主键约束 数据库· 12月月更

架构实战营 3-4 架构设计后期随堂练习

西山薄凉

「架构实战营」

2022年浪过的那些城市

SAP虾客

杭州 2022年 无锡 东莞 SAP项目

架构实战营 3-5 消息队列备选架构随堂练习

西山薄凉

「架构实战营」

安卓、iOS、小游戏三端同发?介绍给你一个新方式 - 普洱WebGL

僵尸浩

typescript 小游戏 Unity3D

Web入门开发【四】

小院里的霍大侠

Web 编程开发 初学者 入门实战

2022-12-25:etcd可以完全替代zookeeper,原因是k8s用的etcd,不用担心不成熟。请问etcd部署在k3s中,yaml如何写?

福大大架构师每日一题

云原生 k8s etcd k3s 福大大

Web入门:CSS下拉图片

小院里的霍大侠

JavaScript Web 初学者 入门者

SRE运维解密-应对过载

董哥的黑板报

微服务 SRE 限流 SRE实践

【架构设计】你的类足够“专一”吗

JAVA旭阳

Java 架构

FFA 2022 主会场 Keynote:Flink Towards Streaming Data Warehouse

Apache Flink

大数据 flink 实时计算

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