Я думал, что одна из главных особенностей Rust - системный язык, сравнимый с C, но с сборщиком мусора. Если это так, зачем вам возвращать значения статического размера (или использовать Box
из того, что я собираю)?Почему Rust должен возвращать статические размеры?
ответ
Почему Rust необходимо вернуть статические размеры?
Каждое значение на каждом языке должно иметь статический размер. Вот как компилятор/интерпретатор/среда выполнения/виртуальная машина/оборудование знают, как получить доступ к битам, которые составляют значение.
На многих языках каждое значение сопоставимо с Rust Box
, поэтому все они занимают пространство в два или два указателя. Статически известный размер для этих значений позволяет использовать слой косвенности, который может указывать на что-то с определенным размером времени выполнения.
В Rust (и C, C++, возможно, другие системные языки) вы также можете прямо хранить произвольные значения в стеке, unboxed. В этих случаях вам все равно нужно знать размер, который будет занимать значение.
Это упрощение, так как некоторые языки позволяют определенным конкретным значениям находиться в стеке, а другие «внедряют» определенные типы значений внутри косвенного фиксированного размера. Такие хитрости обычно приводятся по соображениям производительности.
но с сборщика мусора
Rust does not have a garbage collector. У него есть умные указатели, которые освобождают ресурсы, когда указатель выходит из сферы видимости.
- 1. Почему я должен «возвращать» функцию?
- 2. Почему main() должен возвращать int?
- 3. Почему метод Interlocked.Add() должен возвращать значение?
- 4. Почему метод async должен возвращать будущее?
- 5. Почему matchInDirectory должен возвращать точки монтирования
- 6. Статические поля в структуре в Rust
- 7. Контроллер должен возвращать ответ
- 8. Метод должен возвращать int
- 9. метод должен возвращать значение
- 10. должен возвращать форматированный массив
- 11. Is getActionBar() должен возвращать null?
- 12. Почему это называется «Rust»?
- 13. PHPSспец должен возвращать правильное значение
- 14. Метод должен возвращать тип int
- 15. дооснащения errorBody() должен возвращать Дополнительный
- 16. .readlines() не должен возвращать массив?
- 17. jsonb_populate_record/jsonb_populate_recordset должен возвращать таблицу
- 18. Какой метод GuiceInterceptor должен возвращать
- 19. «Mock # to_hash должен возвращать хэш»
- 20. UITableView dataSource должен возвращать ячейку
- 21. GetRequests() должен возвращать Iterable массивов
- 22. Laravel ORM должен возвращать связь
- 23. Emoji edittext должен возвращать Unicode
- 24. ComServer, который должен возвращать ComObject
- 25. Запрос linq должен возвращать строку
- 26. math.floor должен возвращать целое число
- 27. Метод должен возвращать несколько значений
- 28. $ stdout.gets блокирует, когда он должен возвращать выходные данные, почему?
- 29. Почему моя функция возвращает мусор, когда он должен возвращать символ?
- 30. Метод должен возвращать отсортированный массив, но почему я получаю NullPointerException?
[Ржавчина не имеет сборщика мусора.] (Https://www.rust-lang.org/en-US/faq.html#is-rust-garbage-collected) – 8bittree
Вы можете сделать это как атомный справочник счетчики для «сортировки» выполняют вещи, которые обрабатывают сборщики мусора. https://doc.rust-lang.org/std/sync/struct.Arc.html –
«системный язык, сопоставимый с C, но с сборщиком мусора», который был бы D, а не Rust. Где вы это читали? –