#computation #query #framework #salsa #key #generic #system

ra_ap_salsa

A generic framework for on-demand, incrementalized computation (experimental)

56 releases

new 0.0.258 Jan 13, 2025
0.0.251 Dec 30, 2024
0.0.246 Nov 25, 2024
0.0.227 Jul 29, 2024
0.0.207 Mar 25, 2024

#213 in Algorithms

Download history 2952/week @ 2024-09-25 3964/week @ 2024-10-02 4779/week @ 2024-10-09 3639/week @ 2024-10-16 5699/week @ 2024-10-23 4095/week @ 2024-10-30 3514/week @ 2024-11-06 3326/week @ 2024-11-13 3160/week @ 2024-11-20 3045/week @ 2024-11-27 3175/week @ 2024-12-04 3086/week @ 2024-12-11 2192/week @ 2024-12-18 1089/week @ 2024-12-25 2180/week @ 2025-01-01 3100/week @ 2025-01-08

8,949 downloads per month
Used in 25 crates (2 directly)

Apache-2.0 OR MIT

210KB
4K SLoC

salsa

A generic framework for on-demand, incrementalized computation.

Obligatory warning

This is a fork of https://github.com/salsa-rs/salsa/ adjusted to rust-analyzer's needs.

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 is 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.

Dependencies

~2.2–7.5MB
~59K SLoC