Skip to main content

AsyncRuntime

Trait AsyncRuntime 

Source
pub trait AsyncRuntime: Send + Sync {
    // Required methods
    fn spawn_async_call(
        &self,
        callee: Value,
        args: Vec<Value>,
        env: Env,
    ) -> Value;
    fn chan_take_blocking(&self, chan: Value) -> EvalResult;
    fn chan_put_blocking(&self, chan: Value, val: Value) -> EvalResult<()>;
}
Expand description

Interface implemented by cljrs-async and registered with GlobalEnv.

All methods are called from the LocalSet thread, so Value / Env need not be Send. The trait itself must be Send + Sync so the Arc<dyn AsyncRuntime> inside GlobalEnv can be shared.

Required Methods§

Source

fn spawn_async_call(&self, callee: Value, args: Vec<Value>, env: Env) -> Value

Spawn a call to an ^:async function as a LocalSet task.

callee is the Value::Fn being invoked, args are the already- evaluated arguments, env is the calling environment. Returns a Value::Future immediately; the body runs concurrently.

Source

fn chan_take_blocking(&self, chan: Value) -> EvalResult

Block the current OS thread until a value can be taken from the channel.

Used by the IR interpreter’s sync-context fallback for ChanTake. Returns Value::Nil on a closed channel.

Source

fn chan_put_blocking(&self, chan: Value, val: Value) -> EvalResult<()>

Block the current OS thread until the value is accepted by the channel.

Used by the IR interpreter’s sync-context fallback for ChanPut.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§