7个版本 (破坏性更新)

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

#10 in #starlark

Download history 209/week @ 2024-04-17 401/week @ 2024-04-24 332/week @ 2024-05-01 234/week @ 2024-05-08 250/week @ 2024-05-15 308/week @ 2024-05-22 283/week @ 2024-05-29 389/week @ 2024-06-05 1507/week @ 2024-06-12 1945/week @ 2024-06-19 1503/week @ 2024-06-26 1205/week @ 2024-07-03 1659/week @ 2024-07-10 1702/week @ 2024-07-17 1763/week @ 2024-07-24 1558/week @ 2024-07-31

每月下载量 6,959
7 个crate中使用 (通过 starlark)

Apache-2.0

195KB
4.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启发的确定性语言,用于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包。该库是starlark库的依赖项,它导出所有相关部分,不应直接使用。
  • starlark_map,一个具有内存高效的有序/无序映射/集合以及Starlark中有用的各种其他数据结构的库。
  • starlark_syntax,一个包含Starlark的AST和解析函数的库。只有当您想直接操作AST时才使用。
  • starlark,主库,具有评估器、标准库、调试支持以及许多其他部分。希望将其环境中的Starlark嵌入到其项目中的(具有额外的类型、库函数和功能)将使用此库。此库导出starlark_derivestarlark_mapstarlark_syntax的大部分相关部分。
  • starlark_lsp,一个提供LSP的库。
  • starlark_bin,二进制文件,提供交互式评估、IDE功能和代码检查器,通过命令行暴露。如果您想使用纯Starlark(但如果是这样,请考虑Python3)或将其作为实验平台的测试床,则非常有用。大多数项目最终会在starlarkstarlark_lsp库的基础上实现一些此功能,并合并其特定的额外类型等。

特别是,starlark_bin二进制文件可以有效地用作代码检查器。但对于REPL、评估器和IDE功能,starlark_bin二进制文件只知道标准的Starlark。大多数Starlark嵌入提供额外的函数和数据类型来处理特定领域的问题,并且缺少这些绑定将导致REPL/评估器失败,并且会提供次级的IDE体验。在大多数情况下,您应该编写自己的依赖于starlark库的二进制文件,集成您的特定领域组件,然后使用捆绑的LSP功能在它们之上生成自己的IDE/REPL/评估器。您仍然可以使用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,Version 2.0许可,如LICENSE文件所示。

依赖项

~280–730KB
~17K SLoC