Мининовости
Мелкие изменения: стабилизация API, новые методы и impl, правки Cargo.
В relibc исправлены три ошибки в завершении потоков: гонка между выходом потока и pthread_join, паника в posix_exit при EAGAIN и падение при выходе из отсоединённого потока. Все три проявлялись как аварийное завершение процесса.
Блок управления потоком (TCB) в relibc теперь освобождается при detach или join, а не в момент выхода потока. Прежняя схема оставляла его жить до конца работы потока, из-за чего ресурсы не освобождались там, где это ожидалось.
В Redox распределение файловых дескрипторов перенесено из ядра в пользовательское пространство. Это сокращает поверхность атаки ядра и убирает часть гонок, а заодно объединяет код, который раньше был разбросан.
У атомарных типов появились методы, позволяющие из изменяемой ссылки на обычное число получить изменяемую ссылку на атомарное. Раньше для этого требовалось приведение типов вручную.
Бэкенд GTK 3 (GDK) портирован на оконный менеджер Orbital, которым Redox заменила X11. Утверждается, что это ускорит отрисовку, уберёт часть ошибок в Orbital и снимет накладные расходы X11.
Вышел точечный релиз Rust 1.96.1. Главное исправление — ошибка компиляции из-за оптимизации во внутреннем представлении компилятора: то есть генерировался неверный код.
Оконный менеджер Orbital получил дробное масштабирование окон: размер интерфейса теперь можно задавать не только целым числом, но и долями. Это нужно на экранах с высокой плотностью пикселей.
Пакет исправлений в relibc: crypt больше не падает на ключах с не-UTF-8 байтами и на коротком параметре SHA, mktime учитывает системный часовой пояс по POSIX, а pthread_getschedparam возвращает код ошибки вместо паники.
У Cargo появился ключ, который передаёт компилятору значение минимальной версии из манифеста. Появился и такой же ключ у самого компилятора, который на этой версии подсказывает более новые возможности.
У вида ошибки ввода-вывода добавлено значение для случая, когда система не даёт открыть новый файл: кончился предел дескрипторов или памяти ядра под файловые структуры.
Шесть программ переведены на динамическую линковку: gitoxide, GNU Bash 5.3, OpenTTD, Schism Tracker и OpenJazz. Это продолжение работы над динамическим линкером — без его починок сборки динамически просто не запускались.
Исправлена ошибка в загрузчике: при старте через UEFI он не мог расшифровать зашифрованный раздел RedoxFS. Система с шифрованием диска не загружалась.
В ядре Redox устранена утечка памяти при переключении контекста. Ошибка была в том, что при переключении освобождался не тот объект, и память накапливалась со временем.
У упорядоченного словаря появилась реализация значения по умолчанию, создающая пустую карту. Раньше для этого требовалось вызывать отдельный конструктор.
У трейта чтения появились методы, читающие число целиком сразу в выбранном порядке байт — младшем или старшем. Метод стабилен.