Мининовости
Мелкие изменения: стабилизация API, новые методы и impl, правки Cargo.
Опубликован разбор реализации хеш-таблицы с нуля — с выбором хеш-функции, разрешением коллизий и перераспределением памяти при росте таблицы.
Реализован метод Vec::push_mut: он вставляет значение по индексу и возвращает ссылку на элемент, который там лежал раньше. Это позволяет заменить элемент без лишнего remove и insert.
Открыт RFC с предложением ввести «метки безопасности» — механизм, отделяющий проверки безопасности, влияющие на корректность программы, от проверок, влияющих на её безопасность с точки зрения доступа к памяти.
Добавлен тип core::mem::DropGuard: он оборачивает значение и запускает заданное замыкание в момент, когда значение будет удалено. Это безопасная замена defer-подобным трюкам на Drop.
Опубликован разбор того, как написать гипервизор на Rust, взяв на себя роль BIOS: загрузка ядра гостевой системы, распределение памяти и настройка таблиц страниц средствами KVM.
Реализованы фичи sync_nonpoison и nonpoison_mutex: мьютексы и блокировки чтения-записи, которые не ставят признак отравления при панике во владении. Полезно там, где паника в одном потоке не означает, что защищённые данные испорчены.
Рабочая группа Rust and WebAssembly была архивирована в проекте Rust в 2024 году после примерно пяти лет без активности — теперь объявлены конкретные сроки закрытия GitHub-организации rustwasm.
Открыт RFC, разрешающий использовать символы совместимости математической записи Unicode в идентификаторах.
Анонсирован nightly-флаг rustc -Zhint-mostly-unused и соответствующие nightly-фичи Cargo profile.hint-mostly-unused и hints.mostly-unused. Они помогают ускорить компиляцию.
Открыт RFC с атрибутом repr(scalable).
В Rust 1.88.0 стабильны атрибут #[unsafe(naked)] и макрос naked_asm! для определения «голых» функций: тело такой функции состоит из одного вызова naked_asm!, что нужно для точного контроля над ABI и ассемблером.
Открыт RFC со строковыми литералами, у которых выравниваются отступы — dedented string literals.
Открыт de-RFC — предложение удалить нестабильную возможность unsized_locals.
Открыт RFC, разрешающий объявлять процедурные макросы в том же пакете, где они используются.
Команда bootstrap анонсирует предстоящее крупное изменение начальной последовательности сборки Rust. В посте уточняется, что дистрибутивные пакеты не пострадают: пакет версии N+1 по-прежнему можно будет собрать компилятором версии N.