AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

程序踩内存后,应该怎么排查

linux大本营

进程 内存管理 内存泄漏 C++

c语言实现timer的10个技术点

linux大本营

进程 定时器, Timer 文件描述符

生活中的不确定性,如何应对?

Jack

WebIntents 翻身战,操作系统实现无缝集成的王牌

鼎道智联

AI

lwip_recv_tcp阻塞读取数据代码

linux大本营

TCP 阻塞队列

OpenCV图像模糊操作(1) | 社区征文

A小调协奏曲

OpenCV C++ 三周年连更

小程序自定义组件开发

程序员海军

小程序 三周年连更

一文读懂物联网 MQTT 协议之实战篇

老周聊架构

三周年连更

Java EE应用服务器的事务管理

mazhen

Java transaction JavaEE

火山引擎边缘云,助力业务敏捷创新

火山引擎边缘云

CDN 边缘计算 火山引擎 边缘云

怎么用systemd进行进程守护

linux大本营

Linux 进程 守护进程

xnginx在安全网关的应用场景

linux大本营

openresty 网关 web服务器

C++如何拿到线程池的返回值

linux大本营

线程池 C++

挑战 30 天学完 Python:Day10 循环语句

MegaQi

Python3 挑战30天学完Python 三周年连更

薪资结构重铸: Zebec将业务范围扩大到Web2薪资管理领域

股市老人

华为云 OpenTiny 跨端、跨框架企业级开源组件库项目落地实践直播即将开启!

Kagol

开源 前端 Vue 3 UI组件库

io_uring的10个技术点

linux大本营

高并发 异步 零拷贝 io_uring

OpenResty接口的详细讲解

linux大本营

负载均衡 反向代理 openresty 网关 HTTP服务

Django笔记十二之defer、only指定返回字段

Hunter熊

Python django defer only

AI能训练出符合“核心价值观”的人工智能吗?

FN0

人工智能 ChatGPT Claude

AI视觉实战1:实时人脸检测

轻口味

android AI 三周年连更

OceanBase 4.1解读:我们想给用户一个开箱即用的OceanBase部署运维工具

OceanBase 数据库

数据库 oceanbase

算法题每日一练:组合总和 II

知心宝贝

数据结构 算法 前端 后端 三周年连更

借由Net5.5G,看到运营商的新沧海

脑极体

5.5G

用户痛点与根因识别:解锁企业数字化转型成功的关键

L3C老司机

Go HTTP 调用

陈明勇

Go golang HTTP 三周年连更

一键生成通用的web服务(gin)完整项目代码,开发效率至少提升2倍

vison

golang Web gin框架 代码自动生成

2023-04-20:有一堆石头,用整数数组 stones 表示 其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎 假设石头的重量分别为 x 和

福大大架构师每日一题

golang 算法 rust 福大大

大型商业银行的超级App是如何“组装”而成?

Onegun

超级app 超级应用

Android动画之帧动画

芯动大师

android App 三周年连更

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