Выпуск Rust 1.92 и GUI-библиотеки Iced 0.14. Rust-проекты для sandbox-изоляции и создания прошивок

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

#

Выпуск Rust 1.92 и GUI-библиотеки Iced 0.14. Rust-проекты для sandbox-изоляции и создания прошивок
Дата публикации:Fri, 12 Dec 2025 11:29:51 +0300

Опубликован релиз языка программирования Rust 1.92, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
  • Продолжена стабилизация типа "never", обозначаемого символом "!" и определяющего вычисления, никогда не возвращающие значения (например, функция "exits", макрос "panic!" и бесконечные циклы никогда не возвращают управление). В новой версии Lint-проверки "never_type_fallback_flowing_into_unsafe" и "dependency_on_unit_never_type_fallback" по умолчанию переключены с вывода предупреждений на генерацию ошибок компиляции. Данные проверки срабатываются при наличие проблем в коде, проявляющихся при использовании типа "never". По предварительной оценке подобные проблемы имеются примерно в 500 crate-пакетах. Включение lint-проверок позволит подготовиться к стабилизации типа "never", который в данный момент отнесён к числу экспериментальных возможностей. Lint-проверки срабатывают только прямой сборке пакетов и не проявляются при сборке в числе зависимостей. Проверки также могут быть отключены через атрибут "#[allow]".
    Изменено поведение lint-проверки "unused_must_use", срабатывающей при игнорировании возвращаемого функцией значения, если функция или возвращаемый тип помечены атрибутом "#[must_use]". В новой версии прекращён вывод предупреждений об игнорировании возвращаемых значений с типами Result и ControlFlow, в которых состояние ошибки определяется типом без значений ("!" или "Infallible"), так как нет смысла проверять ошибки, которые никогда не могут произойти. Изменено поведение флага "-Cpanic=abort", при котором включена генерация по умолчанию unwind-таблиц для выполнения обратной трассировки (backtrace) . Для возвращения старого поведения предусмотрена опция "-Cforce-unwind-tables=no". Ужесточена проверка аргументов атрибута "#[macro_export]". При указании недопустимых атрибутов теперь будет выводиться ошибка, а не предупреждение. Проблемы с "#[macro_export]" будут проверяться не только при прямой сборке crate-пакета, но и при сборке зависимостей. В safe-коде разрешено получение raw-указателей ("&raw [mut | const]") на поля в union-типах. Для целевой платформы mips64el-unknown-linux-muslabi64 реализована поддержка динамического связывания. Минимально поддерживаемая версия внешнего инструментария LLVM поднята до ветки LLVM 20. В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
  • NonZero<u{N}>::div_ceil
    [/url]
  • Location::file_as_c_str
    [/url]
  • RwLockWriteGuard::downgrade
    [/url]
  • Box::new_zeroed
    [/url]
  • Box::new_zeroed_slice
    [/url]
  • Rc::new_zeroed
    [/url]
  • Rc::new_zeroed_slice
    [/url]
  • Arc::new_zeroed
    [/url]
  • Arc::new_zeroed_slice
    [/url]
  • btree_map::Entry::insert_entry
    [/url]
  • btree_map::VacantEntry::insert_entry
    [/url]
  • impl Extend<proc_macro::Group> for proc_macro::TokenStream
    [/url]
  • impl Extend<proc_macro::Literal> for proc_macro::TokenStream
    [/url]
  • impl Extend<proc_macro::Punct> for proc_macro::TokenStream
    [/url]
  • impl Extend<proc_macro::Ident> for proc_macro::TokenStream
    [/url]
Признак "const" применён в функциях:
  • <[_]>::rotate_left
    [/url]
  • <[_]>::rotate_right
    [/url]
В пакетном менеджере Cargo обеспечен повтор операции "git fetch" в случае сбоя выполнения первого запроса. Добавлены компоненты для интеграции с эмулятором терминала Ghostty. В руководство добавлена новая глава про оптимизацию процесса сборки. Дополнительно можно отметить недавно анонсированные проекты и события, связанные с Rust:
  • Опубликован релиз библиотеки Iced 0.14 для создания графических интерфейсов пользователя с использованием модели реактивного программирования. В Iced реализована архитектура, привычная для разработчиков, знакомых с языком декларативного построения интерфейсов Elm. Предлагается готовый набор виджетов с возможностью создания асинхронных обработчиков и применения адаптивной компоновки элементов интерфейса в зависимости от размера окна и экрана. Предоставляется несколько движков отрисовки, поддерживающих Vulkan, Metal и DX12. Из крупных проектов, использующий Iced, можно отметить среду рабочего стола COSMIC. В новой версии добавлены виджеты "table", "grid", "sensor", "float" и "pin", а также расширены возможности виджета для работы с разметкой Markdown. Реализованы: режим реактивной отрисовки, появляющиеся при необходимости полосы прокрутки, API для работы с анимацией, поддержка методов ввода, headless-режим, возможность внесения изменений без остановки приложения (hot reloading), распараллеливание декодирования изображений, инструменты для отладки и профилирования производительности.
    Проект Ribir развивает библиотеку для создания многоплатформенных приложений с графическим интерфейсом, позволяющую использовать одну общую кодовую базу приложения для формирования графических приложений для разных платформ (Linux, Windows, macOS, в планах Android и iOS). Доступны декларативный язык построения интерфейса на основе Rust-макросов, более 20 виджетов, темы оформления, рендер на базе wgpu. Представлена утилита Island, предназначенная для изолированного запуска приложений. Для sandbox-изоляции задействован механизм Landlock. Island позволяет создавать правила в формате TOML и применять их для изоляции при помощи Landlock существующих исполняемых файлов, без необходимости внесения изменений в код. В отличие от Firejail утилита Island не требует прав root и специальных полномочий. Компания Ferrocene объявила о прохождении сертификации IEC 61508 (SIL 2) для библиотеки libcore, включающей подмножество вызовов из стандартной базовой библиотеки Rust. Сертификация подтверждает соответствие библиотеки требованиям для критически важных промышленных систем. Компания Ferrocene известна разработкой инструментария для разработки на языке Rust приложений для критически важных систем (Safety-Critical Systems), а также созданием спецификации FLS (Ferrocene Language Specification), на базе которой развивается эталонная спецификация на язык Rust. Компания Google представила написанный на Rust инструментарий Wasefire для разработки защищённых прошивок. Основная идея в запуске поверх базового окружения прошивки (платформы) отдельных изолированных обработчиков (апплетов). Разработка прошивки не привязана к языкам программирования - компоненты прошивки могут поставляются в представлении WebAssembly с расширениями WASI (WebAssembly System Interface) и выполняются при помощи Wasmtime. Опубликован выпуск UEFI-прошивки Patina 18, написанной на Rust. Patina предоставляет замену базовым компонентам прошивки UEFI и может использоваться для постепенного перевода существующих прошивок, написанных на Си, на использование языка Rust. Проект Brimstone развивает новый JavaScript-движок, написанный с нуля на языке Rust. В текущем виде уже поддерживается более 97% от возможностей ECMAScript 2026. Виртуальная машина для выполнения байткода создана с оглядкой на архитектуру движка V8. Проект Catten развивает ядро для экспериментальной операционной системы CharlotteOS, написанное на Rust с оглядкой на ядро Fuchsia. Ядро поддерживает управление доступом на основе "capability" и использует похожую на Plan 9 распределённую иерархию ресурсов с адресацией файловых путей по URI. Опубликован выпуск интерактивной командной оболочки Fish 4.2.0 (friendly interactive shell). Ветка 4.x примечательна полным переводом кодовой базы с языка С++ на Rust. Компания Сoudflare открыла код Rust-библиотеки tokio-quiche, для встраивания поддержки протоколов QUIC и HTTP/3 в асинхронно работающие приложения на базе фреймфорка Tokio. Проект Tor опубликовал выпуск Arti 1.7.0, реализации инструментария Tor, написанного на языке Rust. Когда код Arti достигнет уровня, способного полностью заменить вариант на Си, разработчики Tor намерены придать Arti статус основной реализации Tor и постепенно прекратить сопровождение реализации на Си. В новой версии стабилизирована реализация ограниченного определения onion-сервисов с использованием авторизации клиента ("restricted-discovery"). В дополнение к прокси SOCKS добавлена поддержка HTTP-прокси, использующего метод CONNECT.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64416

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

Ответить