2016-10-18 3 views
-1

Я думал, что одна из главных особенностей Rust - системный язык, сравнимый с C, но с сборщиком мусора. Если это так, зачем вам возвращать значения статического размера (или использовать Box из того, что я собираю)?Почему Rust должен возвращать статические размеры?

+11

[Ржавчина не имеет сборщика мусора.] (Https://www.rust-lang.org/en-US/faq.html#is-rust-garbage-collected) – 8bittree

+1

Вы можете сделать это как атомный справочник счетчики для «сортировки» выполняют вещи, которые обрабатывают сборщики мусора. https://doc.rust-lang.org/std/sync/struct.Arc.html –

+1

«системный язык, сопоставимый с C, но с сборщиком мусора», который был бы D, а не Rust. Где вы это читали? –

ответ

10

Почему Rust необходимо вернуть статические размеры?

Каждое значение на каждом языке должно иметь статический размер. Вот как компилятор/интерпретатор/среда выполнения/виртуальная машина/оборудование знают, как получить доступ к битам, которые составляют значение.

На многих языках каждое значение сопоставимо с Rust Box, поэтому все они занимают пространство в два или два указателя. Статически известный размер для этих значений позволяет использовать слой косвенности, который может указывать на что-то с определенным размером времени выполнения.

В Rust (и C, C++, возможно, другие системные языки) вы также можете прямо хранить произвольные значения в стеке, unboxed. В этих случаях вам все равно нужно знать размер, который будет занимать значение.

Это упрощение, так как некоторые языки позволяют определенным конкретным значениям находиться в стеке, а другие «внедряют» определенные типы значений внутри косвенного фиксированного размера. Такие хитрости обычно приводятся по соображениям производительности.

но с сборщика мусора

Rust does not have a garbage collector. У него есть умные указатели, которые освобождают ресурсы, когда указатель выходит из сферы видимости.

Box - очевидный умный указатель, но есть также Rc и Arc.

Смежные вопросы