Типы переменного размера (dynamically sized types, DST) в языке Rust
В языке Rust планируется новшество: типы переменного размера. Естественно, после новости было трудно пройти мимо. И что же? Читаем:
Currently there are four vector related types:
• [T, ..n] — fixed-size vector, size is part of the type
• ~[T] — unique vector, growable, size only known at runtime
• Vec — vector, growable, size only known at runtime
• &[T] — vector slice, fixed size, size only known at runtime
Fixed-size vectors are the simplest vector type. They are allocated with an
arbitrary but fixed size. This size is part of their type. They can and should
be used whenever the necessary amount of storage is known at compile time.
Unlike all other vector types they can be allocated on the stack.
и переводим:
В настоящее время существует четыре связанных векторных типа:
• [T, ..n] — вектор фиксированного размера, размер является частью типа
• ~[T] — уникальный вектор, расширяемый, размер известен только во время выполнения
• Vec - вектор, расширяемый, размер известен только во время выполнения
• &[T] — срез вектора, фиксированного размера, размер известен только во время выполнения
Векторы фиксированного размера — простейший векторный тип.
Они размещаются произвольно, но имеют фиксированный размер.
Этот размер является частью их типа.
Они могут и должны использоваться всякий раз, когда необходимое количество памяти известно во время компиляции.
В отличие от всех других векторных типов, они могут быть размещены в стеке.
Почему рассматриваем типы с переменным размером?
Да потому, что память под объекты фиксированного размера можно распределить статически, во время компиляции.
Экземпляры же типов переменного размера должны создаваться конструкторами во время исполнения программы.
Эти конструкторы и есть функции, которые должны разместить в памяти объект переменной длины и возвратить указатель на него.
Как указывают нам специалисты по Rust, векторы фиксированного размера, известного во время компиляции,
могут быть (а может и нет?) размещены в стеке.
Это недвусмысленно означает, что
- объекты переменного размера и
- объекты фиксированного размера, неизвестного во время компиляции,
в стеке размещены быть не могут. А где же их можно разместить? Конечно же, в «куче».
Читаем далее следующую статью:
Массивы переменной длины в C/C++
.
Почитайте ещё:
Опубликовано: 2014.07.27, последняя правка: 2019.01.27 20:27
Добавить свой отзыв
Написать автору можно на электронную почту mail(аt)compiler.su
|