在 Rust 中,为什么 '[T]' 和 'str' 切片类型不是语法错误?

In Rust, why is '[T]' and 'str' slice type not a syntax error?

据我了解,&[T] 类型是一个 'fat' 指针(内存地址和大小),而不是切片本身,[T] 是被引用的实际切片。但他们为什么不在下面的上下文中将 [T] 设为语法错误?

let y: [i32; 6] = [1, 2, 3, 4, 5, 6];

// let z: [i32] = y[..]; // error: the size for values of type `[i32]` cannot be known at compilation time

let z: &[i32] = &y[..]; // OK

// let v: str = "Hello World"; // the size for values of type `str` cannot be known at compilation time

从错误:[i32] cannot be known at compilation,这只是一个错误,让我,用户,理解为什么这个语法是不可能的,或者是因为我没有正确使用这个语法,它是在某些情况下有效吗?

编辑:修正错别字

因为在某些情况下可以使用 str[T]dyn MyTrait 等未确定大小的类型。

目前最常见的是泛型。例如,您可以使用 Box<[T]>Box<str>Arc<[T]> 或任何具有 ?Sized 绑定的泛型。

还有一些开发中的功能使用了此类未确定大小的类型:

But why didn't they make [T] a syntax error in the context below?

因为语法没有任何理由无效?

虽然 DST 难以使用并且在任何地方都没有意义,但在某些情况下它们是完全合法的,例如

struct Foo {
    a: usize,
    b: [i32]
}