Tries we have
the main inspiration for recent implementations are ART and HAMT
all implementations presently use HAMT-style array maps
all require V: Inline
| Trie | key | iteration | subtractive set ops |
|---|---|---|---|
Amt | impl Inline | TODO: sorted | |
Hamt | Hash | N/A | ✓ |
Trie | impl ReflessObject | sorted |
Development process
I decided to document how I do the dev process, since it’s by now become core part of the project itself.
Atomic commits (and other Git things)
I fanatically split things into smaller commits when it’s easy to do so.
- when it’s not easy, make it easy
- when stuck/in doubt, reset everything, start over
- no branches
- no external issue tracking
Abstraction
Here I have a somewhat similar view: try to split as much as possible.
- don’t
dynfor abstraction, only for necessary polymorphism (specifically theFetches) - having only 1 or 0 concretions is not reason enough to avoid an abstraction
- aim for encoding common interfaces as same trait even if they represent different things
- this notably happened to the way we map
Extras
- this notably happened to the way we map
- custom logic for concretions should mostly be implemented in abstractions and then composed
- see how schema thing does so
planned for inclusion
Alisa Feistel maintains this list for herself, please do NOT treat this as an invitation for PRs.
NonZero<i*>niches- LEB128
appendbut leaves old items inother- IPLD storage
- encrypted IPLD storage
Ipld{Hamt,Trie}{Map,Set}: FromIterator- auto-inlining wrapper
- generic
Triealgorithms - type as value
- subtries
AmtTrie
#[derive(FromSized)]hybrid-arrayImmutablepoint- fetch chain
- consistency error cascade
tokio_util::codec- fixed-size reverse parse-ahead
- move
Applyon things to things