pub struct RuntimeProgram { /* private fields */ }Expand description
A loaded, ready-to-run program image with owned runtime state.
Produced by load_program from .cdlb bytes. Self::run executes it
exactly as the full candela binary runs a freshly compiled program, and
Self::call invokes an exported function by name. Registers and heap
pools stay resident between calls, so state one call establishes is visible
to the next.
Implementations§
Source§impl RuntimeProgram
impl RuntimeProgram
Sourcepub fn native_functions(&self) -> usize
pub fn native_functions(&self) -> usize
How many of the program’s functions run as machine code on this machine: zero when its artifact carries none this machine runs.
Sourcepub fn run(&mut self)
pub fn run(&mut self)
Runs the program’s main to completion.
A runtime error prints its report and ends the process, matching the
full candela <file.cdl> path exactly. A
host that wants the error as a value instead runs this inside
collect_diagnostic.
Sourcepub fn call(&mut self, name: &str, args: &[Value]) -> Result<Value, CallError>
pub fn call(&mut self, name: &str, args: &[Value]) -> Result<Value, CallError>
Invokes the exported function name with args, returning its value
(or Value::Null for a function that returns nothing).
The call runs the trampoline the compiler emitted for the function at
build time, against the resident register and heap state, so globals a
previous call or main established remain visible. Arguments are
checked against the declared parameter types before anything runs.
§Errors
Returns a CallError if the artifact exports no such function, if the
arguments disagree with the declared signature, or if the call raises a
runtime error.
Sourcepub fn collect(&mut self, budget: u32) -> bool
pub fn collect(&mut self, budget: u32) -> bool
Does up to about budget units of garbage collection while the
program is idle, and answers whether no collection work is left.
Call it between calls into the program, where the host would otherwise
wait, such as between frames. It carries on a collection already under
way, or begins one when the heap has grown enough since the last; on a
heap that has not, it does nothing and answers true. A unit is about
one object traced or one freed slot, never a length of time, so the
same calls do the same work on every machine. collect(u32::MAX) runs
a whole collection. Beginning a collection reads every root at once
whatever the budget.
Once a host has called this, allocations leave more of the work to it and begin a collection themselves only when the heap has grown further.
Auto Trait Implementations§
impl !Freeze for RuntimeProgram
impl !RefUnwindSafe for RuntimeProgram
impl !Send for RuntimeProgram
impl !Sync for RuntimeProgram
impl !UnwindSafe for RuntimeProgram
impl Unpin for RuntimeProgram
impl UnsafeUnpin for RuntimeProgram
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);