Выпуск Rust 1.88. Операционная система Munal и утилита rsched на Rust

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 4320
Зарегистрирован: 20.08.2022

#

Выпуск Rust 1.88. Операционная система Munal и утилита rsched на Rust
Дата публикации:Fri, 27 Jun 2025 19:12:18 +0300




Опубликован релиз языка программирования общего назначения Rust 1.88, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).




Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.




Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.





Основные новшества:
  • Добавлена возможность указания нескольких выражений "let" внутри условных блоков "if" и "while" с использованием для их объединения оператора "&&" (логическое И). Выражения "let" могут комбинироваться с булевыми условными выражениями. Переменные, объявленные в let-выражениях, можно использовать в последующих условных выражениях, а также внутри блоков "if" и "while".


    if let Channel::Stable(v) = release_info()
    && let Semver { major, minor, .. } = v
    && major == 1
    && minor == 88
    {


    Добавлена поддержка написания "голых" функций, помечаемых атрибутом "#[unsafe(naked)]" и содержащих внутри один вызов "naked_asm!". У созданных подобным образом функций отсутствует эпилог и пролог, сгенерированный компилятором, что позволяет разработчику полностью контролировать служебный ассемблерный код, прикрепляемый к функции ("голая" функция содержит только ассемблерные инструкции, указанные разработчиком и не включает специальные обработчики аргументов и возвращаемых значений, добавляемые компилятором).
    "Голые" функции рассматриваются как более удобная альтернатива функциям, определяемым в блоке "global_asm!".

    #[unsafe(naked)]
    pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 {
    core::arch::naked_asm!(
    "add rax, rdi, rsi",
    "ret"
    );
    }



    В язык предикатов, применяемый в атрибутах условной компиляции "cfg" и "cfg_attr" (позволяют включать или отключать части кода в зависимости от заданных условий), добавлена поддержка
    булевых литералов "true" и "false", которые отождествлены с конфигурациями, которые всегда включены или всегда отключены. Данные литералы также можно использовать в макросе "cfg!" и таблицах "[target]" в манифестах и конфигурациях для Cargo. Выражения cfg(true) и cfg(false) могут применяться вместо cfg(all()) и cfg(any()) для более явного выражения своих намерений.


    В пакетном менеджере Cargo включён автоматический запуск сборщика мусора для очистки кэша в домашнем каталоге пользователя. Ранее сохраняемые в кэше пакеты с загружаемыми зависимостями не очищались, что приводило к постоянному росту потребления дискового пространства. Включённый механизм сборки мусора будет автоматически удалять загруженные извне crate-файлы, к которым не было обращений более 3 месяцев, и локально установленные crate-файлы, к которым не обращались более месяца. Очиска кэша не запускается при использовании в crage опций "--offline" или "--frozen".

    В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
    • Cell::update
      [/url]
    • impl Default for *const T
      [/url]
    • impl Default for *mut T
      [/url]
    • mod ffi::c_str
      [/url]
    • HashMap::extract_if
      [/url]
    • HashSet::extract_if
      [/url]
    • hint::select_unpredictable
      [/url]
    • proc_macro::Span::line
      [/url]
    • proc_macro::Span::column
      [/url]
    • proc_macro::Span::start
      [/url]
    • proc_macro::Span::end
      [/url]
    • proc_macro::Span::file
      [/url]
    • proc_macro::Span::local_file
      [/url]
    • <[T]>::as_chunks
      [/url]
    • <[T]>::as_rchunks
      [/url]
    • <[T]>::as_chunks_unchecked
      [/url]
    • <[T]>::as_chunks_mut
      [/url]
    • <[T]>::as_rchunks_mut
      [/url]
    • <[T]>::as_chunks_unchecked_mut
      [/url]
Признак "const" применён в функциях:
    • NonNull<T>::replace
      [/url]
    • <*mut T>::replace
      [/url]
    • std::ptr::swap_nonoverlapping
      [/url]
    • Cell::replace
      [/url]
    • Cell::get
      [/url]
    • Cell::get_mut
      [/url]
    • Cell::from_mut
      [/url]
    • Cell::as_slice_of_cells
      [/url]

Удалён второй уровень поддержки для целевой платформы i686-pc-windows-gnu.






Дополнительно можно отметить связанные с Rust события:
  • Проект Munal OS развивает экспериментальную операционную систему, написанную на Rust и основанную на концепции unikernel. В Munal OS не применяется вытесняющая многозадачность, маппинг страниц памяти и виртуальное адресное пространство (используется раскладка памяти от UEFI). Ядро и приложения выполняются в одном адресном пространстве с применением модели безопасности на базе sandbox-изоляции WASM (в состав входит движок wasmi для запуска приложений в форме байткода WebAssembly).



    Операционная система оснащена графическим интерфейсом и поддерживает управление через клавиатуру и мышь. Для разработки графических приложений используется собственный тулкит с библиотекой виджетов. Для сетевого взаимодействия предлагаются TCP-стек и драйвер сетевого устройства. Среди доступных для Munal OS приложений: web-браузер с базовой поддержкой HTML и HTTPS, текстовый редактор и терминал для выполнения кода на Python. Код открыт под лицензией MIT.
    Изображение

    Состоялся выпуск ядра Asterinas 0.15.2, написанного на Rust и предоставляющего ABI, совместимый с ядром Linux. Ядро поддерживает архитектуры x86-64 и RISC-V, и реализует 206 из 368 системных вызовов Linux. В развитии ядра принимают участи 45 разработчиков, в основном из различных китайских университетов. Ядро построено с использованием архитектуры "framekernel", в которой компоненты ядра размещаются в общем адресном пространстве, а безопасность достигается на уровне логического разделения безопасного кода и кода, в котором не исключено возникновение проблем с безопасностью. Все системные вызовы, файловые системы и драйверы реализуются на уровне OS Services и не могут включать unsafe-блоки. Код распространяется под лицензией MPL 2.0.



    Для ядра Linux подготовлена утилита rsched, позволяющая анализировать статистику о работе планировщика задач. На практике утилита позволяет оценивать решения планировщика, связанные с предоставлением ресурсов процессам, а также отслеживать возникающие при планировании задержки. Для сбора данных в ядре используется подсистема BPF, а работающий в пространстве пользователя инструментарий написан на Rust. Автором утилиты является Крис Мейсон (Chris Mason), создатель и главный архитектор файловой системы Btrfs.

    Компания Collabora сообщила о разработке варианта инструментария Coccinelle для языка Rust. Coccinelle изначально предназначен для автоматизации поиска и преобразования кода на языке Си в ядре Linux. Преобразования задаются в форме правил, напоминающих абстрагированные патчи, не привязанные к конкретной позиции в коде.

    Разработчики GNOME представили библиотеку для загрузки изображений glycin, написанную на языке Rust и обеспечивающую декодирование изображений с применением sandbox-изоляции. Поддерживается отдача декодированного контента через gdk::Textures и извлечение метаданных.
    Предоставляются обвязки для использования glycin в GTK4, а также бэкенд для задействования glycin в библиотеке GdkPixbuf, применяемой в GNOME для загрузки изображений. Glycin уже задействован в просмотрщике изображений Loupe, предлагаемом в GNOME по умолчанию. При этом бэкенд для GdkPixbuf даёт возможность использовать glycin в GNOME Shell, генераторах миниатюр и произвольных приложениях GNOME, без внесения изменений в эти программы.


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63485

Жизнь за Нер'зула!

Ответить