1 个不稳定版本

0.4.0 2021 年 4 月 6 日

#12#starlark

Apache-2.0

21KB
250

Rust 中的 Starlark

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

注意: 此库的 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因溢出错误而失败。
  • 我们的字符串在多个方面不合规,通常返回代码点而不是单字符字符串,并且性能较差。
  • 在某些情况下,创建循环数据结构可能会导致栈溢出。

发布版本

  1. 检查GitHub Actions是否为绿色。
  2. 将自上次发布以来的更改更新到CHANGELOG.md。此链接可以提供帮助(更新以比较上次发布)。
  3. 更新两个Cargo.toml文件的版本号。如果没有不兼容的更改,则通过0.0.1升级,如果有,则通过0.1.0升级。将starlark中的依赖项升级到最新的starlark_module版本。
  4. 将文件CHANGELOG.mdLICENSEREADME.md复制到每个starlarkstarlark_module子目录中。
  5. 运行cargo publish --dry-run --allow-dirty,然后在没有--dry-run的情况下,首先在starlark_module目录中,然后是starlark目录中。
  6. 使用v0.X.Y创建一个GitHub release,使用starlark版本作为名称。

许可证

Starlark Rust遵循Apache License,版本2.0许可,如《LICENSE》文件所示。

依赖项

约1.5MB
约37K SLoC