Методы работы с памятью в Rust нацелены на исключение ошибок при манипулировании указателями и защиту от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- Добавлен макрос "cfg_select!", который может применяться вместо пакета "cfg-if" для обработки нескольких условий компиляции в стиле блока "match", без определения цепочки условных выражений с конструкцией "#[cfg]".
Код:
cfg_select! {
unix => {
fn foo() { /* unix */ }
}
target_pointer_width = "32" => {
fn foo() { /* не-unix, 32-bit */ }
}
_ => {
fn foo() { /* не unix и не 32-bit */ }
}
} - Стабилизирована возможность указания выражений "if let" внутри блоков "match" для создания условных сопоставлений по шаблону. Ранее поддержка указания нескольких выражений "let" с использованием оператора "&&" была стабилизирована для блоков "if" и "while".
Код:
match value {
Some(x) if let Ok(y) = compute(x) => {
println!("{}, {}", x, y);
}
_ => {}
} - Стабилизирована поддержка inline-ассемблера для архитектур PowerPC и PowerPC64.
- В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
- MaybeUninit‹[T; N]>: From‹[MaybeUninit‹T>; N]>
- MaybeUninit‹[T; N]>: AsRef‹[MaybeUninit‹T>; N]>
- MaybeUninit‹[T; N]>: AsRef‹[MaybeUninit‹T>]>
- MaybeUninit‹[T; N]>: AsMut‹[MaybeUninit‹T>; N]>
- MaybeUninit‹[T; N]>: AsMut‹[MaybeUninit‹T>]>
- [MaybeUninit‹T>; N]: From‹MaybeUninit‹[T; N]›
- Cell‹[T; N]>: AsRef‹[Cell‹T>; N]>
- Cell‹[T; N]>: AsRef‹[Cell‹T>]>
- Cell‹[T]>: AsRef‹[Cell‹T>]>
- bool: TryFrom‹{integer}>
- AtomicPtr::update
- AtomicPtr::try_update
- AtomicBool::update
- AtomicBool::try_update
- AtomicIn::update
- AtomicIn::try_update
- AtomicUn::update
- AtomicUn::try_update
- cfg_select!
- mod core::range
- core::range::RangeInclusive
- core::range::RangeInclusiveIter
- core::hint::cold_path
- ‹*const T>::as_ref_unchecked
- ‹*mut T>::as_ref_unchecked
- ‹*mut T>::as_mut_unchecked
- Vec::push_mut
- Vec::insert_mut
- VecDeque::push_front_mut
- VecDeque::push_back_mut
- VecDeque::insert_mut
- LinkedList::push_front_mut
- LinkedList::push_back_mut
- Layout::dangling_ptr
- Layout::repeat
- Layout::repeat_packed
- Layout::extend_packed
- Признак "const" применён в функциях:
- В стабильных версиях инструментария убрана поддержка передачи компилятору спецификаций собственных целевых платформ.
- Целевые платформы powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos и aarch64-apple-visionos-sim переведены на второй уровень поддержки, который подразумевает гарантию сборки, но отсутствие гарантий при прохождении тестового набора.
Дополнительно можно отметить недавно анонсированные проекты и события, связанные с Rust:
- Компания Canonical представила дисплейный сервер Mir 2.26, предоставляющий набор библиотек для создания композитных серверов на базе протокола Wayland и включающий типовую функциональность оконных менеджеров и дисплейных серверов. Mir задействован в таких проектах, как композитный менеджер Miracle, оболочка для интернет-киосков Ubuntu Frame и пользовательское окружение Miriway.
Новый выпуск примечателен добавлением возможности разработки компонентов на языке Rust. На Rust реализована альтернативная подсистема управления вводом evdev-rs и начата работа над написанным на Rust фронтэндом wayland-rs для Wayland. Из не связанных с Rust изменений в Mir отмечена поддержка Wayland-протоколов ext_image_copy_capture_v1 и input-triggers. - Опубликован первый релиз анализатора трафика ayaFlow, написанного на Rust и использующего подсистему ядра Linux eBPF для перехвата сетевых пакетов (IPv4/TCP/UDP) и кадров Ethernet с минимальным влиянием на производительность.
Поддерживается глубокое инспектирование протоколов прикладного уровня (L7), например, извлечение TLS SNI и DNS-запросов при анализе шифрованного трафика. Система поддерживает ведение таблицы с текущим состоянием соединений в формате DashMap, сохранение истории в SQLite и отдачу статистики через REST API для Prometheus. - Реализована возможность создания многопоточных приложений на языке Rust, использующих функции std::thread и выполняемых на стороне GPU.
Источник: https://www.opennet.ru/opennews/art.shtml?num=65230
(opennet.ru, основная лента)