From c369e4b489332f8721fbae630354fa83385d457d Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Sun, 4 Jun 2023 16:21:07 +0200 Subject: [PATCH] phantom-data: Add `Send` and `Sync` columns (#411) --- src/phantom-data.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/phantom-data.md b/src/phantom-data.md index ca1c2c2..449d9e7 100644 --- a/src/phantom-data.md +++ b/src/phantom-data.md @@ -24,7 +24,7 @@ We do this using `PhantomData`, which is a special marker type. `PhantomData` consumes no space, but simulates a field of the given type for the purpose of static analysis. This was deemed to be less error-prone than explicitly telling the type-system the kind of variance that you want, while also providing other -useful things such as the information needed by drop check. +useful things such as auto traits and the information needed by drop check. Iter logically contains a bunch of `&'a T`s, so this is exactly what we tell the `PhantomData` to simulate: @@ -234,14 +234,14 @@ standard library made a utility for itself called `Unique` which: Here’s a table of all the wonderful ways `PhantomData` could be used: -| Phantom type | `'a` | `T` | -|-----------------------------|-----------|---------------------------| -| `PhantomData` | - | covariant (with drop check) | -| `PhantomData<&'a T>` | covariant | covariant | -| `PhantomData<&'a mut T>` | covariant | invariant | -| `PhantomData<*const T>` | - | covariant | -| `PhantomData<*mut T>` | - | invariant | -| `PhantomData` | - | contravariant | -| `PhantomData T>` | - | covariant | -| `PhantomData T>` | - | invariant | -| `PhantomData>` | invariant | - | +| Phantom type | `'a` | `T` | `Send` | `Sync` | +|-----------------------------|-----------|-----------------------------|-----------|-----------| +| `PhantomData` | - | covariant (with drop check) | `T: Send` | `T: Sync` | +| `PhantomData<&'a T>` | covariant | covariant | `T: Sync` | `T: Sync` | +| `PhantomData<&'a mut T>` | covariant | invariant | `T: Send` | `T: Sync` | +| `PhantomData<*const T>` | - | covariant | - | - | +| `PhantomData<*mut T>` | - | invariant | - | - | +| `PhantomData` | - | contravariant | `Send` | `Sync` | +| `PhantomData T>` | - | covariant | `Send` | `Sync` | +| `PhantomData T>` | - | invariant | `Send` | `Sync` | +| `PhantomData>` | invariant | - | `Send` | - |