Expand description
This library provides an implementation of GhostCell
and its GhostToken
as per
https://plv.mpi-sws.org/rustbelt/ghostcell/ as well as some extensions.
§Safety
The actual implementation of GhostCell
is found at https://gitlab.mpi-sws.org/FP/ghostcell/-/tree/master/ghostcell
and has been proven safe. I have carefully checked that this implementation faithfully reproduces the safety
guarantees.
Extensions to GhostCell
, such as GhostCursor
, are not proven, neither at the design nor implementation level.
As such, they are only available if the appropriate Cargo features are enabled.
§Example
A simple self-contained example:
use ghost_cell::{GhostToken, GhostCell};
let n = 42;
let value = GhostToken::new(|mut token| {
let cell = GhostCell::new(42);
let vec: Vec<_> = (0..n).map(|_| &cell).collect();
*vec[n / 2].borrow_mut(&mut token) = 33;
*cell.borrow(&token)
});
assert_eq!(33, value);
Re-exports§
pub use self::ghost_cell::GhostCell;
pub use self::ghost_cell::GhostToken;
pub use self::ghost_borrow::GhostBorrow;
Modules§
- ghost_
borrow - The
GhostBorrow
trait allows simultaneously borrowing multipleGhostCell
immutably. - ghost_
cell GhostCell
andGhostToken
, as per https://plv.mpi-sws.org/rustbelt/ghostcell/.