Методы работы с памятью в 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::updateAtomicPtr::try_updateAtomicBool::updateAtomicBool::try_updateAtomicIn::updateAtomicIn::try_updateAtomicUn::updateAtomicUn::try_updatecfg_select!mod core::rangecore::range::RangeInclusivecore::range::RangeInclusiveItercore::hint::cold_path‹*const T>::as_ref_unchecked‹*mut T>::as_ref_unchecked‹*mut T>::as_mut_uncheckedVec::push_mutVec::insert_mutVecDeque::push_front_mutVecDeque::push_back_mutVecDeque::insert_mutLinkedList::push_front_mutLinkedList::push_back_mutLayout::dangling_ptrLayout::repeatLayout::repeat_packedLayout::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. - Реализована/a> возможность создания многопоточных приложений на языке Rust, использующих функции std::thread и выполняемых на стороне GPU.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65230
