Expand description
The salsa crate is a crate for incremental recomputation. It permits you to define a “database” of queries with both inputs and values derived from those inputs; as you set the inputs, you can re-execute the derived queries and it will try to re-use results from previous invocations as appropriate.
Modules
Debugging APIs: these are meant for use when unit-testing or
debugging your application but aren’t ordinarily needed.
Macros
This macro generates the “query storage” that goes into your database.
It requires you to list all of the query groups that you need as well
as the queries within those groups. The format looks like so:
A macro that helps in defining the “context trait” of a given
module. This is a trait that defines everything that a block of
queries need to execute, as well as defining the queries
themselves that are exported for others to use.
Structs
The
Event
struct identifies various notable things that can
occur during salsa execution. Instances of this struct are given
to salsa_event
.Return value from [the
query
method] on Database
.
Gives access to various less common operations on queries.Return value from the
query_mut
method on Database
.
Gives access to the set
method, notably, that is used to
set the value of an input query.The salsa runtime stores the storage for all queries as well as
tracking the query stack and dependencies between cycles.
A unique identifier for a particular runtime. Each time you create
a snapshot, a fresh
RuntimeId
is generated. Once a snapshot is
complete, its RuntimeId
may potentially be re-used.Simple wrapper struct that takes ownership of a database
DB
and
only gives &self
access to it. See the snapshot
method
for more details.The sweep strategy controls what data we will keep/discard when we
do a GC-sweep. The default (
SweepStrategy::default
) is to keep
all memoized values used in the current revision.Enums
An enum identifying the various kinds of events that can occur.
Traits
The base trait which your “query context” must implement. Gives
access to the salsa runtime, which you must embed into your query
context (along with whatever other state you may require).
Indicates a database that also supports parallel query
evaluation. All of Salsa’s base query support is capable of
parallel execution, but for it to work, your query key/value types
must also be
Send
, as must any additional data in your database.Trait implements by all of the “special types” associated with
each of your queries.