为什么堆栈上的项目必须具有编译时已知的大小?

blu*_*ote 8 rust

我明白为什么它们必须具有恒定的大小,但我不明白为什么必须在编译时知道该大小。即使 C 也允许在堆栈上使用可变长度数组。这个限制对 Rust 有什么帮助?

Seb*_*edl 4

\n

即使 C 也允许在堆栈上使用可变长度数组。

\n
\n

由于其简单的语义,C 可以相对容易地支持这一点。

\n

当你必须调用 destructors/ 时drop,这远没有那么简单,所以 Rust 最初并不支持它,因为它需要努力实现,并且不会带来那么多好处。

\n

最终,由于RFC 1909 \xe2\x80\x94 unsized rvalues , Rust 将支持这一点(并且已经在 nightly 上支持了) 。

\n

  • *这远没有那么简单* - 我有兴趣了解为什么添加析构函数会使这变得更困难;对我来说这不是一个明显的飞跃。 (7认同)
  • *已经做到了* - 迂腐,不完全是:[“VLA 尚未实现”](https://doc.rust-lang.org/nightly/unstable-book/language-features/unsized-locals.html#variable-长度数组) (2认同)