6个版本

0.2.3 2023年10月16日
0.2.2 2023年8月16日
0.2.0 2023年2月18日
0.1.1 2023年2月9日
0.1.0 2023年1月30日

#1109 in 编码


ryan-cli 中使用

MIT 许可证

220KB
5K SLoC

Crates.io PyPI NPM

Docs.rs Ryan license

Ryan:为实用程序员设计的配置语言

Say hello to Ryan!
欢迎使用Ryan!

Ryan是一种生成JSON(因此也是YAML)输出的最小化编程语言。它内置对变量、导入和函数调用的支持,同时保持简单。这些附加功能的目标是减少在维护大量的配置文件代码库时的代码重用。它还可以用作创建过于复杂的CLI界面的替代品。不确定值应该存储在文件中还是环境变量中?为什么不声明一个包含所有内容的巨大配置文件呢?您让用户决定值从何而来,为他们提供一个灵活的界面,同时保持您一方的简单性。Ryan在保持用户代码简短和可维护的同时,搭建了这座桥梁。

Ryan资源

如何使用Ryan

单行命令(Linux,MacOS)

将以下命令复制并粘贴到您喜欢的控制台中

curl -L -Ssf "https://raw.githubusercontent.com/tokahuke/ryan/main/install/$(uname).sh" \
    | sudo sh

运行此脚本需要 sudo 权限(此安装为全局安装)。

Windows

访问Ryan仓库并下载与Windows对应的压缩文件。解压并将其移动到合适的位置!或者...

使用 cargo

您可以通过从crates.io安装CLI来运行Ryan

cargo install ryan-cli

集成到您的应用程序中!

根据您的语言,您可以从标准软件包管理器中安装Ryan的绑定

cargo install ryan          # Rust
pip install ryan-lang       # Python
npm install ryan-lang-web   # JavaScript (web)
npm install ryan-lang-node  # JavaScript (NodeJS)

这和X类似吗?

是的,Ryan是我对Dhall和Jsonnet不满的产物。我两者都喜欢和不喜欢很多内容。Ryan是两者之间的一个有见地的中间选择,具有以下功能:

  • 字符串相等比较器(是的,这是一回事)。
  • 类型断言。Ryan不是静态类型,但您可以选择性地注释某些内容以确保存在某些类型一致性。
  • 模式匹配。如果你喜欢 Python 或 Rust 或任何其他语言的 match 语句,你会在 Elixir 中感到非常熟悉。

Ryan 的关键原则

一开始可能会觉得在你的项目中添加一个东西可能会过于复杂,甚至(天哪!)危险。然而,Ryan 是考虑到你的主要担忧而创建的,并且是 有意识地 限制其范围的。以下是你在 Ryan 中无法编写一个功能完整的 Pacman 游戏的原因

  1. (可配置)封闭性:没有 print 语句或其他任何对语言本身的副作用。导入系统是数据进入 Ryan 的唯一途径,甚至这也可以轻松禁用。即使 Ryan 不是完全封闭的,也可以用几行额外的代码实现。
  2. 图灵不完备性:这主要与循环有关。没有 while 语句,你也不能在 Ryan 中递归。虽然你可以迭代数据,但你只能以预先批准的方式这样做。这样做是为了确保每个 Ryan 程序都能保证最终完成执行。
  3. 不可变性:Ryan 中的所有内容都是不可变的。一旦声明了一个值,它将保持不变直到其存在结束。当然,你可以通过用另一个值重新声明它来 阴影 一个变量,但这将是一个全新的变量。

当然,你可以重新配置导入系统以从任何任意信息源读取,也可以创建 本地扩展 以打破所有这些保证。可能性是无限的。然而,这些是开箱即用的合理默认值。

依赖关系

~4MB
~80K SLoC