1 个不稳定版本
0.4.0 | 2021 年 4 月 6 日 |
---|
#12 在 #starlark
21KB
250 行
Rust 中的 Starlark
注意: 此库的 0.4.0 版本将维护者从 Google 更改为 Facebook。
本项目提供了 Starlark 语言的 Rust 实现。[Starlark(原名 Skylark)是一种受 Python3 启发的确定性语言,用于在 Bazel 和 Buck 等构建系统中的配置。该项目最初在此 [仓库](https://github.com/google/starlark-rust) 中开发,其中包含更完整的历史记录。
Starlark 至少有三个实现,[一个在 Java 中](https://github.com/bazelbuild/starlark),[一个在 Go 中](https://github.com/google/starlark-go),以及此处的 Rust 实现。我们主要遵循 Starlark 标准。
特性
本项目具有以下特性
- Rust 类型与 Starlark 之间的易用互操作性。
- 对 Rust 友好的类型,因此冻结值是
Send
/Sync
,而非冻结值则不是。 - 垃圾回收 值在 堆 上分配。
- 可选的运行时检查 类型。
- 一个代码检查器,用于检测 Starlark 中的代码问题。
- 通过 LSP 和 DAP 支持的形式进行 IDE 集成。
本项目还有三个非目标
- 我们不旨在在版本之间保持 API 稳定性,更倾向于快速迭代并尽可能完善 API。但我们遵循 SemVer。
- 我们不旨在最小化依赖关系,更倾向于保持一个功能强大的包。但如果某些依赖项变得棘手,我们可能会添加功能标志。
- 我们不针对Rust稳定版进行开发,而是更倾向于利用Rust的不稳定特性来尽可能提高我们的代码质量。我们希望最终有足够的功能得到稳定,这样使用稳定版就又变得合理了。
组件
有三个组件
starlark_module
,这是一个proc-macro crate,它定义了#[starlark_module]
注解,可以应用于Rust代码,使其成为Starlark模块可用。这个库是starlark
库的依赖。starlark
库,这是一个定义了解析器、评估器和标准库的库。希望将Starlark嵌入到其环境中的项目(带有额外的类型、库函数和功能)将使用这个库。starlark
二进制文件,提供交互式评估、IDE功能和linter,通过命令行暴露。如果你想要使用纯Starlark(但如果你这样做,考虑使用Python3)或者作为实验的平台,这将很有用。大多数项目最终都会在starlark
库的基础上实现一些功能,并包含他们特定的额外类型等。
兼容性
在本节中,我们概述了不遵循Starlark规范的地方。
- 我们有大量的扩展,例如类型注解、递归、顶层
for
。 - 我们目前还不支持Starlark的最新添加功能,如浮点数或字节。
- 我们目前仅限于32位整数。构造更大的值会导致Starlark因溢出错误而失败。
- 我们的字符串在多个方面不合规,通常返回代码点而不是单字符字符串,并且性能较差。
- 在某些情况下,创建循环数据结构可能会导致栈溢出。
发布版本
- 检查GitHub Actions是否为绿色。
- 将自上次发布以来的更改更新到
CHANGELOG.md
。此链接可以提供帮助(更新以比较上次发布)。 - 更新两个
Cargo.toml
文件的版本号。如果没有不兼容的更改,则通过0.0.1升级,如果有,则通过0.1.0升级。将starlark
中的依赖项升级到最新的starlark_module
版本。 - 将文件
CHANGELOG.md
、LICENSE
和README.md
复制到每个starlark
和starlark_module
子目录中。 - 运行
cargo publish --dry-run --allow-dirty
,然后在没有--dry-run
的情况下,首先在starlark_module
目录中,然后是starlark
目录中。 - 使用
v0.X.Y
创建一个GitHub release,使用starlark
版本作为名称。
许可证
Starlark Rust遵循Apache License,版本2.0许可,如《LICENSE》文件所示。
依赖项
约1.5MB
约37K SLoC