在当今的软件开发领域,配置文件扮演着至关重要的角色。它们允许开发者在不修改代码的情况下调整应用程序的行为。YAML(YAML Ain’t Markup Language)因其可读性和简洁性而成为了配置文件的热门选择。然而,传统的YAML文件存在一个局限性——它们是静态的。这意味着,一旦配置文件被加载,其内容就无法根据不同的环境或条件进行动态调整。但现在,有了YAMLScript,这一切都将改变。
YAMLScript是一个新的YAML加载器,它为普通的YAML配置文件赋予了“超能力”。通过使用YAMLScript作为YAML加载器,您可以动态地包含来自其他数据文件(如YAML、JSON、XML、CSV等)的数据,从网络或数据库中拉取数据。1您可以过滤、映射、合并、归约、生成、连接、插值和操作数据,实现您所需的任何功能。如果您曾希望YAML文件能做得更多,YAMLScript将满足您的需求。
YAMLScript的一个显著特点是它允许您在数据文件中任何位置轻松混入逻辑。另一方面,如果您只需要一个稳定的YAML 1.2加载器(不包含任何代码评估魔法),那么YAMLScript也值得一试。所有有效的YAML 1.2核心模式文件也都是有效的YAMLScript文件!这意味着,您现有的任何YAML配置文件都可以使用。
下面是一个使用YAMLScript的YAML配置文件db-config.yaml的例子:
!yamlscript/v0base = : load('./db-defaults.yaml')# host: localhost# port: 12345# user: app# password: secretsecret = : load('secret.yaml')# dev: devsecret# stage: stagesecret# prod: prodsecretdata = : development : merge base : user : dev password : : secret.dev staging : merge base : host : staging-db.myapp.com production : merge base : host : prod-db.myapp.com user : prod password : : secret.proddefn main(level='development') :[^2^][2] get : data level从命令行运行:
$ ys --load db-config.yaml production{ "host" : "prod-db.myapp.com", "port" : 12345, "user" : "prod", "password" : "prodsecret"}默认情况下,YAMLScript输出JSON,但也可以通过运行以下命令输出YAML:
$ ys --load --yaml db-config.yamlhost: localhostport: 12345user: devpassword: devsecret注意,第一次我们运行命令时,我们传入了production级别的键,并且它加载了我们的“生产”数据。第二次我们运行命令时,我们没有传入键,所以它加载了默认的“开发”数据。我们通过main(level='development')指定了默认值。
您可以在像Python这样的编程语言中将YAMLScript用作常规YAML加载器库:
Python
import yamlscriptys = yamlscript.YAMLScript()text = open("db-config.yaml").read()[^3^][3]data = ys.load(text)AI-generated code. Review and use carefully. More info on FAQ.
它像PyYAML一样加载YAML数据文件,但增加了这些好处:YAMLScript库具有相同的API,并且在任何编程语言中工作方式完全相同。YAMLScript使用最新的YAML 1.2规范,消除了人们经常对YAML的抱怨。4您可以通过在文件开头添加一个!yamlscript/v0标签,为您的YAML文件添加动态操作。
YAMLScript不仅是一个新的、完整的、功能齐全的、通用的、函数式和动态编程语言,其语法编码在YAML中。5YAMLScript可用于编写新的软件应用程序和库。6下面是一个名为hello.ys的YAMLScript程序的例子:
#!/usr/bin/env ys-0defn main(name='world') : greet : namedefn greet(name) : say : "Hello, $name!"您可以从命令行运行此程序:
$ ys hello.ysHello, world!$ ys hello.ys Jack[^7^][7]Hello, Jack!YAMLScript可以将程序编译为本地二进制可执行文件。就像这样简单:
$ ys -b hello.ys$ ./hello JackHello, Jack!YAMLScript语言拥有您期望的现代编程语言的所有特性,包括使用内置和第三方库、定义自己的命名空间和函数、所有标准数据类型和结构、数百个经过实战测试的标准库函数以及与常见动态语言相当的合理性能。
安装ys - YAMLScript命令行工具
ys命令行工具是开始使用YAMLScript的最简单方法。它目前在Linux和macOS上可用,支持Intel和ARM。8您可以通过在终端中运行以下命令临时尝试ys(在您的shell会话期间):
$ . <(curl -sSL yamlscript.org/try-ys)这将在临时目录中安装ys,并将其添加到您当前shell会话的PATH环境变量中。或者,您可以通过以下命令安装最新版本:
$ curl -sSL yamlscript.org/install | bash[^9^][9]确保~/.local/bin在您的PATH环境变量中。要在其他位置安装或安装特定版本,请将PREFIX和/或VERSION环境变量设置为所需的值:
$ curl -sSL yamlscript.org/install | PREFIX=/some/dir VERSION=0.1.xx bash注意:默认的PREFIX是~/.local(如果您以root身份运行命令,则为/usr/local)。您也可以从源代码安装ys:
$ git clone https://github.com/yaml/yamlscript$ cd yamlscript$ make build$ make install$ export PATH=~/.local/bin:$PATH注意:预构建的二进制文件目前在一些较旧的内核上失败。如果您在使用预构建的二进制文件时遇到问题,请尝试从源代码构建。安装过程的最小依赖项是git、make、curl和bash。10(Linux上还需要libz-dev包。)
通过运行以下命令测试您的新ys安装:
$ ys --help或者:
$ ys --versionYAMLScript 0.1.42安装YAMLScript库
YAMLScript可以作为YAML加载器库(模块)安装在几种编程语言中。到目前为止,这些语言包括Clojure、Java、Perl、Python、Raku、Rust和Ruby。还有更多的语言正在开发中,目标是将其推广到使用YAML的每一种语言。目前要安装YAMLScript库,您需要安装语言库和匹配版本的libyamlscript.so。11对于Python,您可以这样做:
$ pip install yamlscript