[−][src]Crate broom
Broom
An ergonomic tracing garbage collector that supports mark 'n sweep garbage collection.
Example
use broom::prelude::*; // The type you want the heap to contain pub enum Object { Num(f64), List(Vec<Handle<Self>>), } // Tell the garbage collector how to explore a graph of this object impl Trace<Self> for Object { fn trace(&self, tracer: &mut Tracer<Self>) { match self { Object::Num(_) => {}, Object::List(objects) => objects.trace(tracer), } } } // Create a new heap let mut heap = Heap::default(); // Temporary objects are cheaper than rooted objects, but don't survive heap cleans let a = heap.insert_temp(Object::Num(42.0)); let b = heap.insert_temp(Object::Num(1337.0)); // Turn the numbers into a rooted list let c = heap.insert(Object::List(vec![a, b])); // Change one of the numbers - this is safe, even if the object is self-referential! *heap.get_mut(a).unwrap() = Object::Num(256.0); // Create another number object let d = heap.insert_temp(Object::Num(0.0)); // Clean up unused heap objects heap.clean(); // a, b and c are all kept alive because c is rooted and a and b are its children assert!(heap.contains(a)); assert!(heap.contains(b)); assert!(heap.contains(c)); // Because `d` was temporary and unused, it did not survive the heap clean assert!(!heap.contains(d));
Modules
prelude | Common items that you'll probably need often. |
trace |
Structs
Handle | A handle to a heap object. |
Heap | A heap for storing objects. |
Rooted | A handle to a heap object that guarantees the object will not be cleaned up by the garbage collector. |