17个版本 (11个破坏性版本)

0.12.0 2024年2月9日
0.10.0 2023年10月17日
0.9.0 2023年6月5日
0.8.0 2022年5月9日
0.1.2 2018年9月28日

#27编程语言

Download history 964/week @ 2024-04-07 943/week @ 2024-04-14 1001/week @ 2024-04-21 1050/week @ 2024-04-28 682/week @ 2024-05-05 598/week @ 2024-05-12 719/week @ 2024-05-19 562/week @ 2024-05-26 801/week @ 2024-06-02 1125/week @ 2024-06-09 2286/week @ 2024-06-16 2320/week @ 2024-06-23 1511/week @ 2024-06-30 2098/week @ 2024-07-07 2115/week @ 2024-07-14 2092/week @ 2024-07-21

每月7,906 次下载
10 个crate中使用了(直接使用9个)

Apache-2.0

3MB
69K SLoC

Rust中的Starlark

Support Ukraine GitHub link crates.io version docs.rs availability Build status

GitHub上存在这个仓库的多个副本,facebookexperimental/starlark-rust 是官方的。

此项目提供了一个 Starlark语言 的Rust实现。Starlark(以前名为Skylark)是一种受Python3启发的确定性语言,用于在构建系统 BazelBuckBuck2 中进行配置,其中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 所需的宏。这个库是 starlark 库的依赖项,它导出所有相关部分,不应直接使用。
  • starlark_map,一个具有内存高效的有序/无序映射/集合以及其他在 Starlark 中有用的数据结构的库。
  • starlark_syntax,一个具有 Starlark 的 AST 和解析函数的库。仅在您想直接操作 AST 时使用。
  • starlark 主库,具有评估器、标准库、调试器支持以及许多其他组件。希望将 Starlark 嵌入其环境(带有额外的类型、库函数和功能)的项目将使用此库。此库导出 starlark_derivestarlark_map 和大多数 starlark_syntax 的相关部分。
  • starlark_lsp,一个提供 LSP 的库。
  • starlark_bin 二进制文件,提供交互式评估、IDE 功能和代码检查器,通过命令行公开。如果您想使用纯 Starlark(但这样做的话,请考虑 Python3)或作为实验的测试平台,这将很有用。大多数项目最终会自己在 starlarkstarlark_lsp 库的基础上实现一些此功能,并整合其特定的额外类型等。

特别是 starlark_bin 二进制文件可以有效地用作代码检查器。但对于交互式命令行、评估器和 IDE 功能,starlark_bin 二进制文件只知道标准 Starlark。大多数 Starlark 嵌入式提供额外的函数和数据类型以处理特定领域的问题,缺少这些绑定会导致如果使用它们,交互式命令行/评估器会失败,并且会提供次优的 IDE 体验。在大多数情况下,您应该编写自己的依赖于 starlark 库的二进制文件,集成您的特定领域部分,然后使用捆绑的 LSP 函数在那些基础上生成您自己的 IDE/交互式命令行/评估器。您仍然可以使用 VS Code 扩展

兼容性

在本节中,我们概述了我们不遵守 Starlark 规范 的地方。

  • 我们有大量的扩展,例如类型注解、递归、顶级 for
  • 我们目前还不支持 Starlark 的后续添加,例如 bytes
  • 在某些情况下,创建循环数据结构可能会导致栈溢出。

发布版本

  1. 检查 GitHub Actions 是否为绿色。
  2. CHANGELOG.md 更新为自上次发布以来的更改。 此链接 可以帮助(更新为与上次发布进行比较)。
  3. 更新两个 Cargo.toml 文件的版本号。如果没有不兼容的更改,则增加 0.0.1;如果有,则增加 0.1.0。将 starlark 依赖项升级到最新的 starlark_derive 版本。
  4. 将文件 CHANGELOG.mdLICENSEREADME.md 复制到每个子目录中。
  5. 运行 cargo publish --allow-dirty --dry-run,然后在每个组件目录中(按照上面所述的顺序),去掉 --dry-run
  6. 使用 v0.X.Y 创建一个 GitHub 发布,并以 starlark 版本作为名称。

许可证

Starlark Rust 使用 Apache License,版本 2.0 许可,如 LICENSE 文件所示。

依赖项

~11–15MB
~258K SLoC