Pkl:Apple 新配置语言,可以取代 JSON 和 YAML
Pkl (发音为“Pickle”)是 Apple 对配置即代码的诠释。它介于 JSON 等传统格式和 Python 等完整编程语言之间,旨在使配置更可靠、更易于维护。
Pkl 之所以吸引我的注意,是因为它并没有试图成为另一种通用编程语言。相反,它专注于解决一个特定问题:让配置变得不那么麻烦。
作为一个曾经无数次为 YAML 缩进和 JSON 缺少注释而苦恼的人,我对 Apple 通过 Pkl 带来的变化感到好奇。
Pkl 有何不同?
配置文件通常一开始很简单,但随着时间的推移会变得越来越复杂。想想一个典型的部署配置 - 它可能从几个环境变量开始,但会演变成涵盖多个服务的数百行。YAML 和 JSON 难以应对这种复杂性,而一般的编程语言可能会过于复杂。
Pkl 不仅仅是另一种配置格式。它是静态配置格式(如 JSON/YAML)和编程语言的混合体。你可以认为它具有 YAML 的简单性,但又具有在你需要时真正执行操作的能力。
// Basic config |
上面的代码展示了 Pkl 的混合特性。它与 YAML 一样可读,但像编程语言一样支持抽象和重用。
Pkl 强制执行不变性 - 一旦定义了值,就无法更改。这可以防止一整类配置错误,即值被意外修改。该语言还包括通过架构进行的内置验证:
class DatabaseConfig { |
该模式在评估时验证您的配置,在错误进入生产之前捕获它们。
Pkl 旨在适应现有的工作流程。它可以输出 JSON、YAML、XML 和 Java Properties 文件。这意味着您可以使用 Pkl 为需要这些格式的工具生成配置。它还提供多种语言的集成库:
- JVM (Java and Kotlin)
- Swift
- Go
这些库让应用程序直接读取和解析 Pkl 配置,无需中间 JSON 或 YAML 文件。
考虑一个常见的微服务设置。每个服务可能需要类似但略有不同的配置。在 YAML 中,这通常会导致复制粘贴块并进行微小更改。Pkl 通过继承和组合更优雅地处理此问题。
// Base application config with shared defaults |
语法虽然简洁,但却引入了另一种做事方式。 我们已经有了 YAML、TOML、JSON5 和 HCL。 它们都承诺解决配置问题,但现在又出现了另一个竞争者。
配置领域的这种碎片化实际上可能会使情况变得更糟,而不是更好。 验证功能虽然令人印象深刻,但也可以通过 JSON Schema 或 OpenAPI 规范来实现,这些工具已经得到了业界的广泛采用和支持。
Pkl 真的能解决现有工具无法解决的问题吗?
纵观苹果公司自己的生态系统,有趣的是他们主要使用信息属性列表和 JSON 进行平台配置。 如果 Pkl 有如此显著的改进,为什么苹果公司自己的产品没有更广泛地使用它呢?