20 releases

new 0.19.0 Mar 10, 2025
0.17.0-pre.2 Oct 6, 2021
0.17.0-pre.1 May 29, 2021
0.16.0 Oct 14, 2020
0.11.1 Mar 27, 2019

#1419 in Procedural macros

Download history 5160/week @ 2024-11-18 4620/week @ 2024-11-25 8876/week @ 2024-12-02 10101/week @ 2024-12-09 8538/week @ 2024-12-16 5221/week @ 2024-12-23 6410/week @ 2024-12-30 8348/week @ 2025-01-06 7898/week @ 2025-01-13 8832/week @ 2025-01-20 10898/week @ 2025-01-27 16164/week @ 2025-02-03 16220/week @ 2025-02-10 18102/week @ 2025-02-17 21388/week @ 2025-02-24 17395/week @ 2025-03-03

74,455 downloads per month
Used in 47 crates (via salsa)

Apache-2.0 OR MIT

92KB
2K SLoC

salsa

Test Book Released API docs Crates.io

A generic framework for on-demand, incrementalized computation.

Salsa Logo

Obligatory warning

Very much a WORK IN PROGRESS at this point.

Credits

This system is heavily inspired by adapton, glimmer, and rustc's query system. So credit goes to Eduard-Mihai Burtescu, Matthew Hammer, Yehuda Katz, and Michael Woerister.

Key idea

The key idea of salsa is that you define your program as a set of queries. Every query is used like function K -> V that maps from some key of type K to a value of type V. Queries come in two basic varieties:

  • Inputs: the base inputs to your system. You can change these whenever you like.
  • Functions: pure functions (no side effects) that transform your inputs into other values. The results of queries are memoized to avoid recomputing them a lot. When you make changes to the inputs, we'll figure out (fairly intelligently) when we can re-use these memoized values and when we have to recompute them.

Want to learn more?

To learn more about Salsa, try one of the following:

Getting in touch

The bulk of the discussion happens in the issues and pull requests, but we have a zulip chat as well.

Contributing

To create a release and publish to crates.io, follow the steps:

  1. Update the version field in Cargo.toml.
  2. Create a Git tag. The tag name must follow the format like "v*..".
  3. Push. GitHub Actions will publish the crate to crates.io automatically.

lib.rs:

This crate provides salsa's macros and attributes.

Dependencies

~300–760KB
~17K SLoC