Skip to main content

Env

Struct Env 

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

An evaluation environment mapping variable names to values.

Environments are immutable, and extending one shares it rather than copying it: the extension holds a reference to the scope it extends, so binding a name costs the same whatever else is in scope. That matters because the evaluator extends the environment on every let, every lambda, and every closure application.

A name bound twice is shadowed by the inner binding, and only the inner one is observable: get returns it, iter yields it, and len counts the name once.

Implementations§

Source§

impl Env

Source

pub const fn new() -> Self

Create an empty environment.

Source

pub fn get(&self, name: &str) -> Option<&Literal>

Look up a variable in the environment.

Source

pub fn extend(&self, name: Arc<str>, value: Literal) -> Self

Extend the environment with a new binding, returning a new environment.

The environment extended is left as it was, and is shared rather than copied, so this costs the same at any width.

Source

pub fn len(&self) -> usize

Returns the number of distinct names in scope.

Source

pub const fn is_empty(&self) -> bool

Returns true if the environment has no bindings.

Source

pub fn iter(&self) -> impl Iterator<Item = (&Arc<str>, &Literal)>

Iterate over the bindings in scope, in name order, each name once.

Name order rather than the order the bindings arrived in, so that two environments holding the same bindings read the same however they were assembled — which is what lets a hash or an encoding taken over an environment be a function of what it binds.

Trait Implementations§

Source§

impl Clone for Env

Source§

fn clone(&self) -> Env

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 Env

Source§

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

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

impl Default for Env

Source§

fn default() -> Env

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Env

Source§

fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for Env

Source§

impl FromIterator<(Arc<str>, Literal)> for Env

Source§

fn from_iter<T: IntoIterator<Item = (Arc<str>, Literal)>>(iter: T) -> Self

Build an environment from bindings, later ones shadowing earlier ones.

Source§

impl Hash for Env

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Env

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for Env

Source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Env

§

impl RefUnwindSafe for Env

§

impl Send for Env

§

impl Sync for Env

§

impl Unpin for Env

§

impl UnsafeUnpin for Env

§

impl UnwindSafe for Env

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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.