Skip to content

Latest commit

 

History

History
31 lines (23 loc) · 1002 Bytes

README.md

File metadata and controls

31 lines (23 loc) · 1002 Bytes

Schroedinger, An experimental library for references with erased lifetime, in Rust

NOTE: Code in this repository is experimental, and known to be unsafe.

Sc<T> is similar to &T, but can be stored in a structure without being parameterized by a lifetime.

Usage example:

use sc::Sc;

struct A {
    sc : Sc<String>,
}

let a = A { sc : Sc::new() };
assert!(a.sc.is_none());
{
    let s = String::from("foo");
    let _dropper = a.sc.set(&s); // store a reference to s
    assert!(!a.sc.is_none());
    a.sc.map(|x| println!("{}", x)); // use the reference, prints "foo"
}
assert!(a.sc.is_none());

See the example for a more complex use.

Sc works without any allocation. The trade-off is lesser ergonomics (need to call visit with a closure) and a dynamic check of the validity of the reference.

See also this message explaining the idea behind Sc.