Starlark in Rust
An implementation in Rust of the Starlark language
Disclaimer: This is not an officially supported Google product. This project is supported on a best-effort basis and welcome contributions.
This interpreter was made using the specification from the go version and the Python 3 documentation when things were unclear.
This interpreter does not support most of the go extensions (e.g. bitwise
operator or floating point). It does not include the
set() type either (the
Java implementation use a custom type,
depset, instead). It uses signed 64-bit
You can depend on this crate
starlark, it is documented using docs.rs.
A command line interpreter is also provided by this project, it can interpret files passed at the command line and also start a REPL (Read-Eval-Print Loop). The usage of this program is:
$ starlark --help [Starlark in Rust interpretor] Usage: ./target/release/starlark [options] [file1..filen] Options: -b, --build_file Parse the build file format instead of full Starlark. -h, --help Show the usage of this program. -r, --repl Run a REPL after files have been parsed.
This project build with Cargo. Simply
cargo test to test it,
cargo build --release to build a release version
cargo run to run the command-line interpreter.
Possible improvements and optimizations
- When an identifier is not found, we can suggest close identifier / keyword.
- Fix suggestions maybe?
- Better error spans.
- Recoverable errors (don't stop at the first error, continue parsing).
- Static rewrite of the AST before evaluation (e.g. for constant values)
- Awesome feature:
- Implement a debugging protocol server side (compatible with the Java one, see (bazelbuild/vscode-bazel#6)).