Ответ 1
Эта способность еще не доступна. RFC 2000 - const generics будет поддерживать его, когда он будет реализован, и прогресс отслеживается в выпуске # 44580.
В Nightly Rust ваш пример будет выглядеть так:
#![feature(const_generics)]
struct Vec<T: Sized, const COUNT: usize> {
a: [T; COUNT],
}
Если вы посмотрите на дизайн Rust, вы заметите, что он начался сначала с решения самых сложных проблем (безопасных для памяти, без гонки данных), но в остальном есть много областей, где он "неполон" (по сравнению с тем, что может быть достигнута).
В частности, общие структуры и функции сегодня несколько ограничены:
- отсутствие Высших Родовых Типов (HKT)
- отсутствие нетиповых параметров => массивы имеют специальный случай, и реализация свойства для массива является известной проблемой, обходной путь состоит в том, чтобы реализовать его для нескольких различных измерений
- отсутствие переменных параметров => кортежи имеют специальный случай, и реализация черты для всех кортежей также сложна
На данный момент они не реализованы не потому, что они нежелательны, а просто потому, что времени не хватало. Идея Rust 1.0 заключалась не в выпуске конечного продукта, который не будет развиваться, а в стабильной основе, с которой можно начать; некоторые или, возможно, все придут.