<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>YAML on 翟志军 Jack Zhai</title>
    <link>https://showme.codes/tags/yaml/</link>
    <description>Recent content in YAML on 翟志军 Jack Zhai</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>showme.codes</copyright>
    <lastBuildDate>Mon, 09 Nov 2026 09:55:35 +0800</lastBuildDate>
    <atom:link href="https://showme.codes/tags/yaml/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[译] 为什么你该放弃 YAML，改用 Jsonnet</title>
      <link>https://showme.codes/zh-cn/ditch-yaml-use-jsonnet/</link>
      <pubDate>Mon, 09 Nov 2026 09:55:35 +0800</pubDate>
      <guid>https://showme.codes/zh-cn/ditch-yaml-use-jsonnet/</guid>
      <description>&lt;p&gt;原文：&lt;a href=&#34;https://bargsten.org/wissen/jsonnet-getting-started/&#34;&gt;Why you should ditch YAML and use Jsonnet instead&lt;/a&gt;&lt;br&gt;
作者：Joachim Bargsten · 原文发表于 2023-01-14。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;译注：文中的“我”指原作者，工具和文档的相关描述保留原文发表时的语境。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我说不清自己究竟是什么时候想明白的。不过，看看 YAML 的格式和它的用法，我觉得这准是魔鬼的&lt;a href=&#34;https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell&#34;&gt;杰作之一&lt;/a&gt;。就像苍蝇被一大坨牛粪吸引，包括我在内的开发者，也被一股无形的力量推向了这种格式。&lt;/p&gt;
&lt;p&gt;事情本来可以很简单。能收拾配置乱摊子的替代方案多的是，有类型的、无类型的都有。可不不不，我们偏要用 YAML。我大概是在第一次看到 &lt;a href=&#34;https://helm.sh/docs/topics/charts/&#34;&gt;Helm chart&lt;/a&gt; 时想明白这件事的。过了一阵，我才捋清这套逻辑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Helm 是 Kubernetes 的包管理器。&lt;/li&gt;
&lt;li&gt;我把 Helm chart 写成“包”，好让别人复用。&lt;/li&gt;
&lt;li&gt;压根没人复用这些 chart。真有人复用，就会产生极其紧密的耦合，正是每篇讲 clean code 的博客都在警告的那一种。&lt;/li&gt;
&lt;li&gt;反复试错，直到跑通。&lt;/li&gt;
&lt;li&gt;就快搞定了，只差把&lt;a href=&#34;https://twitter.com/memenetes/status/1600898397279502336&#34;&gt;缩进调对&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;或者，这就是所谓的“&lt;a href=&#34;https://en.wiktionary.org/wiki/Arbeitsbeschaffungsma%C3%9Fnahme&#34;&gt;Arbeitsbeschaffungsmaßnahme&lt;/a&gt;”：人为增加工作量，好给更多开发者找点活干。&lt;/p&gt;
&lt;p&gt;我也说不准。&lt;/p&gt;
&lt;p&gt;YAML 的规范复杂得过了头，还会出现 &lt;a href=&#34;https://hitchdev.com/strictyaml/why/implicit-typing-removed/&#34;&gt;Norway Problem&lt;/a&gt; 这样的意外解析结果，可能存在安全问题，而且经常被滥用，拿来解决本不该由 YAML 解决的问题。&lt;/p&gt;
&lt;p&gt;还有什么替代方案？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://toml.io/en/&#34;&gt;TOML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hcl.readthedocs.io/en/latest/intro.html&#34;&gt;HCL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dhall-lang.org/&#34;&gt;DHALL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cuelang.org/&#34;&gt;CUE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nixos.org/manual/nix/stable/language/index.html&#34;&gt;Nix&lt;/a&gt; / &lt;a href=&#34;https://nickel-lang.org/&#34;&gt;Nickel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;还可以继续列下去……&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我开始尝试 &lt;a href=&#34;https://jsonnet.org/&#34;&gt;Jsonnet&lt;/a&gt; 和 &lt;a href=&#34;https://en.wikipedia.org/wiki/HOCON&#34;&gt;HOCON&lt;/a&gt;。HOCON 在 Java/Scala 圈子之外没多少人知道，其他语言对它的支持也就……一般般。&lt;/p&gt;
&lt;p&gt;那 Jsonnet 呢？我个人觉得，它在能力和简洁性之间拿捏得刚好。&lt;/p&gt;
&lt;h2 id=&#34;jsonnet-简介&#34;&gt;Jsonnet 简介&lt;/h2&gt;
&lt;p&gt;Jsonnet 是什么？简单说：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;面向应用和工具开发者的 data templating language。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以把它看成增强版 JSON。从技术上说，它是 JSON 的 superset，加入了一些编程语言结构。因此，Jsonnet 需要先“编译”或转换，通常输出为 JSON。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
