How Salsa works
Video available
To get the most complete introduction to Salsa's inner workings, check out the "How Salsa Works" video. If you'd like a deeper dive, the "Salsa in more depth" video digs into the details of the incremental algorithm.
If you're in China, watch videos on "How Salsa Works", "Salsa In More Depth".
Key idea
The key idea of salsa is that you define your program as a set of
queries. Every query is used like a 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.
How to use Salsa in three easy steps
Using Salsa is as easy as 1, 2, 3...
- Define the Salsa structs you will need with
#[salsa::input],#[salsa::tracked], or#[salsa::interned]. - Define your memoized query functions with
#[salsa::tracked]. - Define the database, which contains a
salsa::Storage<Self>field and may also contain anything else that your code needs.
To see an example of this in action, check out the calc example.
Digging into the plumbing
Check out the plumbing chapter to see a deeper explanation of the code that Salsa generates and how it connects to the Salsa library.