Skip to main content

Value

Enum Value 

Source
pub enum Value {
Show 15 variants Nil, Bool(bool), Int(i64), Float(f64), Str(Arc<str>), Symbol(Arc<str>), Keyword(Arc<str>), List(Arc<Vec<Value>>), Map(Arc<HashMap<MapKey, Value>>), Closure(Arc<Closure>), NativeFn(Arc<NativeFn>), Promise(Arc<Mutex<PromiseState>>), Error(Arc<ErrorObj>), Sexp(Sexp, Span), Foreign(Arc<dyn Any + Send + Sync>),
}
Expand description

An evaluated runtime value.

Variants§

§

Nil

§

Bool(bool)

§

Int(i64)

§

Float(f64)

§

Str(Arc<str>)

§

Symbol(Arc<str>)

§

Keyword(Arc<str>)

§

List(Arc<Vec<Value>>)

§

Map(Arc<HashMap<MapKey, Value>>)

Persistent hash map keyed by a hashable subset of Value (Bool, Int, Float, Str, Symbol, Keyword, Nil). Inserting / removing yields a new Map (copy-on-write via Arc).

§

Closure(Arc<Closure>)

§

NativeFn(Arc<NativeFn>)

§

Promise(Arc<Mutex<PromiseState>>)

A delayed (lazy) computation. First force triggers evaluation of the underlying thunk; subsequent forces return the cached result. Backed by Mutex so a Promise can be shared across references safely (single-threaded runtime, but the lock is trivial overhead and gives us zero-effort safety).

§

Error(Arc<ErrorObj>)

A first-class structured error — Clojure ex-info shape: a tag (keyword/string), a message string, and a data plist. Constructed by (error tag msg data) / (ex-info msg data). Raised by (throw err). Caught by (try ... (catch (e) ...)).

§

Sexp(Sexp, Span)

Escape hatch: unevaluated source form carried as a value, e.g. after (quote x). Preserves span info.

§

Foreign(Arc<dyn Any + Send + Sync>)

Opaque host-owned value. The embedder supplies these via FFI; native functions read them back via downcast. Used to expose typed Rust handles (job refs, client handles) to Lisp code.

Implementations§

Source§

impl Value

Source

pub fn symbol(s: impl Into<Arc<str>>) -> Value

Source

pub fn keyword(s: impl Into<Arc<str>>) -> Value

Source

pub fn string(s: impl Into<Arc<str>>) -> Value

Source

pub fn list<I>(xs: I) -> Value
where I: IntoIterator<Item = Value>,

Source

pub fn is_truthy(&self) -> bool

Source

pub fn is_unique(&self) -> bool

Is this Value the only reference to its heap payload?

The aliasing coordinate. true means no other Value anywhere can observe the payload, so mutating it in place is unobservable and a copy-on-write copy would be pure waste. false means somebody else holds it and the copy is mandatory.

Two things it is not:

  • Not a static promise. It is a refcount reading at one instant, which is why it is sound to act on: a primitive that reads true holds the value by value, so nothing can acquire a second reference behind its back.
  • Not observable from the language. No Lisp-visible behaviour depends on it — the same call returns the same value either way. It only decides whether an allocation happens.

Variants with no heap payload (Nil, Bool, Int, Float) are trivially unique: there is nothing to share. Sexp answers false because it carries its tree by value and this query cannot see the sharing inside that tree — and a wrong true is the one answer that could license an update somebody else observes, so an unmeasured payload rounds down, never up.

Source

pub fn type_name(&self) -> &'static str

Short type name for error messages.

Trait Implementations§

Source§

impl Clone for Value

Source§

fn clone(&self) -> Value

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Value

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for Value

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl From<&str> for Value

Source§

fn from(s: &str) -> Value

Converts to this type from the input type.
Source§

impl From<String> for Value

Source§

fn from(s: String) -> Value

Converts to this type from the input type.
Source§

impl From<bool> for Value

Source§

fn from(b: bool) -> Value

Converts to this type from the input type.
Source§

impl From<f64> for Value

Source§

fn from(n: f64) -> Value

Converts to this type from the input type.
Source§

impl From<i64> for Value

Source§

fn from(n: i64) -> Value

Converts to this type from the input type.
Source§

impl FromValue for Value

Source§

impl IntoValue for Value

Auto Trait Implementations§

§

impl !RefUnwindSafe for Value

§

impl !UnwindSafe for Value

§

impl Freeze for Value

§

impl Send for Value

§

impl Sync for Value

§

impl Unpin for Value

§

impl UnsafeUnpin for Value

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.