Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

Типы переменного размера (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

ОценитеОценки посетителей
   █████████████████ 2 (40%)
   █████████ 1 (20%)
   █████████ 1 (20%)
   █████████ 1 (20%)

Добавить свой отзыв

Написать автору можно на электронную почту
mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Содержание

Каким должен быть язык программирования?

Анализ и критика

●  Устарел ли текст как форма представления программы

●  Русский язык и программирование

●  Многоязыковое программирование

Синтаксис языков программирования

Синтаксический сахар

●  Некоторые «вкусности» Алгол-68

●  «Двухмерный» синтаксис Python

●  Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

●  Должна ли программа быть удобочитаемой?

●  Стиль языка программирования

●  Тексто-графическое представление программы

●●  Разделители

●●  Строки программы

●●  Слева направо или справа налево?

●  Комментарии

●●  Длинные комментарии

●●  Короткие комментарии

●●  Комментарии автоматической генерации документации

●●  Нерабочий код

●●  Помеченные комментарии

●  Нужны ли беззнаковые целые?

●  Шестнадцатиричные и двоичные константы

●  Условные операторы

●  Переключатель

●  Циклы

●●  Продолжение цикла и выход из него

●  Некошерный «goto»

●  Изменение приоритетов операций

●  Операции присвоения и проверки на равенство. Возможно ли одинаковое обозначение?

●  Так ли нужны операции «&&», «||» и «^^»?

●  Постфиксные инкремент и декремент

●  Почему в PHP для конкатенации строк используется «.»?

●  Указатели и ссылки в C++

●●  О неправомерном доступе к памяти через указатели

●  Обработка ошибок

●  Функциональное программирование

●●  Нечистые действия в чистых функциях

●●  О чистоте и нечистоте функций и языков

●●  Макросы — это чистые функции, исполняемые во время компиляции

●●  Хаскелл, детище британских учёных

●●  Измеряем замедление при вызове функций высших порядков

●●  C vs Haskell: сравнение скорости на простом примере

●●  Уникальность имён функций: за и против

●●  Каррирование: для чего и как

●●  О тестах, доказывающих отсутствие ошибок

●  Надёжные программы из ненадёжных компонентов

●●  О многократном резервировании функций

●  Использование памяти

●  Почему динамическое распределение памяти — это плохо

●  Как обеспечить возврат функциями объектов переменной длины?

●●  Типы переменного размера (dynamically sized types, DST) в языке Rust

●●  Массивы переменной длины в C/C++

●●  Размещение объектов в стеке, традиционный подход

●●  Размещение объектов переменной длины с использованием множества стеков

●●  Размещение объектов переменной длины с использованием двух стеков

●●  Реализация двухстековой модели размещения данных

●●  Двухстековая модель: тесты на скорость

●●  Изменение длины объекта в стеке во время исполнения

●●  Размещение объектов переменной длины с использованием одного стека

●  Можно ли забыть о «куче», если объекты переменной длины хранить в стеке

●  Безопасность и размещение объектов переменной длины в стеке

●  Массивы, структуры, типы, классы переменной длины

●  О хранении данных в стеке, вместо заключения

●  Реализация параметрического полиморфизма

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Новости и прочее




Последние отзывы

2024/04/23 15:57 ••• Ivan
Энтузиасты-разработчики компиляторов и их проекты

2024/04/23 00:00 ••• alextretyak
Признаки устаревшего языка

2024/04/21 00:00 ••• alextretyak
Постфиксные инкремент и декремент

2024/04/20 21:28 ••• Бурановский дедушка
Русский язык и программирование

2024/04/07 15:33 ••• MihalNik
Все языки эквивалентны. Но некоторые из них эквивалентнее других

2024/04/01 23:39 ••• Бурановский дедушка
Новости и прочее

2024/04/01 23:32 ••• Бурановский дедушка
Русской операционной системой должна стать ReactOS

2024/03/22 20:41 ••• void
Раскрутка компилятора

2024/03/20 19:54 ••• kt
О многократном резервировании функций

2024/03/20 13:13 ••• Неслучайный читатель
Надёжные программы из ненадёжных компонентов

2024/03/07 14:16 ••• Неслучайный читатель
«Двухмерный» синтаксис Python

2024/03/03 16:49 ••• Автор сайта
О неправомерном доступе к памяти через указатели

2024/02/28 18:59 ••• Вежливый Лис
Про лебедей, раков и щук