速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案

SphereEx

数据库 ShardingSphere SphereEx #开源

为你的“架构”安排定期体检吧!

凌晞

构架 软件架构治理 架构治理

C++内存分区模型分析与实例以及扩展

CtrlX

c++ 前端 程序员进阶 后端、 8月月更

空间数据库开源路,超图+openGauss风起禹贡

这不科技

opengauss

小程序容器+自定义插件,可实现混合App快速开发

Speedoooo

小程序 插件 APP开发

dvwa 通关记录1 - 暴力破解 Brute Force

Todd-Lee

渗透测试 DVWA

leetcode 204. Count Primes 计数质数 (Easy)

okokabcd

LeetCode 算法与数据结构

物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)

刘悦的技术博客

多线程 协程 多进程 Python3 Python.

SENSORO成长伙伴计划 x 怀柔黑马科技加速实验室丨以品牌力打造To B企业影响力

SENSORO

品牌 产业生态 创新生态

使用常见问题解答软件的好处有哪些?

Geek_da0866

经验共享|在线文档协作:企业文档处理的最佳选择

Baklib

面试突击70:什么是粘包和半包?怎么解决?

王磊

Java 面试题

微软校园大使喊你来秋招啦!

DawnMagnet

彻底透彻Docker常用网络模式及应用场景

知识浅谈

开源 8月月更

突破边界,华为存储的破壁之旅

脑极体

如何给 UE4 场景添加游戏角色

HelloWorld杰少

c++ 游戏 UE5 8月月更

系统可用性:SRE口中的3个9,4个9...到底是个什么东西?

董哥的黑板报

运维 后端 可用性 SRE

【LeetCode】设计食物评分系统Java题解

Albert

LeetCode 8月月更

开源一夏 | 手撸代码,Redis发布订阅机制实现

知识浅谈

开源 8月月更

Godaddy域名解析速度慢问题以及如何使用DNSPod解析解决

CtrlX

Hexo 域名解析 DNS服务器 域名配置 8月月更

Java中的引用

flow

签约计划第三季

企业公众号文章写作方向:如何写出读者认可的优质内容

石头IT视角

Android编译系统初探

桑榆

8月月更

使用JDK的同步容器时,应该避免那些坑

华为云开发者联盟

后端 开发 华为云

让你10分钟就能看懂Linux文件权限(超级详细、超级简单!!!)

Albert Edison

Linux centos linux 文件权限控制 8月月更

SRv6 L3VPN的工作原理

穿过生命散发芬芳

8月月更 SRv6

Serverless基础知识

阿泽🧸

Serverless 8月月更

【Go实现】实践GoF的23种设计模式:迭代器模式

元闰子

Go 设计模式 迭代器模式

关于解决Hexo常见报错的处理以及上传时出现errorSpawn错误的详细说明

CtrlX

Hexo Blog 报错 博客搭建 8月月更

Linux性能调优之内存负载调优的一些笔记

山河已无恙

签约计划第三季

【SeaTunnel】从一个数据集成组件演化成企业级的服务

Apache SeaTunnel

大数据 微服务 数据处理 数据集成 大数据 开源

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