Trait zerogc::GcSafe[][src]

pub unsafe trait GcSafe: Trace {
    const NEEDS_DROP: bool;
}

Indicates that a type can be safely allocated by a garbage collector.

Safety

Custom destructors must never reference garbage collected pointers. The garbage collector may have already freed the other objects before calling this type’s drop function.

Unlike java finalizers, this allows us to deallocate objects normally and avoids a second pass over the objects to check for resurrected objects.

Associated Constants

const NEEDS_DROP: bool[src]

If this type needs a destructor run

This is usually equivalent to std::mem::needs_drop. However procedurally derived code can sometimes provide a no-op drop implementation (for safety), which would lead to a false positive with std::mem::needs_drop()

Loading content...

Implementations on Foreign Types

impl GcSafe for i8[src]

impl GcSafe for i16[src]

impl GcSafe for i32[src]

impl GcSafe for i64[src]

impl GcSafe for isize[src]

impl GcSafe for u8[src]

impl GcSafe for u16[src]

impl GcSafe for u32[src]

impl GcSafe for u64[src]

impl GcSafe for usize[src]

impl GcSafe for f32[src]

impl GcSafe for f64[src]

impl GcSafe for bool[src]

impl GcSafe for char[src]

impl GcSafe for &'static str[src]

impl<T> GcSafe for PhantomData<T>[src]

impl GcSafe for ()[src]

impl<I> GcSafe for (I,) where
    I: GcSafe,
    I: Trace
[src]

impl<H, I> GcSafe for (H, I) where
    H: GcSafe,
    I: GcSafe,
    H: Trace,
    I: Trace
[src]

impl<G, H, I> GcSafe for (G, H, I) where
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<F, G, H, I> GcSafe for (F, G, H, I) where
    F: GcSafe,
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    F: Trace,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<E, F, G, H, I> GcSafe for (E, F, G, H, I) where
    E: GcSafe,
    F: GcSafe,
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    E: Trace,
    F: Trace,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<D, E, F, G, H, I> GcSafe for (D, E, F, G, H, I) where
    D: GcSafe,
    E: GcSafe,
    F: GcSafe,
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    D: Trace,
    E: Trace,
    F: Trace,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<C, D, E, F, G, H, I> GcSafe for (C, D, E, F, G, H, I) where
    C: GcSafe,
    D: GcSafe,
    E: GcSafe,
    F: GcSafe,
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    C: Trace,
    D: Trace,
    E: Trace,
    F: Trace,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<B, C, D, E, F, G, H, I> GcSafe for (B, C, D, E, F, G, H, I) where
    B: GcSafe,
    C: GcSafe,
    D: GcSafe,
    E: GcSafe,
    F: GcSafe,
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    B: Trace,
    C: Trace,
    D: Trace,
    E: Trace,
    F: Trace,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<A, B, C, D, E, F, G, H, I> GcSafe for (A, B, C, D, E, F, G, H, I) where
    A: GcSafe,
    B: GcSafe,
    C: GcSafe,
    D: GcSafe,
    E: GcSafe,
    F: GcSafe,
    G: GcSafe,
    H: GcSafe,
    I: GcSafe,
    A: Trace,
    B: Trace,
    C: Trace,
    D: Trace,
    E: Trace,
    F: Trace,
    G: Trace,
    H: Trace,
    I: Trace
[src]

impl<T> GcSafe for [T; 0] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 1] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 2] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 3] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 4] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 5] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 6] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 7] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 8] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 9] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 10] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 11] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 12] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 13] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 14] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 15] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 16] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 17] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 18] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 19] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 20] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 24] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 32] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 48] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 64] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 100] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 128] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 256] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 512] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 1024] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 2048] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T; 4096] where
    T: GcSafe,
    T: Trace
[src]

impl<'a, T: 'a> GcSafe for &'a T where
    T: GcSafe,
    T: TraceImmutable
[src]

impl<'a, T: 'a> GcSafe for &'a mut T where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for [T] where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for Option<T> where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for Wrapping<T> where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for Vec<T> where
    T: GcSafe,
    T: Trace
[src]

impl<T> GcSafe for Box<T> where
    T: GcSafe,
    T: Trace
[src]

impl<T: TraceImmutable> GcSafe for Rc<T> where
    T: GcSafe,
    T: Trace
[src]

impl<T: TraceImmutable> GcSafe for Arc<T> where
    T: GcSafe,
    T: Trace
[src]

impl GcSafe for String[src]

impl<K: TraceImmutable, V> GcSafe for HashMap<K, V> where
    K: GcSafe,
    V: GcSafe,
    K: Trace,
    V: Trace
[src]

impl<T: TraceImmutable> GcSafe for HashSet<T> where
    T: GcSafe,
    T: Trace
[src]

Loading content...

Implementors

impl<'gc, T: GcSafe + 'gc, Id: CollectorId> GcSafe for Gc<'gc, T, Id>[src]

Double-indirection is completely safe

impl<T> GcSafe for AssumeNotTraced<T>[src]

impl<T: GcSafe + Copy> GcSafe for GcCell<T>[src]

const NEEDS_DROP: bool[src]

Since T is Copy, we shouldn’t need to be dropped

Loading content...