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

#garbage-collection #rust

#сборка мусора #Ржавчина

Вопрос:

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

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

1. У Rust нет сборщика мусора.

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

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

Ответ №1:

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

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

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

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

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

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

УRust нет сборщика мусора. У него есть интеллектуальные указатели, которые освобождают ресурсы, когда указатель выходит за пределы области видимости.

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