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日

#813编码

MIT 许可证

230KB
5.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 或 Elixir 中的那种 match 语句,您将感到宾至如归。

Ryan 的关键原则

一开始可能会觉得在你的项目中添加一个额外的组件可能会过于复杂,甚至(天哪!)危险。然而,Ryan 的设计初衷就是为了解决你的主要担忧,并且故意限制了其功能范围。以下是在 Ryan 中你不能编写的功能完整的 Pacman 游戏代码

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

当然,可以重新配置导入系统以读取任何任意的信息来源,也可以创建 本地扩展 来打破这些保证。可能性是无限的。然而,这些是出厂时提供的合理默认值。

依赖项

~4–13MB
~146K SLoC