SOML 是 Sindre's Objectively Marvelous Language 的缩写,是一种旨在兼顾编写体验与严格解析规则的配置格式。其核心理念是:值的类型必须源自其语法,绝不能源自其内容。这一设计选择解决了 YAML 中的常见痛点,例如 `country: no` 可能会被错误地解析为布尔值 `false`,因为解析器是根据文本内容来猜测类型的。在 SOML 中,字符串必须始终带有引号;如果没有引号,该值必须是数字、日期、瞬时值、持续时间或关键字,否则文件将报错。
SOML 通过移除它认为有问题的特定“噪音”和“便利功能”,从而区别于 JSON 和 YAML。它去除了 JSON 所要求的花括号、引号和逗号,并允许在几乎任何地方插入注释。然而,它保留了 JSON 的严格性,禁止重复键,并确保整数和浮点数等类型保持独立(例如,`3` 和 `3.0` 是不同的类型)。与在不同解析器之间可能表现出不可预测性的 YAML 不同,SOML 使用单一语法来表示列表和映射,并提供对日期、瞬时值和持续时间的原生支持。例如,像 `30s` 这样的持续时间被视为真实值,无需读者去猜测原始数字的单位。
与 TOML 相比,SOML 引入了顶级数组和块注释等功能,同时解决了 TOML 的“隐藏作用域”问题。在 TOML 中,一个键的含义可能取决于它之前出现的内容,且点路径的行为可能因解析器而异。SOML 使用花括号来明确对象边界,确保一个键始终属于将其包围的花括号。此外,SOML 提供了一种规范形式,其中相等的值会产生相等的字节,这对于哈希计算和签名至关重要。虽然该项目目前处于草案规范阶段,但它包含了一套包含近 1,000 个案例的符合性测试套件,以确保每个实现都能以完全相同的方式读取文件。然而,由于它仍是草案,目前除了符合性测试套件之外,尚无关于特定语言库或生产生态系统的相关信息。
