Aštuntoji „Linux“ branduolio pataisų versija su „Rust“ kalbos palaikymu

Мигель Охеда (Miguel Ojeda), автор проекта Rust-for-Linux, предложил для рассмотрения разработчиками ядра Linux выпуск v8 компонентов для разработки драйверов устройств на языке Rust. Это ревятая редакция патчей с учётом первого варианта, опубликованного без номера версии. Поддержка Rust рассматривается как экспериментальная, но уже включена в ветку linux-next, претендует на интеграцию в осенний выпуск 5.20/6.0 и достаточно развита для начала работы по созданию слоёв абстракции над подсистемами ядра, а также для написания драйверов и модулей. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.

Naujoje versijoje:

  • Инструментарий и вариант библиотеки alloc, избавленный от возможных генераций состояния «panic» при возникновении ошибок, обновлены до выпуска Rust 1.62. По сравнению с ранее используемой версией в инструментарии Rust стабилизирована поддержка функциональности const_fn_trait_bound, используемой в патчах к ядру.
  • Код привязок выделен в отдельный crate-пакет «bindings», что упрощает пересборку в случае внесения изменений только в основной пакет «kernel».
  • Реализация макроса «concat_idents!» переписана в форме процедурного макроса, не привязанного к функциональности concat_idents и допускающего применение ссылок на локальные переменные.
  • Переписан макрос «static_assert!», что позволило использовать «core::assert!()» в любом контексте вместо констант.
  • Макрос «build_error!» адаптирован для работы при выставлении для модулей режима «RUST_BUILD_ASSERT_{WARN,ALLOW}».
  • Добавлен отдельный файл с настройками «kernel/configs/rust.config».
  • Обрабатываемые в макроподстановках файлы «*.i» переименованы в «*.rsi».
  • Прекращена поддержка сборки Rust-компонентов с уровнями оптимизации, отличными от применяемых для кода на языке Си.
  • Добавлен модуль fs, предоставляющий обвязки для работы с файловыми системами. Предложен пример простой файловой системы, написанной на языке Rust.
  • Добавлен модуль workqueue для работы с системными очередями (предоставляет обвязки над структурами ядра work_struct и workqueue_struct).
  • Продолжено развитие модуля kasync с реализацией методов асинхронного программирования (async). Добавлен пример работающего на уровне ядра TCP-сервера, написанного на Rust.
  • Добавлена возможность обработки прерываний на языке Rust при помощи типажей [Threaded]Handler и типов [Threaded]Registration`.
  • Добавлен процедурный макрос «#[vtable]», упрощающий работу с таблицами указателей на функции, такими как структура file_operations.
  • Добавлена реализация двунаправленных связных списков «unsafe_list::List».
  • Добавлена начальная поддержка RCU (Read-copy-update) и тип Guard для проверки привязки блокировки на чтение к текущему потоку.
  • Добавлена функция Task::spawn() для создания и автоматического запуска потоков ядра. Также добавлен метод Task::wake_up().
  • Добавлен модуль delay, позволяющий использовать задержки (обёртка над msleep()).

Siūlomi pakeitimai leidžia naudoti Rust kaip antrąją kalbą kuriant tvarkykles ir branduolio modulius. Rūdžių palaikymas pateikiamas kaip parinktis, kuri nėra įjungta pagal numatytuosius nustatymus, todėl Rust neįtraukiama kaip būtina branduolio kūrimo priklausomybė. Naudojant Rust tvarkyklės kūrimui, galėsite sukurti saugesnes ir geresnes tvarkykles su minimaliomis pastangomis, be problemų, tokių kaip prieiga po atlaisvinimo, nulinės rodyklės nuorodos ir buferio viršijimas.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę ir objekto eksploatavimo laiką (apimtį), taip pat įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja privalomo kintamųjų reikšmių inicijavimo prieš naudojimą, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją, siūlo tvirtą statinį spausdinimą, kad būtų sumažintos loginės klaidos.

Šaltinis: opennet.ru

Добавить комментарий