3个版本 (破坏性更新)
0.12.0 | 2024年2月9日 |
---|---|
0.11.0 | 2024年1月19日 |
0.10.0 | 2023年10月17日 |
#1327 在 解析实现
每月29次 下载
3MB
70K SLoC
Starlark在Rust中
GitHub上至少有这个仓库的几个副本,facebookexperimental/starlark-rust 是官方的。
此项目提供了 Starlark语言 的Rust实现。Starlark(之前称为Skylark)是一种受Python3启发的确定性语言,用于Bazel、Buck和Buck2等构建系统的配置,其中Buck2依赖于这个库。此项目最初是在 此仓库 中开发的,其中包含更详细的历史记录。
至少有三种Starlark实现,一个在Java中,一个在Go中,以及这个在Rust中。我们主要遵循Starlark标准。如果您想尝试Rust Starlark,可以克隆此仓库并运行
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ cargo run
$> 1+2
3
此项目由 Damien Martin-Guillerez 开始。此库的0.4.0版本将所有权从 Google 转移到Facebook。
了解更多信息
阅读 这篇博客文章 了解库的概述、Starlark背后的原因以及它如何适合您的项目。还有2分钟入门视频。
功能
此项目具有以下特点
- Rust类型和Starlark之间易于互操作。
- Rust友好的类型,因此冻结的值是
Send
/Sync
,而未冻结的值则不是。 - 垃圾收集 值分配在 堆 上。
- 可选的运行时检查 类型。
- 一个代码检查器,用于检测Starlark中的代码问题。
- 以LSP形式集成IDE。
- 进行了广泛的测试,包括模糊测试。
- 支持DAP。
本项目有三个非目标
- 我们不追求版本之间的API稳定性,更喜欢快速迭代并尽可能完善API。但我们会遵循SemVer。
- 我们不追求最小化依赖项,更喜欢保持一个功能强大的包。但如果某些依赖项很棘手,我们可能会添加功能标志。
组件
共有六个组件
starlark_derive
,一个定义Starlark所需宏的proc-macro crate。这个库是starlark
库的依赖项,它重新导出所有相关部分,不应直接使用。starlark_map
,一个具有内存高效有序/无序映射/集合以及其他在Starlark中有用数据结构的库。starlark_syntax
,一个具有Starlark的AST和解析函数的库。只有当您想直接操作AST时才使用。starlark
,主库,包含评估器、标准库、调试器支持以及其他许多部分。希望将Starlark嵌入其环境中的项目(具有额外的类型、库函数和功能)将使用此库。此库重新导出starlark_derive
、starlark_map
和大多数starlark_syntax
的相关部分。starlark_lsp
,一个提供LSP的库。starlark_bin
,二进制文件,提供交互式评估、IDE功能和代码检查器,通过命令行暴露。如果您想使用纯Starlark(但如果是这样,请考虑Python3)或作为实验的平台,则很有用。大多数项目最终将使用自己的代码实现一些功能,这些功能在starlark
和starlark_lsp
库的基础上,并集成特定的额外类型等。
特别是,starlark_bin
二进制文件可以有效地用作代码检查器。但对于REPL、评估器和IDE功能,starlark_bin
二进制文件只知道标准的Starlark。大多数Starlark嵌入提供额外的函数和数据类型来处理特定领域的问题,如果使用这些绑定,则会导致REPL/评估器失败,并给出较差的IDE体验。在大多数情况下,您应该编写自己的二进制文件,依赖于starlark
库,集成您特定的领域特定部分,然后使用捆绑的LSP函数在之上产生自己的IDE/REPL/评估器。您仍然可以使用VS Code扩展。
兼容性
在本节中,我们概述了不遵守Starlark规范的地方。
- 我们有很多扩展,例如类型注解、递归、顶层
for
。 - 我们还不支持Starlark的后续添加,例如bytes。
- 在某些情况下,创建循环数据结构可能导致堆栈溢出。
发布版本
- 检查GitHub Actions是否为绿色。
- 更新
CHANGELOG.md
文件,以反映自上次发布以来的更改。 此链接 可提供帮助(更新为与上次发布进行比较)。 - 更新两个
Cargo.toml
文件的版本号。如果没有不兼容的更改,则增加 0.0.1,如果有,则增加 0.1.0。将starlark
中的依赖项提升到指向最新的starlark_derive
版本。 - 将文件
CHANGELOG.md
、LICENSE
和README.md
复制到每个子目录中。 - 在每个组件目录中运行
cargo publish --allow-dirty --dry-run
,然后在不带--dry-run
的情况下运行。 - 使用
v0.X.Y
创建一个 GitHub 发布版,使用starlark
版本作为名称。
许可证
Starlark Rust 使用 Apache License,Version 2.0 许可,如 LICENSE 文件所示。
依赖项
~13–26MB
~377K SLoC