Re: Что такое Dynamically-sized types (DSTs) в Rust ?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 12.01.15 07:59
Оценка: 82 (3) +1
Здравствуйте, x-code, Вы писали:

XC>Понятно что некоторые типы могут порождать объекты динамического размера. В С++ хотя-бы std::vector и std::list. Но это и так понятно и придумано уже давно.


XC>А здесь что?


std::vector и std::list — структуры постоянного размера (и известного при компиляции), содержащие указатели на память в куче.
Вот получаешь ты в функцию адрес чего-то. И хочешь это что-то скопировать по значению. Для этого надо знать как минимум, сколько байт копировать. Если это примитивный тип или тупл/структура, то размер компилятору известен статически, все ок. std::vector и std::list как раз такие.
А вот если это что-то описано как объект некоторого класса, и этот класс служит базовым для некоторых других, то возможно, что вместо объекта базового класса там окажется объект наследного, он может быть уже другого размера. Что там на самом деле — известно лишь в рантайме, вот и получается тип динамического размера. Если копировать, полагаясь на известный при компиляции тип, то объект может быть скопирован не целиком, получается слайсинг, беда. Поэтому в цивизизованных ОО языках все объекты размерщают в куче и передают лишь по указателю, по значению их не копируют.
Аналогично и тут, только вместо базового класса trait, который служит аналогом интерфейса. Если известен лишь интерфейс/trait, то размер объекта, который его реализует, неизвестен статически, он динамический.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.