¿Cómo se utilizan tipos de tamaño dinámico en Rust?

En teoría, los tipos de tamaño dinámico (DST) han aterrizado y ahora deberíamos poder usar instancias de tipo de tamaño dinámico. Hablando prácticamente, no puedo hacer que funcione, ni entender las pruebas que lo rodean.

Todo parece girar en torno a laSized? palabra clave ... pero, ¿cómo se usa exactamente?

Puedo poner algunos tipos juntos:

// Note that this code example predates Rust 1.0
// and is no longer syntactically valid

trait Foo for Sized? {
    fn foo(&self) -> u32;
}

struct Bar;
struct Bar2;

impl Foo for Bar { fn foo(&self) -> u32 { return 9u32; }}
impl Foo for Bar2 { fn foo(&self) -> u32 { return 10u32; }}

struct HasFoo<Sized? X> {
    pub f:X
}

... pero ¿cómo creo una instancia deHasFoo, que es DST, para tener unaBar oBar2?

Intentar hacerlo siempre parece tener como resultado:

<anon>:28:17: 30:4 error: trying to initialise a dynamically sized struct
<anon>:28   let has_foo = &HasFoo {

En términos generales, entiendo que no puedes tener un tipo desnudo de tamaño dinámico; solo puedes interactuar con uno a través de un puntero, pero no puedo entender cómo hacerlo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta