A generic framework for on-demand, incrementalized computation. Inspired by adapton, glimmer, and rustc's query system.
Find a file
2025-03-17 17:54:42 +00:00
.devcontainer devcontainer definition 2024-07-28 10:16:36 +00:00
.github chore: Use nextest for miri test runs (#758) 2025-03-15 10:30:23 +00:00
benches feat: Drop Debug requirements and flip implementation defaults (#756) 2025-03-15 15:14:34 +00:00
book Enable Garbage Collection for Interned Values (#602) 2025-03-17 09:23:14 +00:00
components bug [salsa-macros]: Improve debug name of tracked methods (#755) 2025-03-17 08:57:50 +00:00
examples feat: Drop Debug requirements and flip implementation defaults (#756) 2025-03-15 15:14:34 +00:00
src refactor: Remove some unnecessary panicking paths in cycle execution (#765) 2025-03-17 17:54:42 +00:00
tests Enable Garbage Collection for Interned Values (#602) 2025-03-17 09:23:14 +00:00
.dir-locals.el ask emacs to rustfmt on save 2018-09-28 11:26:57 -04:00
.gitignore Fix clippy issues 2022-08-24 18:45:53 +02:00
Cargo.toml chore: Pin half version to prevent CI failure (#757) 2025-03-15 08:46:26 +00:00
CHANGELOG.md chore: release v0.19.0 (#698) 2025-03-10 15:09:26 +01:00
FAQ.md Update New Mexico state question 2020-06-26 15:48:29 +01:00
justfile extend justfile testing 2024-08-20 10:09:49 -04:00
LICENSE-APACHE add readme, license, etc 2018-09-28 11:01:27 -04:00
LICENSE-MIT add readme, license, etc 2018-09-28 11:01:27 -04:00
README.md Cleanup Cargo.tomls (#745) 2025-03-05 15:45:16 +00:00
release-plz.toml chore: Group versions of packages together for releases (#751) 2025-03-09 19:32:06 +01:00
RELEASES.md highlight breaking changes 2019-08-15 08:08:00 -04:00

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.