[译] 为什么你该放弃 YAML,改用 Jsonnet
原文:Why you should ditch YAML and use Jsonnet instead 作者:Joachim Bargsten · 原文发表于 2023-01-14。 译注:文中的“我”指原作者,工具和文档的相关描述保留原文发表时的语境。 我说不清自己究竟是什么时候想明白的。不过,看看 YAML 的格式和它的用法,我觉得这准是魔鬼的杰作之一。就像苍蝇被一大坨牛粪吸引,包括我在内的开发者,也被一股无形的力量推向了这种格式。 事情本来可以很简单。能收拾配置乱摊子的替代方案多的是,有类型的、无类型的都有。可不不不,我们偏要用 YAML。我大概是在第一次看到 Helm chart 时想明白这件事的。过了一阵,我才捋清这套逻辑: Helm 是 Kubernetes 的包管理器。 我把 Helm chart 写成“包”,好让别人复用。 压根没人复用这些 chart。真有人复用,就会产生极其紧密的耦合,正是每篇讲 clean code 的博客都在警告的那一种。 反复试错,直到跑通。 就快搞定了,只差把缩进调对。 或者,这就是所谓的“Arbeitsbeschaffungsmaßnahme”:人为增加工作量,好给更多开发者找点活干。 我也说不准。 YAML 的规范复杂得过了头,还会出现 Norway Problem 这样的意外解析结果,可能存在安全问题,而且经常被滥用,拿来解决本不该由 YAML 解决的问题。 还有什么替代方案? TOML HCL DHALL CUE Nix / Nickel 还可以继续列下去…… 我开始尝试 Jsonnet 和 HOCON。HOCON 在 Java/Scala 圈子之外没多少人知道,其他语言对它的支持也就……一般般。 那 Jsonnet 呢?我个人觉得,它在能力和简洁性之间拿捏得刚好。 Jsonnet 简介 Jsonnet 是什么?简单说: 面向应用和工具开发者的 data templating language。 可以把它看成增强版 JSON。从技术上说,它是 JSON 的 superset,加入了一些编程语言结构。因此,Jsonnet 需要先“编译”或转换,通常输出为 JSON。 ...