mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 01:17:27 +00:00
6b8b8ff4c5
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. |
||
---|---|---|
.. | ||
salsa-macros | ||
src | ||
tests | ||
Cargo.toml | ||
FAQ.md | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md |
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:
- read the heavily commented
hello_world
example; - check out the Salsa book;
- watch one of our videos.
Getting in touch
The bulk of the discussion happens in the issues and pull requests, but we have a zulip chat as well.