Новости
Значительные события: релизы, анонсы компаний, RFC, инженерные события вокруг Rust.
Принят RFC, меняющий порядок освобождения памяти: временные значения, созданные в хвостовом выражении блока, уничтожаются раньше локальных переменных этого блока.
В Rust 1.78.0 появилось пространство атрибутов #[diagnostic] для влияния на сообщения компилятора. Это подсказки: компилятор не обязан их использовать, а незнакомый атрибут не считается ошибкой. Первый поддерживаемый атрибут — #[diagnostic::on_unimplemented] для трейтов.
4lDO2 улучшил реализацию futex в ядре и relibc: таймауты стали абсолютными, а не относительными, и исправлена ошибка, когда copy-on-write целевой памяти не давал futex пробудиться. Также устранена паника ядра, вызывавшая цикл страничных ошибок и перезапуск системы.
Улучшения USB позволили впервые запустить рабочий стол Orbital на ARM64 в QEMU. Следующий шаг — проверка на реальном оборудовании.
Jeremy переработал драйвер USB HID, и USB-устройства ввода (клавиатура и мышь) заработали. Драйвер хост-контроллера пока опрашивает устройства (небольшие накладные расходы), работа над прерываниями продолжается; USB-хабы поддерживаются слабо.
Принят RFC, который резервирует в редакции 2024 ключевое слово gen и добавляет в язык блоки gen { .. }. Они производят значения, которые можно перебирать через for — как async-блоки производят значения, доступные через .await.
4lDO2 уменьшил базовые накладные расходы системного вызова на x86_64 — с 344 до 116 циклов.
4lDO2 заменил buddy-аллокатор менеджера памяти на аллокатор кадров на связном списке со сложностью O(1). Глобальные накладные расходы на выделение памяти упали с 35% до 0.9%, а накладные расходы при загрузке — на 95%.
Chocimier портировал Apache HTTP Server настолько, что он способен отдавать страницы через localhost. Работа ещё не завершена, но это важный первый шаг.
bjorn3 внёс изменения, делающие ядро Redox независимым от загрузчика: теперь Redox можно загрузить как через GRUB, так и через Limine.
Библиотека libredox — часть стратегии стабильного ABI Redox: она снижает влияние ломающих изменений и позволяет быстрее развивать ядро. 4lDO2 завершил перенос всех системных компонентов с менее стабильного крейта redox_syscall на libredox.
В Rust 1.77.0 появились C-строковые литералы c"abc": они разворачиваются в строку с завершающим нулевым байтом типа &'static CStr, что упрощает взаимодействие с внешними интерфейсами — проверки (например, отсутствие нулевого байта внутри) выполняются на этапе компиляции. Также Cargo по умолчанию начал срезать отладочную информацию в release-сборках.
Принят RFC о необязательных пространствах имён для пакетов на crates.io: владелец аккаунта может объявить пространство имён и управлять тем, какие пакеты в нём публикуются.
Jeremy Soller реализовал записи (records) в RedoxFS, что сильно ускорило чтение и запись файлов. Замеры dd с ростом размера блока показали кратный выигрыш как для RAM-схемы, так и для диска через файловую систему RedoxFS.
Принят RFC, по которому резолвер Cargo при выборе версий зависимостей по умолчанию учитывает минимальную поддерживаемую версию Rust (MSRV) — как заявленную самим пакетом, так и подразумеваемую его редакцией.