Skip to main content

CompiledEffectMachine

Struct CompiledEffectMachine 

Source
pub struct CompiledEffectMachine { /* private fields */ }
Expand description

Compiled effect machine — drives JIT-compiled freer-simple effect stacks.

The step/resume protocol:

  1. step() calls the compiled function, parses the result:
    • Con with Val con_tag → Yield::Done(value)
    • Con with E con_tag → Yield::Request(tag, request, continuation)
  2. resume(continuation, response) applies the continuation tree to the response and parses the resulting heap object.

Implementations§

Source§

impl CompiledEffectMachine

Source

pub fn new( func_ptr: unsafe extern "C" fn(*mut VMContext) -> *mut u8, vmctx: VMContext, tags: ConTags, ) -> Self

Source

pub fn vmctx_mut(&mut self) -> &mut VMContext

Access the VMContext (e.g., to update nursery pointers after GC).

Source

pub fn step(&mut self) -> Yield

Execute the compiled function and parse the result.

Source

pub unsafe fn resume( &mut self, continuation: *mut u8, response: *mut u8, ) -> Yield

Resume after handling an effect by applying the continuation to the response.

§Safety

continuation and response must be valid heap pointers from the nursery.

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Choices> CoproductSubsetter<CNil, HNil> for Choices

Source§

type Remainder = Choices

Source§

fn subset( self, ) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U, I> LiftInto<U, I> for T
where U: LiftFrom<T, I>,

Source§

fn lift_into(self) -> U

Performs the indexed conversion.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<Source> Sculptor<HNil, HNil> for Source

Source§

type Remainder = Source

Source§

fn sculpt(self) -> (HNil, <Source as Sculptor<HNil, HNil>>::Remainder)

Consumes the current HList and returns an HList with the requested shape. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.