参考资料: 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 是需要调整的
![]() | 1 HelloAmadeus 2018-11-25 00:58:57 +08:00 ansible 在用,kubernetes 在用, 你只能是在你写的应用程序里面不用, 甚至你都不能决定你的应用程序里面不用 yaml。 你说出个天花板的理由, 也改变不了什么 。要么你就写个更好的, 而且给现在所有语言都写了能用于生产的 parser, 然后在批评 yaml, 那自然会有人给你点赞。 |
2 iamcoward 2018-11-25 01:06:31 +08:00 toml 怎么样呢?有没有了解的说说 |
![]() | 3 via 2018-11-25 01:31:46 +08:00 via iPhone 对于第一个例子我更宁愿相信是 parser 的锅而不是 yaml 本身的 |
![]() | 4 Trim21 2018-11-25 02:32:53 +08:00 ![]() 需要写 yaml 的时候我都是写 json 然后转换成 yaml... |
![]() | 5 trait 2018-11-25 03:01:10 +08:00 via iPhone @iamcoward toml 很不错,比起 yaml 长长的一串树结构,toml 的 table 可读性更高,一直是 rust 语言的包管理和工具链配置格式 |
6 buildblock 2018-11-25 03:36:51 +08:00 via iPhone ![]() 一般情况下 yml 就是拿来做配置的,几个月都不会碰一下,何必纠结这些东西呢。工具是用来解决问题的,不是让你爽的,好用从来都不是一个东西能否得到广泛使用的充分条件。 |
7 lovelybear 2018-11-25 08:36:00 +08:00 via Android 我倒觉得没必要太过纠结于 yaml 好或者不好,没有完美的编程语言,也没有完美的文件格式,与编程语言一样,配置文件格式没有优劣,一切都以适用性为主,哪种配置文件符合你的需要,哪种配置文件可以更快地帮助你完成开发,哪种配置文件就是最好的。 |
![]() | 8 yurun 2018-11-25 08:47:27 +08:00 同样不喜欢 yaml |
![]() | 9 lizheming 2018-11-25 09:20:22 +08:00 yaml 的规范具复杂...有时候加不加引号都需要考虑很久... |
![]() | 10 artandlol 2018-11-25 09:36:41 +08:00 via iPhone https://pulumi.io/ 一个管理 yaml 的编程语言,aws 出品 |
![]() | 11 zhengxiaowai 2018-11-25 10:00:03 +08:00 ![]() yaml 就一个优点可以胜过 json 了,yaml 可以注释 JSON 无法注释。 你想想看在好几百行的配置文件中,没有注释是一件多可怕的事情 |
12 vakara 2018-11-25 10:10:05 +08:00 via Android 写 yaml 还好,读地话,有时候需要游标卡尺… |
![]() | 13 hjc4869 2018-11-25 10:17:13 +08:00 以前我的项目经常用 yaml 做 config,现在全部换回 xml 了 |
![]() | 14 mcfog OP ![]() @via yaml parser 实现的不好其实不也还是标准太复杂了所以不容易做好么… @buildblock 知道优缺点才能更好的作出选择,开发快只是一点,可维护性,复杂性还有安全性都应该纳入选择的考量范围 @zhengxiaowai 我同意注释对于配置来说是必须的,因此 JSON 做配置并不明智,但这并不代表这就能成为选择 YAML 的理由,因为市面上常见的配置文件方案里,基本只有 JSON 不支持注释 |