Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- Стабилизирован ABI C-unwind (‘extern «C-unwind»‘), который отличается от ABI без суффикса «-unwind» (‘extern «C»‘) сохранением безопасного поведения (safe), если процесс «размотки» (unwinding), инициируемый при аварийном завершении программы или генерации исключения в стиле C++, пересекает границу ABI (например, когда исключение, возникшее в коде на одном языке программирования, при размотке затрагивает стек, связанный с кодом на другом языке программирования).
- Стабилизирована поддержка атрибутов ‘#[debug_visualizer(natvis_file = «…»)]’ и ‘#[debug_visualizer(gdb_script_file = «…»)]’, позволяющих встраивать в Rust-библиотеки метаданные Microsoft Natviz и скрипты GDB для улучшения отладочного вывода при инспектировании структур данных, создаваемых библиотеками. Подобные скрипты уже включаются для стандартной библиотеки, а теперь появилась возможность их включения и для сторонних библиотек.
- На платформе Windows реализована возможность использования функций из динамических библиотек, которые недоступны во время сборки (например, чтобы не устанавливать лишние библиотеки в сборочное окружение и упростить кросс-компиляцию). Для связывания с отсутствующими библиотеками в атрибуте «#[link]» предложена опция ‘kind=»raw-dylib»‘.
- Целевые платформы, использующие Си-библиотеку Musl («*-linux-musl»),
переведены на выпуск Musl 1.2.3 (ранее использовалась версия 1.1.24), что позволяет использовать тип time64 на 32-разрядных системах. - В стандартной библиотеке предложен вариант макроса thread_local, инициализируемый с признаком «const», допускающим использование в контексте вместо констант, что позволяет генерировать более оптимальный код.
use std::cell::Cell; thread_local! { pub static FOO: Cell
= const { Cell::new(1) }; } - В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
CStr::is_empty
BuildHasher::hash_one
NonZeroI*::is_positive
NonZeroI*::is_negative
NonZeroI*::checked_neg
NonZeroI*::overflowing_neg
NonZeroI*::saturating_neg
NonZeroI*::wrapping_neg
Neg for NonZeroI*
Neg for &NonZeroI*
-
From‹[T; N]› for (T...)
-
From‹(T...)› for [T; N]
windows::io::AsHandle for Box‹T›
windows::io::AsHandle for Rc‹T›
windows::io::AsHandle for Arc‹T›
windows::io::AsSocket for Box‹T›
windows::io::AsSocket for Rc‹T›
windows::io::AsSocket for Arc‹T›
- Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функциях:
- В пакетном менеджере Cargo разрешено указание именованных опций debuginfo в файле Cargo.toml. В метаданные добавлена опция workspace_default_members. При выполнении команд «cargo new» и «cargo init» обеспечено автоматическое наследование полей рабочих пространств (workspace).
- Реализован второй уровень поддержки целевой платформы loongarch64-unknown-linux-gnu. Второй уровень поддержки подразумевает гарантию сборки.
- Реализован третий уровень поддержки для платформы x86_64h-apple-darwin. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
Источник: http://www.opennet.ru/opennews/art.shtml?num=59438