Trait NonLocalValue

Source
pub unsafe trait NonLocalValue { }
Expand description

Marker trait indicating that a type does not contain any instances of Vc or references to Vc. It may contain ResolvedVc or OperationVc.

This is referred to as “non-local”, as a base Vc type may contain task-local references that are not valid after the contructing task finishes execution.

Vc can be thought of as containing a lifetime (Vc<'task, T>), and a NonLocalValue can be thought of as 'static or “owned”. We don’t currently use literal lifetimes for verbosity reasons, but safety is guaranteed through a combination of this trait and runtime assertions.

A future version of this trait may be implemented using a combination of auto_traits and negative_impls, but a derive macro is provided that avoids the need for these nightly-only features.

§Safety

This trait is marked as unsafe. You should not implement it yourself, but instead you should rely on #[turbo_tasks::value] or #[derive(NonLocalValue)] to do it for you.

There may be a few rare cases (e.g. custom generic bounds) where you cannot use #[turbo_tasks::value]. In these cases, it is your responsibility to ensure that no fields can contain a Vc or a transitive reference to a Vc.

There are currently runtime assertions in place as a fallback to ensure memory safety, but those assertions may become debug-only in the future if it significantly improves performance.

Implementations on Foreign Types§

Source§

impl NonLocalValue for Value

Source§

impl NonLocalValue for bool

Source§

impl NonLocalValue for char

Source§

impl NonLocalValue for f32

Source§

impl NonLocalValue for f64

Source§

impl NonLocalValue for i8

Source§

impl NonLocalValue for i16

Source§

impl NonLocalValue for i32

Source§

impl NonLocalValue for i64

Source§

impl NonLocalValue for i128

Source§

impl NonLocalValue for isize

Source§

impl NonLocalValue for str

Source§

impl NonLocalValue for u8

Source§

impl NonLocalValue for u16

Source§

impl NonLocalValue for u32

Source§

impl NonLocalValue for u64

Source§

impl NonLocalValue for u128

Source§

impl NonLocalValue for ()

Source§

impl NonLocalValue for usize

Source§

impl NonLocalValue for RcStr

Source§

impl NonLocalValue for String

Source§

impl NonLocalValue for AtomicBool

Source§

impl NonLocalValue for AtomicI8

Source§

impl NonLocalValue for AtomicI16

Source§

impl NonLocalValue for AtomicI32

Source§

impl NonLocalValue for AtomicI64

Source§

impl NonLocalValue for AtomicU8

Source§

impl NonLocalValue for AtomicU16

Source§

impl NonLocalValue for AtomicU32

Source§

impl NonLocalValue for AtomicU64

Source§

impl NonLocalValue for AtomicUsize

Source§

impl NonLocalValue for Duration

Source§

impl NonLocalValue for Path

Source§

impl NonLocalValue for PathBuf

Source§

impl NonLocalValue for Map<String, Value>

Source§

impl<A, Z, Y, X, W, V, U, T, Return> NonLocalValue for fn(A, Z, Y, X, W, V, U, T) -> Return

Source§

impl<A: NonLocalValue, Z: NonLocalValue, Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (A, Z, Y, X, W, V, U, T)

Source§

impl<B, A, Z, Y, X, W, V, U, T, Return> NonLocalValue for fn(B, A, Z, Y, X, W, V, U, T) -> Return

Source§

impl<B: NonLocalValue + ToOwned + ?Sized> NonLocalValue for Cow<'_, B>

Source§

impl<B: NonLocalValue, A: NonLocalValue, Z: NonLocalValue, Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (B, A, Z, Y, X, W, V, U, T)

Source§

impl<C, B, A, Z, Y, X, W, V, U, T, Return> NonLocalValue for fn(C, B, A, Z, Y, X, W, V, U, T) -> Return

Source§

impl<C: NonLocalValue, B: NonLocalValue, A: NonLocalValue, Z: NonLocalValue, Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (C, B, A, Z, Y, X, W, V, U, T)

Source§

impl<D, C, B, A, Z, Y, X, W, V, U, T, Return> NonLocalValue for fn(D, C, B, A, Z, Y, X, W, V, U, T) -> Return

Source§

impl<D: NonLocalValue, C: NonLocalValue, B: NonLocalValue, A: NonLocalValue, Z: NonLocalValue, Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (D, C, B, A, Z, Y, X, W, V, U, T)

Source§

impl<E, D, C, B, A, Z, Y, X, W, V, U, T, Return> NonLocalValue for fn(E, D, C, B, A, Z, Y, X, W, V, U, T) -> Return

Source§

impl<E: NonLocalValue, D: NonLocalValue, C: NonLocalValue, B: NonLocalValue, A: NonLocalValue, Z: NonLocalValue, Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (E, D, C, B, A, Z, Y, X, W, V, U, T)

Source§

impl<K: NonLocalValue, V: NonLocalValue> NonLocalValue for BTreeMap<K, V>

Source§

impl<K: NonLocalValue, V: NonLocalValue, S> NonLocalValue for HashMap<K, V, S>

Source§

impl<K: NonLocalValue, V: NonLocalValue, S> NonLocalValue for IndexMap<K, V, S>

Source§

impl<K: NonLocalValue, V: NonLocalValue, S, const I: usize> NonLocalValue for AutoMap<K, V, S, I>

Source§

impl<L: NonLocalValue, R: NonLocalValue> NonLocalValue for Either<L, R>

Source§

impl<T, Return> NonLocalValue for fn(T) -> Return

Source§

impl<T: NonLocalValue + ?Sized> NonLocalValue for &T

Source§

impl<T: NonLocalValue + ?Sized> NonLocalValue for &mut T

Source§

impl<T: NonLocalValue + ?Sized> NonLocalValue for Box<T>

Source§

impl<T: NonLocalValue + ?Sized> NonLocalValue for Arc<T>

Source§

impl<T: NonLocalValue + ?Sized> NonLocalValue for RefCell<T>

Source§

impl<T: NonLocalValue + ?Sized> NonLocalValue for Mutex<T>

Source§

impl<T: NonLocalValue> NonLocalValue for Option<T>

Source§

impl<T: NonLocalValue> NonLocalValue for [T]

Source§

impl<T: NonLocalValue> NonLocalValue for (T,)

Source§

impl<T: NonLocalValue> NonLocalValue for BTreeSet<T>

Source§

impl<T: NonLocalValue> NonLocalValue for Vec<T>

Source§

impl<T: NonLocalValue, E: NonLocalValue> NonLocalValue for Result<T, E>

Source§

impl<T: NonLocalValue, S> NonLocalValue for HashSet<T, S>

Source§

impl<T: NonLocalValue, S> NonLocalValue for IndexSet<T, S>

Source§

impl<T: NonLocalValue, S, const I: usize> NonLocalValue for AutoSet<T, S, I>

Source§

impl<T: NonLocalValue, const N: usize> NonLocalValue for [T; N]

Source§

impl<T: NonLocalValue, const N: usize> NonLocalValue for SmallVec<[T; N]>

Source§

impl<T: ?Sized> NonLocalValue for PhantomData<T>

Source§

impl<U, T, Return> NonLocalValue for fn(U, T) -> Return

Source§

impl<U: NonLocalValue, T: NonLocalValue> NonLocalValue for (U, T)

Source§

impl<V, U, T, Return> NonLocalValue for fn(V, U, T) -> Return

Source§

impl<V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (V, U, T)

Source§

impl<W, V, U, T, Return> NonLocalValue for fn(W, V, U, T) -> Return

Source§

impl<W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (W, V, U, T)

Source§

impl<X, W, V, U, T, Return> NonLocalValue for fn(X, W, V, U, T) -> Return

Source§

impl<X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (X, W, V, U, T)

Source§

impl<Y, X, W, V, U, T, Return> NonLocalValue for fn(Y, X, W, V, U, T) -> Return

Source§

impl<Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (Y, X, W, V, U, T)

Source§

impl<Z, Y, X, W, V, U, T, Return> NonLocalValue for fn(Z, Y, X, W, V, U, T) -> Return

Source§

impl<Z: NonLocalValue, Y: NonLocalValue, X: NonLocalValue, W: NonLocalValue, V: NonLocalValue, U: NonLocalValue, T: NonLocalValue> NonLocalValue for (Z, Y, X, W, V, U, T)

Implementors§