感觉很少有人真的了解 yaml(的缺点),很多人了解的 yaml 其实仅限于 json 语法糖范围 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mcfog
V2EX    程序员

感觉很少有人真的了解 yaml(的缺点),很多人了解的 yaml 其实仅限于 json 语法糖范围

  •  4
     
  •   mcfog
    litphp 2018-11-24 23:57:26 +08:00 via Android 8602 次点击
    这是一个创建于 2513 天前的主题,其中的信息可能已经有所发展或是发生改变。

    参考资料: https://arp242.net/weblog/yaml_probably_not_so_great_after_all.html

    几个 point:

    yaml 特别复杂,spec 比 xml 更长,是 json 的十倍多,toml 的七倍多

    yaml 复杂在哪里?比 json 超集的地方? 可以表示各种语言原生的类型

    yaml 有很多相关的安全问题,因为 parse 的时候是可能构造各种东西的

    yaml 宣称的可移植性其实并不成立,除非去掉很多强大的特性

    我能理解几乎所有人用说 yaml 的时候,都其实只在说“不超过 json 表达能力的“那个 yaml 的子集,但我希望能让更多人知道其实全集的 yaml 是个问题特别多的东西,另外用 yaml 库 parse 用户输入的时候,请务必多看看文档,可能会有很多 option 是需要调整的

    14 条回复    2018-11-25 11:32:45 +08:00
    HelloAmadeus
        1
    HelloAmadeus  
       2018-11-25 00:58:57 +08:00
    ansible 在用,kubernetes 在用, 你只能是在你写的应用程序里面不用, 甚至你都不能决定你的应用程序里面不用 yaml。 你说出个天花板的理由, 也改变不了什么 。要么你就写个更好的, 而且给现在所有语言都写了能用于生产的 parser, 然后在批评 yaml, 那自然会有人给你点赞。
    iamcoward
        2
    iamcoward  
       2018-11-25 01:06:31 +08:00
    toml 怎么样呢?有没有了解的说说
    via
        3
    via  
       2018-11-25 01:31:46 +08:00 via iPhone
    对于第一个例子我更宁愿相信是 parser 的锅而不是 yaml 本身的
    Trim21
        4
    Trim21  
       2018-11-25 02:32:53 +08:00   3
    需要写 yaml 的时候我都是写 json 然后转换成 yaml...
    trait
        5
    trait  
       2018-11-25 03:01:10 +08:00 via iPhone
    @iamcoward toml 很不错,比起 yaml 长长的一串树结构,toml 的 table 可读性更高,一直是 rust 语言的包管理和工具链配置格式
    buildblock
        6
    buildblock  
       2018-11-25 03:36:51 +08:00 via iPhone   1
    一般情况下 yml 就是拿来做配置的,几个月都不会碰一下,何必纠结这些东西呢。工具是用来解决问题的,不是让你爽的,好用从来都不是一个东西能否得到广泛使用的充分条件。
    lovelybear
        7
    lovelybear  
       2018-11-25 08:36:00 +08:00 via Android
    我倒觉得没必要太过纠结于 yaml 好或者不好,没有完美的编程语言,也没有完美的文件格式,与编程语言一样,配置文件格式没有优劣,一切都以适用性为主,哪种配置文件符合你的需要,哪种配置文件可以更快地帮助你完成开发,哪种配置文件就是最好的。
    yurun
        8
    yurun  
       2018-11-25 08:47:27 +08:00
    同样不喜欢 yaml
    lizheming
        9
    lizheming  
       2018-11-25 09:20:22 +08:00
    yaml 的规范具复杂...有时候加不加引号都需要考虑很久...
    artandlol
        10
    artandlol  
       2018-11-25 09:36:41 +08:00 via iPhone
    https://pulumi.io/
    一个管理 yaml 的编程语言,aws 出品
    zhengxiaowai
        11
    zhengxiaowai  
       2018-11-25 10:00:03 +08:00   1
    yaml 就一个优点可以胜过 json 了,yaml 可以注释 JSON 无法注释。

    你想想看在好几百行的配置文件中,没有注释是一件多可怕的事情
    vakara
        12
    vakara  
       2018-11-25 10:10:05 +08:00 via Android
    写 yaml 还好,读地话,有时候需要游标卡尺…
    hjc4869
        13
    hjc4869  
       2018-11-25 10:17:13 +08:00
    以前我的项目经常用 yaml 做 config,现在全部换回 xml 了
    mcfog
        14
    mcfog  
    OP
       2018-11-25 11:32:45 +08:00   2
    @via yaml parser 实现的不好其实不也还是标准太复杂了所以不容易做好么…

    @buildblock 知道优缺点才能更好的作出选择,开发快只是一点,可维护性,复杂性还有安全性都应该纳入选择的考量范围

    @zhengxiaowai 我同意注释对于配置来说是必须的,因此 JSON 做配置并不明智,但这并不代表这就能成为选择 YAML 的理由,因为市面上常见的配置文件方案里,基本只有 JSON 不支持注释
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1012 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:37 PVG 02:37 LAX 11:37 JFK 14:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86