“Sound unchecked indexing” in Rust using “generativity” (branding by unique lifetime parameter).
Extremely experimental, but somewhat promising & exciting.
Main focus is on index ranges, not just single indices.
Crate Features:
use_stdEnabled by default, disable to beno_std-compatible.
- Inspired by Gankro’s exposition of sound unchecked indexing.
Also now described in: You can't spell trust without Rust. Chapter 6.3 hacking generativity onto rust. Gankro's master's thesis.
- 0.4.1
- Remove the ability to clone non-
FixedLengthContainers, because allowing to clone a container was wrong in the presencen of the length changing .push()/.insert() methods on vectors in containers.
- Remove the ability to clone non-
- 0.4.0
- Add method
.make_twin()that allows two or more containers to use the same trusted indices, if they are the same size - Add new marker trait
FixedLengthfor use inmake_twin. - Remove the branded raw pointer features, since they need revision (See #11)
- Fix bug in the proof of
.join_cover() - Fix signatures in
ContiguousMutso that it now uses&mutcorrectly - Update dev-dependencies
- Add
Ord, PartialOrdimpls forRange - Now using Rust 2018 and requiring Rust 1.32 or later.
- Add method
- 0.3.2
- Fix future compatibility warning about pointer casts.
- Add
Ord, Hashimpls forIndexandHashforRange
- 0.3.1
- Fixes in tests
- Add crates.io categories
- 0.3.0
- Tweak implementation traits a bit,
PointerRange,Provable,ContainerRef, make themunsafewhere needed. - Add
Container::range_of
- Tweak implementation traits a bit,
- 0.2.0
- Docs are better
- Refactor most of the crate, prepare for other backends than slices
- Expose
PIndex, PRange, PSlicewhich are the pointer-based equivalents of safe trusted indices and ranges. Some algos are better when using a raw pointer representation (for example: lower bound). Since we don't have HKT, traitifying all of this is not so pleasant and is not yet complete. - New feature: can combine trusted indices with push/insert on Vec.
- 0.1.2
- Add
binary_search_byandlower_boundto algorithms. Algorithms don't requireT: Debuganymore.
- Add
- 0.1.1
- Point documentation to docs.rs
- 0.1.0
- Add some docs and tests
- Fix Range::join_cover_both to use ProofAdd
- 0.1.0-alpha3
- Add IndexingError and use it for all Results.
- 0.1.0-alpha2
- Add ProofAdd and use it in Range::join, Range::join_cover
- Make Index<'id>, Range<'id> Send + Sync
- 0.1.0-alpha1
- First release
Dual-licensed to be compatible with the Rust project.
Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.