4个版本 (破坏性更新)

0.12.0 2024年2月9日
0.11.0 2024年1月19日
0.10.0 2023年10月17日
0.9.0 2023年6月5日

#392 in 数据结构

Download history 404/week @ 2024-04-23 341/week @ 2024-04-30 246/week @ 2024-05-07 244/week @ 2024-05-14 313/week @ 2024-05-21 216/week @ 2024-05-28 438/week @ 2024-06-04 1127/week @ 2024-06-11 1982/week @ 2024-06-18 1660/week @ 2024-06-25 1195/week @ 2024-07-02 1703/week @ 2024-07-09 1599/week @ 2024-07-16 1675/week @ 2024-07-23 1934/week @ 2024-07-30 1670/week @ 2024-08-06

每月下载 7,103次
用于 8 个crate(直接使用3个)

Apache-2.0

195KB
5K 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,这是一个过程宏crate,它定义了Starlark所需的宏。这个库是库starlark的依赖,它重新导出所有相关部分,不应直接使用。
  • starlark_map,一个具有内存高效有序/无序映射/集合以及其他在Starlark中有用数据结构的库。
  • starlark_syntax,一个包含Starlark的AST和解析函数的库。只有当您想直接操作AST时才使用。
  • starlark是主库,包含评估器、标准库、调试器支持以及大量其他部分。希望将其环境(带有额外的类型、库函数和功能)嵌入Starlark的项目将使用此库。此库重新导出starlark_derivestarlark_map和大多数starlark_syntax的相关部分。
  • starlark_lsp,一个提供LSP的库。
  • starlark_bin二进制文件,它提供交互式评估、IDE功能和代码检查工具,通过命令行公开。如果您想使用纯Starlark(但如果有,请考虑Python 3)或作为实验的测试平台,则很有用。大多数项目最终将在starlarkstarlark_lsp库之上实现一些此功能,并融入其特定的额外类型等。

特别是starlark_bin二进制文件可以有效地用作代码检查工具。但对于REPL、评估器和IDE功能,starlark_bin二进制文件仅了解标准的Starlark。大多数Starlark嵌入提供额外的函数和数据类型来处理特定领域的关注点,如果没有这些绑定,它们将导致REPL/评估器失败,并会提供次优的IDE体验。在大多数情况下,您应该编写自己的二进制文件,依赖于starlark库,集成您自己的特定领域组件,然后使用捆绑的LSP函数在之上产生您自己的IDE/REPL/评估器。您仍然可以使用VS Code扩展

兼容性

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

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

发布版本

  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,Version 2.0 许可证,如 LICENSE 文件所示。

依赖项

~2–2.9MB
~49K SLoC