Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- В пакетном менеджере Cargo реализовано определение предупреждений, которые могут быть автоматически устранены, и вывод соответствующих рекомендаций по запуску «cargo fix» или «cargo clippy —fix».
warning: unused import: 'std::hash::Hash' --> src/main.rs:1:5 | 1 | use std::hash::Hash; | ^^^^^^^^^^^^^^^ | = note: '#[warn(unused_imports)]' on by default warning: 'foo' (bin "foo") generated 1 warning (run 'cargo fix --bin "foo"' to apply 1 suggestion)
- В Cargo добавлен вывод рекомендации по использованию команды «cargo add» при попытке установки библиотеки командой «cargo install».
- Для сокращения времени компиляции по умолчанию прекращено включение отладочной информации в сборочных скриптах. При успешном выполнении сборочных скриптов изменение не приводит к каким-то видимым отличиям, но в случае сбоев дамп с обратной трассировкой будет содержать меньше информации. Для возвращения старого поведения в Cargo.toml следует добавить:
[profile.dev.build-override] debug = true [profile.release.build-override] debug = true
- В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
- Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функции
- Добавлена возможность использования флагов true и false в аргументах компилятора.
Источник: http://www.opennet.ru/opennews/art.shtml?num=59008