improve query system documentation (#2041)

* improve query system documentation

* fix typo messages => message

* Update src/queries/incremental-compilation-in-detail.md

Co-authored-by: lcnr <rust@lcnr.de>

---------

Co-authored-by: lcnr <rust@lcnr.de>
This commit is contained in:
Jonathan Dönszelmann 2024-09-06 16:23:23 +02:00 committed by GitHub
parent 1239ad3da0
commit 4e0755f384
3 changed files with 20 additions and 4 deletions

View File

@ -186,7 +186,9 @@ By using red-green marking we can avoid the devastating cumulative effect of
having false positives during change detection. Whenever a query is executed having false positives during change detection. Whenever a query is executed
in incremental mode, we first check if its already green. If not, we run in incremental mode, we first check if its already green. If not, we run
`try_mark_green()` on it. If it still isn't green after that, then we actually `try_mark_green()` on it. If it still isn't green after that, then we actually
invoke the query provider to re-compute the result. invoke the query provider to re-compute the result. Re-computing the query might
then itself involve recursively invoking more queries, which can mean we come back
to the `try_mark_green()` algorithm for the dependencies recursively.
## The Real World: How Persistence Makes Everything Complicated ## The Real World: How Persistence Makes Everything Complicated

View File

@ -21,6 +21,20 @@ not a general graph).
[DAG]: https://en.wikipedia.org/wiki/Directed_acyclic_graph [DAG]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
> **NOTE**: You might think of a query as simply the definition of a query.
> A thing that you can invoke, a bit like a function,
> and which either returns a cached result or actually executes the code.
>
> If that's the way you think about queries,
> it's good to know that in the following text, queries will be said to have colours.
> Keep in mind though, that here the word query also refers to a certain invocation of
> the query for a certain input. As you will read later, queries are fingerprinted based
> on their arguments. The result of a query might change when we give it one argument
> and be coloured red, while it stays the same for another argument and is thus green.
>
> In short, the word query is here not just used to mean the definition of a query,
> but also for a specific instance of that query with given arguments.
On the next run of the compiler, then, we can sometimes reuse these On the next run of the compiler, then, we can sometimes reuse these
query results to avoid re-executing a query. We do this by assigning query results to avoid re-executing a query. We do this by assigning
every query a **color**: every query a **color**:

View File

@ -174,9 +174,9 @@ Since query providers are regular functions, this would behave much as expected:
Evaluation would get stuck in an infinite recursion. A query like this would not Evaluation would get stuck in an infinite recursion. A query like this would not
be very useful either. However, sometimes certain kinds of invalid user input be very useful either. However, sometimes certain kinds of invalid user input
can result in queries being called in a cyclic way. The query engine includes can result in queries being called in a cyclic way. The query engine includes
a check for cyclic invocations and, because cycles are an irrecoverable error, a check for cyclic invocations of queries with the same input aguments.
will abort execution with a "cycle error" messages that tries to be human And, because cycles are an irrecoverable error, will abort execution with a
readable. "cycle error" message that tries to be human readable.
At some point the compiler had a notion of "cycle recovery", that is, one could At some point the compiler had a notion of "cycle recovery", that is, one could
"try" to execute a query and if it ended up causing a cycle, proceed in some "try" to execute a query and if it ended up causing a cycle, proceed in some