កំណែទីប្រាំមួយនៃបំណះសម្រាប់ខឺណែលលីនុច ជាមួយនឹងការគាំទ្រសម្រាប់ភាសា Rust

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

នៅក្នុងកំណែថ្មី៖

  • Инструментарий и вариант библиотеки alloc, избавленный от возможных генераций состояния «panic» при возникновении ошибок, обновлены до выпуска Rust 1.60, в которой стабилизирована поддержка режима «maybe_uninit_extra», применяемого в патчах к ядру.
  • Добавлена возможность выполнения тестов из документации (тесты, одновременно используемые в качестве примеров в документации), через преобразование во время компиляции тестов, завязанных на API ядра, в тесты KUnit, выполняемые во время загрузки ядра.
  • Приняты требования, в соответствии с которыми тесты не должны приводить к выводу предупреждения линтера Clippy, как и код для ядра на языке Rust.
  • Предложена начальная реализация модуля «net» с сетевыми функциями. Для кода на языке Rust предоставлен доступ к таких сетевым структурам ядра, как «Namespace» (на основе структуры ядра «struct net»), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) и их эквивалентам для IPv6.
  • Реализована начальная поддержка методов асинхронного программирования (async), реализованная в форме модуля kasync. Например, можно создавать работающий в асинхронном режиме код для манипуляции с TCP-сокетами: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; } }
  • Добавлен модуль net::filter для манипуляции с фильтрами сетевых пакетов. Добавлен пример rust_netfilter.rs с реализацией фильтра на языке Rust.
  • Добавлена реализация простого мьютекса smutex::Mutex, не требующего привязки (pinning).
  • Добавлена блокировка NoWaitLock, которая никогда не приводит к ожиданию освобождения, а в случае занятия другим потоком приводит к выводу ошибки при попытке получения блокировки вместо остановки вызывающего.
  • Добавлена блокировка RawSpinLock отождествлённая с raw_spinlock_t в ядре, применяемая к секциям, которые не могут находиться в состоянии ожидания.
  • Добавлен тип ARef для ссылок на объект, к которому применяется механизм подсчёта ссылок (always-refcounted).
  • В бэкенде rustc_codegen_gcc, позволяющем использовать библиотеку libgccjit от проекта GCC в качестве генератора кода в rustc для обеспечения в rustc поддержки доступных в GCC архитектур и оптимизаций, реализована возможность раскрутки компилятора (bootstrapping) rustc. Под раскруткой компилятора понимается возможность использования в rustc генератора кода на основе GCC для сборки самого компилятора rustc. Кроме того, в недавний выпуск GCC 12.1 включены исправления в libgccjit, необходимые для корректной работы rustc_codegen_gcc. Ведётся подготовка к предоставлению возможности установки rustc_codegen_gcc при помощи утилиты rustup.
  • Отмечается прогресс разработки GCC-фронтэнда gccrs с реализацией компилятора языка Rust на базе GCC. В настоящее время над gccrs в режиме полного рабочего для работают два разработчика.

សូមចាំថាការផ្លាស់ប្តូរដែលបានស្នើឡើងធ្វើឱ្យវាអាចប្រើ Rust ជាភាសាទីពីរសម្រាប់បង្កើតកម្មវិធីបញ្ជា និងម៉ូឌុលខឺណែល។ ការគាំទ្រច្រែះត្រូវបានបង្ហាញជាជម្រើសដែលមិនត្រូវបានបើកតាមលំនាំដើម ហើយមិនមានលទ្ធផលដែល Rust ត្រូវបានដាក់បញ្ចូលជាការពឹងផ្អែកលើការស្ថាបនាដែលត្រូវការសម្រាប់ខឺណែលនោះទេ។ ការប្រើប្រាស់ Rust សម្រាប់ការអភិវឌ្ឍន៍កម្មវិធីបញ្ជានឹងអនុញ្ញាតឱ្យអ្នកបង្កើតកម្មវិធីបញ្ជាដែលមានសុវត្ថិភាព និងប្រសើរជាងមុន ជាមួយនឹងការខិតខំប្រឹងប្រែងតិចតួចបំផុត ដោយមិនមានបញ្ហាដូចជាការចូលប្រើអង្គចងចាំបន្ទាប់ពីការដោះលែង ការបដិសេធទ្រនិចគ្មានន័យ និងការដំណើរការលើសចំណុះ។

សុវត្ថិភាពនៃអង្គចងចាំត្រូវបានផ្តល់ជូននៅក្នុង Rust នៅពេលចងក្រងតាមរយៈការត្រួតពិនិត្យឯកសារយោង ការរក្សាដាននៃភាពជាម្ចាស់វត្ថុ និងអាយុកាលរបស់វត្ថុ (វិសាលភាព) ក៏ដូចជាតាមរយៈការវាយតម្លៃភាពត្រឹមត្រូវនៃការចូលប្រើអង្គចងចាំអំឡុងពេលដំណើរការកូដ។ ច្រែះក៏ផ្តល់ការការពារប្រឆាំងនឹងចំនួនគត់លើសចំណុះ ទាមទារការចាប់ផ្តើមចាំបាច់នៃតម្លៃអថេរមុនពេលប្រើ ដោះស្រាយកំហុសបានប្រសើរជាងនៅក្នុងបណ្ណាល័យស្តង់ដារ អនុវត្តគោលគំនិតនៃសេចក្តីយោងដែលមិនអាចផ្លាស់ប្តូរបាន និងអថេរតាមលំនាំដើម ផ្តល់នូវការវាយអក្សរឋិតិវន្តខ្លាំង ដើម្បីកាត់បន្ថយកំហុសឡូជីខល។

ប្រភព: opennet.ru

បន្ថែមមតិយោបល់