rust-analyzer/crates/salsa
bors 6b8b8ff4c5 Auto merge of #17417 - Wilfred:intern_macros_salsa, r=Veykril
refactor: Prefer plain trait definitions over macros for impl_intern_value_trivial

`impl_intern_value_trivial` can be defined with a trait directly, so prefer that over a macro definition.
2024-06-14 06:20:26 +00:00
..
salsa-macros chore: Prefer tracing span shorthand macros 2024-06-06 16:52:25 -07:00
src Auto merge of #17417 - Wilfred:intern_macros_salsa, r=Veykril 2024-06-14 06:20:26 +00:00
tests style: simplify string interpolation 2024-05-30 16:18:49 -07:00
Cargo.toml Update Cargo.lock 2024-03-05 12:16:19 +01:00
FAQ.md Move salsa fork in-tree 2024-02-07 16:29:46 +01:00
LICENSE-APACHE Move salsa fork in-tree 2024-02-07 16:29:46 +01:00
LICENSE-MIT Move salsa fork in-tree 2024-02-07 16:29:46 +01:00
README.md Move salsa fork in-tree 2024-02-07 16:29:46 +01:00

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.