#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 нет сборщика мусора. У него есть интеллектуальные указатели, которые освобождают ресурсы, когда указатель выходит за пределы области видимости.