Как вы на самом деле используете динамически изменяемые типы в Rust?

Теоретически приземлились динамические типы (DST), и теперь мы должны иметь возможность использовать экземпляры динамического размера. Практически, я не могу ни заставить это работать, ни понять тесты вокруг этого.

Кажется, все вращается вокругSized? ключевое слово ... но как именно вы его используете?

Я могу соединить несколько типов:

// 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
}

... но как мне создать экземплярHasFoo, который является DST, чтобы иметь либоBar&nbsp;или жеBar2?

Попытка сделать это всегда, кажется, приводит к:

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

В общем, я понимаю, что у вас не может быть голого динамического типа; Вы можете взаимодействовать только с одним указателем, но я не могу понять, как это сделать.