Commit graph

129 commits

Author SHA1 Message Date
Aleksey Kladov
ec5b92ea20 tests and docs for on-demand input pattern 2019-09-20 12:25:12 +03:00
Markus Westerlind
897ee5f3d2 cargo fmt 2019-08-21 10:13:08 +02:00
Markus Westerlind
0e01067d55 feat: Allow queries to avoid panics on cycles
Quickest POC I could create to get some potentially cyclic queries to
not panic and instead return a result I could act on. (gluon's module
importing need to error on cycles).

```
// Causes `db.query()` to actually return `Result<V, CycleError>`
fn query(&self, key: K, key2: K2) -> V;
```

A proper implementation of this would likely return
`Result<V, CycleError<(K, K2)>>` or maybe larger changes are needed.

cc #6
2019-08-16 20:37:54 +02:00
Niko Matsakis
b272cc1321
Merge pull request #180 from nikomatsakis/durability
Durability
2019-08-15 07:01:00 -04:00
Niko Matsakis
ac93c950be make interned keys have durability high 2019-07-02 08:22:25 -04:00
Niko Matsakis
9d474363fc s/next_revision/synthetic_write/
Also write some docs explaining its side-effects.
2019-07-02 07:49:01 -04:00
Niko Matsakis
a0a6bac5af modify public API to set_foo_with_durability 2019-07-02 07:49:01 -04:00
Niko Matsakis
09c9bd9761 adjust public api from is_constant to durability 2019-07-02 07:49:01 -04:00
Niko Matsakis
7bf4f9dc4f silence rng deprecation warning 2019-07-02 07:49:01 -04:00
Niko Matsakis
5bbd500c64 switch internally from IsConstant to Durability 2019-07-02 07:49:01 -04:00
Niko Matsakis
0a5b6b0451 permit constants to be modified
We now track the last revision in which constants were modified. When
we see a constant query result, we record the current revision as
well. Then later we can check if the result is "still" constant. This
lets us cut out a lot of intermediate work.
2019-07-02 07:49:01 -04:00
Aleksey Kladov
89237e85f7 ⬆️ rand 2019-07-02 14:40:43 +03:00
Aleksey Kladov
6d60798eb8 Replace volatile query type with report_untracked_read fn 2019-06-26 13:10:44 +03:00
Aleksey Kladov
88fed8d6d6 Fix correctness bug when LRU evicted volatile query 2019-06-11 12:59:53 +03:00
Aleksey Kladov
0827c88259 use single lock for LRU 2019-06-09 16:47:51 +03:00
Aleksey Kladov
3d89c0d817 Add LRU to derived storage
LRU allows to bound the maximum number of *values* that are present in
the table.
2019-06-07 14:26:21 +03:00
Aleksey Kladov
fcc7058e9c implement strong panic safety
Previosly, panicking query would remove in-progress memos from the
table.

However, we use panic for cancellation, so it's reasonable to **not**
remove the old result after panic. This is also known as string
exception safety guarantee: not only database is in *some* consistent
state after a panic, it is in the same state it was before the panic!
2019-06-01 23:19:15 +03:00
Aleksey Kladov
ccc01cc189 fix test doc comment 2019-05-30 12:32:24 +03:00
Aleksey Kladov
6ea5413ef5 switch requires syntax to an attribute 2019-05-21 18:49:18 +03:00
Aleksey Kladov
940eed92a6 allow private requirements in query groups 2019-05-21 18:04:01 +03:00
Aleksey Kladov
fe295c1b6e Add transparent query type
Transparent queries are not really queries: they are just plain
uncached functions without any backing storage.

Making a query transparent can be useful to figure out if caching it
at all is a win
2019-04-30 23:42:17 +03:00
Niko Matsakis
dbc9d27d16 squash some warnings 2019-04-03 11:01:38 -03:00
Niko Matsakis
74294f71f3 s/RawId/InternId/ 2019-04-03 11:01:20 -03:00
Niko Matsakis
40d0c8d21a
Merge pull request #157 from nikomatsakis/raw-id
adopt raw-id for interned keys
2019-03-31 07:53:38 -03:00
Niko Matsakis
da1b26a52e adopt raw-id 2019-03-30 06:43:16 -03:00
Niko Matsakis
5e84531d7b
Merge pull request #153 from regexident/send
Removed remaining stray bounds for `Send + Sync` that still survived PR #42
2019-03-29 08:24:05 -04:00
Aleksey Kladov
9d6236bc79 make sure interned state is send 2019-03-27 14:33:59 +03:00
Vincent Esche
065d691175 Added test case for !Send + !Sync keys (vs. values) 2019-03-27 10:49:44 +01:00
Vincent Esche
0ba1072c67 Addes test case for !Send + !Sync 2019-03-27 10:35:09 +01:00
Niko Matsakis
5c7e2fee09 s/AtomicU32/AtomicUsize/ in tests 2019-03-25 14:40:32 -04:00
Niko Matsakis
c040b0c673 fix gc and volatile tests 2019-03-22 16:24:37 -04:00
Niko Matsakis
6cf1ffd24a test reverse lookup after we have reused slots and the like 2019-03-22 05:20:00 -04:00
Niko Matsakis
791ec3065c elaborate a bit more on the GC tests 2019-03-22 05:18:32 -04:00
Niko Matsakis
c5795a3e5c only GC outdated intern keys 2019-03-22 05:13:07 -04:00
Niko Matsakis
f48515747c create a true inverse key for the lookup path 2019-03-12 08:55:37 -04:00
Niko Matsakis
1fbd61bf87 adopt InternKey trait 2019-02-04 21:01:58 +01:00
Niko Matsakis
e3f5eb6ee8 implement #[salsa::interned] query storage 2019-02-03 20:45:52 +01:00
Niko Matsakis
1002d7e70a
Merge pull request #138 from matklad/flexible-gc
Make GC API more orthogonal and flexible
2019-01-28 04:51:02 -05:00
memoryruins
db24e677e3 convert tests to use generated set methods 2019-01-28 00:50:09 -05:00
memoryruins
7d12f4f93a remove set_unchecked methods 2019-01-27 17:01:00 -05:00
Aleksey Kladov
9387fd2f4d more orthogonal naming 2019-01-27 17:14:57 +03:00
Aleksey Kladov
d01d6ed511 Make GC API more orthogonal and flexible
Now, the effect of GC is a "product" of three parameters:

* what values are affected (everything/everything except used)
* are we removing values
* are we removing deps

SweepStrategy::default is now a no-op GC.
2019-01-26 21:38:15 +03:00
Niko Matsakis
6f15a440ca make dyn Trait query implementations work 2019-01-25 18:36:23 -05:00
Niko Matsakis
9b5c7eeb5e change #[salsa::query_group] attribute to take a struct name 2019-01-25 10:26:39 -05:00
Niko Matsakis
a468292984 generate set_X and set_constant_X methods for each input
Convert some of the tests to use them
2019-01-25 05:18:26 -05:00
Niko Matsakis
3d1f9dac2d
Merge pull request #122 from matklad/debug
allow to peek at values via debug query interface
2019-01-25 05:13:27 -05:00
Niko Matsakis
a8d9fb2d6b adopt salsa::database attribute macro 2019-01-24 19:02:56 -05:00
Niko Matsakis
c0978fede8 remove the need to list individual queries in database_storage 2019-01-24 05:35:57 -05:00
Aleksey Kladov
a5349b8330 remove debug keys in favor of entries 2019-01-23 14:23:26 +03:00
Niko Matsakis
238be96432 introduce group storage structs to use from database_storage macro
This also detected a bunch of crate visibility mismatches in the
tests.
2019-01-23 05:35:07 -05:00