Новости
Значительные события: релизы, анонсы компаний, RFC, инженерные события вокруг Rust.
Принят RFC, фиксирующий семантику операций с плавающей точкой в Rust: операции следуют IEEE 754-2008, но с оговорками про NaN.
В Rust 1.80.0 стабилизированы «ленивые» типы LazyCell и LazyLock: инициализация откладывается до первого обращения, а функция инициализации хранится внутри. Это завершает перенос функциональности популярных lazy_static и once_cell в стандартную библиотеку; LazyLock потокобезопасен и подходит для статических значений.
Принят RFC с изменениями согласованности шаблонов (match ergonomics) для редакции 2024.
Принят RFC, вводящий derive-макрос SmartPointer: он реализует для структуры трейты, которые нужны умному указателю — например Deref, DerefMut, AsRef, Borrow, Clone, Drop.
Jacob Lorentzon (4lDO2) рассказывает о старте проекта Redox по POSIX-сигналам: Redox вошёл в число 45 проектов, получивших новые гранты NGI Zero. Цель — реализовать корректную обработку POSIX-сигналов и управление процессами, по возможности вынеся их в пользовательское пространство.
Radworks пожертвовала Redox 13 000 USD в USDC и токенах Rad через Drips Network в поддержку библиотеки termion — терминальной библиотеки Redox для текстовых интерфейсов (TUI).
Программа NGI Zero Core фонда NLnet профинансирует проект Redox OS Unix-style Signals. Грант позволит вынести большую часть кода сигналов из ядра в пользовательское пространство и приблизиться к POSIX-совместимости, а также включает процесс-менеджер в userspace.
В Rust 1.79.0 стабильны inline-константы const { ... } в позиции выражения: они позволяют явно войти в const-контекст без объявления констант, использовать generics из области видимости и выводить тип. Например, const EMPTY: Option<Vec<u8>> = None; let foo = [EMPTY; 100]; теперь можно записать короче.
Принят RFC, добавляющий синтаксис impl Trait + use<..>: он явно перечисляет, какие generics захватывает opaque-тип в позиции возврата.
COSMIC Files, COSMIC Editor и COSMIC Terminal стали постоянной частью рабочего стола Redox: Jeremy заменил ими файловый менеджер, текстовый редактор и терминал Orbital.
Принят RFC, по которому в редакции 2024 операторы a..b, a.. и a..=b разрешаются в новые типы ops::range::Range, ops::range::RangeFrom и ops::range::RangeInvariant (и RangeInclusive). Эти типы перестают быть итераторами, но реализуют Copy и IntoIterator.
Принят RFC, по которому блок extern "C" { .. } сам по себе считается unsafe-контекстом. Объявления внешних функций и статических переменных требуют явной пометки unsafe либо генерируют обёртки.
Принят RFC о cargo-script: файл с шапкой #!/usr/bin/env cargo и метаданными в начале запускается как скрипт — Cargo сам разбирает зависимости и собирает программу.
Принят RFC «Arbitrary self types v2»: нестабильная возможность принимать в методах самоподобные типы (например self: Box<Self>, self: Rc<Self>) переделывается на трейт Receiver вместо привязки к Deref.
Принят RFC, по которому атрибуты с внешним эффектом — например no_mangle, export_name, link_section — должны писаться внутри unsafe(...): #[unsafe(no_mangle)].