रस्ट भाषेसाठी समर्थनासह लिनक्स कर्नलसाठी पॅचची आठवी आवृत्ती

Мигель Охеда (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 и развитию технологий для повышения защищённости интернета.

नवीन आवृत्तीमध्ये:

  • Инструментарий и вариант библиотеки 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()).

प्रस्तावित बदलांमुळे ड्रायव्हर्स आणि कर्नल मॉड्युल्स विकसित करण्यासाठी रस्टला दुसरी भाषा म्हणून वापरणे शक्य होते. रस्ट सपोर्ट हा पर्याय म्हणून सादर केला जातो जो पूर्वनिर्धारितपणे सक्षम केलेला नाही आणि कर्नलसाठी आवश्यक बिल्ड अवलंबन म्हणून रस्टचा समावेश होत नाही. ड्रायव्हर डेव्हलपमेंटसाठी रस्ट वापरणे तुम्हाला कमीत कमी प्रयत्नात सुरक्षित आणि चांगले ड्रायव्हर्स तयार करण्यास अनुमती देईल, फ्रीिंगनंतर मेमरी ऍक्सेस, नल पॉइंटर डीरेफरेन्सेस आणि बफर ओव्हररन्स यासारख्या समस्यांपासून मुक्त.

मेमरी-सुरक्षित हाताळणी रस्टमध्ये कंपाइल टाइममध्ये संदर्भ तपासणीद्वारे, ऑब्जेक्टची मालकी आणि ऑब्जेक्ट लाइफटाइमचा मागोवा ठेवणे (स्कोप) तसेच कोड एक्झिक्यूशन दरम्यान मेमरी ऍक्सेसच्या अचूकतेचे मूल्यांकन करून प्रदान केले जाते. रस्ट पूर्णांक ओव्हरफ्लोपासून संरक्षण देखील प्रदान करते, वापरण्यापूर्वी व्हेरिएबल व्हॅल्यूजची अनिवार्य सुरुवात करणे आवश्यक आहे, मानक लायब्ररीमध्ये त्रुटी चांगल्या प्रकारे हाताळते, डिफॉल्टनुसार अपरिवर्तनीय संदर्भ आणि व्हेरिएबल्सची संकल्पना लागू करते, तार्किक त्रुटी कमी करण्यासाठी मजबूत स्थिर टायपिंग ऑफर करते.

स्त्रोत: opennet.ru

एक टिप्पणी जोडा