Show HN:我创建了 Confetti:一种配置语言文件格式
Confetti 是由我,Henry 创建的。
介绍 Confetti
Confetti 是一种 配置语言,它融合了 Unix 配置文件可读性和 S-expressions 的灵活性。它极简、无类型且具有倾向性。Schema 一致性由用户应用程序验证。 Confetti 并不与 JSON 或 XML 竞争,而是与 INI 竞争。
Kitchen Sink 示例#
以下示例使用了 Confetti 的大部分特性:
# 这是一个注释。
probe-device eth0 eth1
user * {
login anonymous
password "${ENV:ANONPASS}"
machine 167.89.14.1
proxy {
try-ports 582 583 584
}
}
user "Joe Williams" {
login joe
machine 167.89.14.1
}
实现#
Confetti 的标准实现是用 C11 编写的,可在 GitHub 上找到。 如果您想创建自己的 Confetti 实现,请查看 specification 并使用 官方一致性测试套件 测试您的实现。
理念#
简单和极简是 Confetti 的核心。一些格式,如 YAML,_非常_复杂(看看 它的规范 的大小!)而 Confetti 的规范简单而极简,并且可以在 几分钟内学会。
Confetti 在设计上是_无类型的_,其语法是可组合的。Confetti 提供了创建一切所需的原子,从简单的配置到文本文件格式,再到轻量级脚本。查看 各种示例 以获取灵感。
值得注意的特点:
- 无倾向性:Confetti 允许您定义自定义关键字,如
on
和off
,以及三态,如yes
、no
和maybe
。这与 TOML 等格式形成对比,后者强制使用关键字true
和false
。 - 本地化友好:Confetti 允许您用您的母语编写配置文件。这与 JSON 等格式形成对比,后者需要英语单词
null
、true
和false
以及西方数字0
到9
。 - 鼓励扩展:就像 Markdown 有不同的风格一样,我们鼓励您创建 Confetti 的独特风格。该 specification 定义了通用语言,其附件包括与语法兼容的扩展。
特性比较#
以下是 Confetti 与流行格式的比较:
Confetti | INI | JSON | TOML
---|---|---|---
Specification
Typeless
Localization Friendly | 1 | 2 | 2
Unicode Literals | 1
Multiline Literals
Comments
Hierarchical Structures
Intended Use Case | Configuration | Configuration | Data Interchange | Configuration
1 INI 没有 specification,因此对 internalization 和 Unicode 的支持取决于实现。
2 JSON 和 TOML 强制使用英语单词 true
和 false
以及西方数字 0
到 9
。