pub struct HistoryTape { /* private fields */ }Expand description
The append-forward / pop-backward garbage tape of a recording forward run. TWO stacks:
• entries — the erased-DATA deltas (register/global overwrites, output lines). These are the
Landauer garbage; HistoryTape::erased_bytes/HistoryTape::len count them, and they are
EMPTY for an all-abelian run.
• steps — the executed program-counter trace (one entry per executed op), the control
skeleton. Reverse execution walks it backward to replay the exact executed path — branches
and loops fall out for free (a loop is just the trace with repeated pcs). This is control
overhead (re-derivable by re-running forward, so zero erased DATA and Bennett-uncomputable),
NOT part of the erased-bit count.
Implementations§
Source§impl HistoryTape
impl HistoryTape
Sourcepub fn push(&mut self, entry: JournalEntry)
pub fn push(&mut self, entry: JournalEntry)
Append an erased-data delta (forward execution).
Sourcepub fn pop(&mut self) -> Option<JournalEntry>
pub fn pop(&mut self) -> Option<JournalEntry>
Pop the most recent erased-data delta (reverse execution).
Sourcepub fn push_step(&mut self, pc: usize, base: usize)
pub fn push_step(&mut self, pc: usize, base: usize)
Record that the op at pc (running in window base) executed (forward) — the control trace.
Sourcepub fn pop_step(&mut self) -> Option<(usize, usize)>
pub fn pop_step(&mut self) -> Option<(usize, usize)>
Pop the most recently executed (pc, base) (reverse execution walks the path backward).
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Whether the DATA tape is empty. true after an all-abelian (bijection-only) run — the
zero-erasure signature (a program may still have a non-empty control-flow steps trace).
Sourcepub fn step_count(&self) -> usize
pub fn step_count(&self) -> usize
The number of executed ops on the control-flow trace.
Sourcepub fn nondet_count(&self) -> usize
pub fn nondet_count(&self) -> usize
The number of recorded nondeterministic reads (clock / random) — the captured entropy count.
Sourcepub fn erased_bytes(&self) -> usize
pub fn erased_bytes(&self) -> usize
Total erased DATA on the tape, in bytes — the Landauer energy proxy. Exactly 0 for an
all-abelian run (every op self-inverts, nothing is journaled), regardless of how many times a
reversible loop body ran.
Sourcepub fn landauer_bytes(&self) -> usize
pub fn landauer_bytes(&self) -> usize
The GENUINELY-irreversible information on the tape — the true Landauer (energy) number. Below
HistoryTape::erased_bytes because a write that overwrote the DEFAULT (Nothing) destroyed
no information: pebbling elides the recomputable scratch, and this excludes the zero-information
first-writes, so a pure computation into an output measures 0.
Trait Implementations§
Source§impl Debug for HistoryTape
impl Debug for HistoryTape
Source§impl Default for HistoryTape
impl Default for HistoryTape
Source§fn default() -> HistoryTape
fn default() -> HistoryTape
Auto Trait Implementations§
impl Freeze for HistoryTape
impl !RefUnwindSafe for HistoryTape
impl !Send for HistoryTape
impl !Sync for HistoryTape
impl Unpin for HistoryTape
impl UnsafeUnpin for HistoryTape
impl !UnwindSafe for HistoryTape
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.