An tríú eagrán de phaistí don eithne Linux le tacaíocht don teanga Rust

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

Thabhairt chun cuimhne go bhféadfaidh na hathruithe atá beartaithe Rust a úsáid mar dhara teanga chun tiománaithe agus modúil eithne a fhorbairt. Cuirtear tacaíocht meirge i láthair mar rogha nach bhfuil cumasaithe de réir réamhshocraithe agus ní fhágann sé go n-áirítear Rust mar spleáchas tógála riachtanach don eithne. Trí meirge a úsáid chun tiománaithe a fhorbairt, beidh tú in ann tiománaithe níos sábháilte agus níos fearr a chruthú gan mórán iarrachta, saor ó fhadhbanna ar nós rochtain cuimhne tar éis saortha, dereferences pointeoir nialasach, agus róchaiteachas maoláin.

Soláthraítear sábháilteacht chuimhne i Rust ag am tiomsaithe trí sheiceáil tagartha, súil a choinneáil ar úinéireacht réad agus saolré réad (raon feidhme), chomh maith le trí mheastóireacht a dhéanamh ar cheart an rochtain chuimhne le linn fhorghníomhú an chóid. Soláthraíonn Rust cosaint freisin i gcoinne ró-shreabhadh slánuimhir, éilíonn túsú éigeantach luachanna athraitheacha roimh úsáid, láimhseálann sé earráidí níos fearr sa leabharlann caighdeánach, cuireann sé coincheap na dtagairtí agus na n-athróg do-athraithe i bhfeidhm de réir réamhshocraithe, cuireann clóscríobh statach láidir ar fáil chun earráidí loighciúla a íoslaghdú.

В новом варианте патчей продолжено устранение замечаний, высказанных в процессе обсуждения первой и второй версий патчей. Наиболее заметные изменения:

  • Осуществлён переход на использование в качестве эталонного компилятора стабильного выпуска Rust 1.57 и обеспечена привязка к стабилизированной редакции языка Rust 2021. Ранее патчи были завязаны на бета-ветку Rust и использовали некоторые возможности языка, входящие в категорию нестабильных. Переход на спецификацию Rust 2021 позволил инициировать работу по уходу от использования в патчах таких нестабильных возможностей, как const_fn_transmute, const_panic, const_unreachable_unchecked и core_panic и try_reserve.
  • Продолжено развитие входящего в состав патчей варианта Rust-библиотеки alloc, изменённой для избавления функций распределения памяти от возможных генераций состояния «panic» при возникновении ошибок, таких как нехватка памяти. В новой версии реализованы опции «no_rc» и «no_sync» для отключения функциональности, не используемой в Rust-коде для ядра, делающие библиотеку более модульной. Продолжается работа с основными разработчиками alloc, нацеленная на перенос необходимых для ядра изменения в основной состав библиотеки. В базовую библиотеку Rust (core) перенесена опция «no_fp_fmt_parse», необходимая для работы библиотеки на уровне ядра.
  • Проведена чистка кода для избавления от возможных предупреждений компилятора при сборке ядра в режиме CONFIG_WERROR. При сборке кода на языке Rust включены дополнительные диагностические режимы компилятора и предупреждения линтера Clippy.
  • Предложены абстракции для использования в коде на языке Rust блокировок seqlock (sequence locks), callback-вызовов для управления питанием, I/O Memory (readX/writeX), обработчиков прерываний и потоков, GPIO, доступа к устройствам, драйверам и учётным данным.
  • Расширены средства для разработки драйверов с задействованием перемещаемых мьютексов, битовых итераторов, упрощённых обвязок над указателями, улучшенной диагностики сбоев и инфраструктуры, не зависимой от шины данных.
  • Улучшена работа со ссылками при помощи упрощённого типа Ref, базирующегося на бэкенде refcount_t, использующем одноимённый API ядра для подсчёта ссылок. Поддержка типов Arc и Rc, предоставляемых в штатной библиотеке alloc, удалена и не доступна в коде, выполняемом на уровне ядра (для самой библиотеки подготовлены опции, отключающие данные типы).
  • В состав патчей добавлен вариант драйвера PL061 GPIO, переписанный на Rust. Особенностью драйвера является то, что его реализация практически построчно повторяет имеющийся драйвер GPIO на языке Си. Для разработчиков, желающих познакомиться с созданием драйверов на Rust, подготовлено построчное сравнение, позволяющее понять в какие конструкции на Rust преобразован код на Си.
  • В основную кодовую базу Rust принят rustc_codegen_gcc, бэкенд rustc для GCC, реализующий возможность упреждающей (AOT) компиляции с использованием библиотеки libgccjit. При должном развитии бэкенда он позволит собирать задействованный в ядре Rust-код при помощи GCC.
  • Помимо компаний ARM, Google и Microsoft, интерес к использованию языка Rust в ядре Linux выразила компания Red Hat. Напомним, что Google напрямую обеспечивает поддержку проекта Rust for Linux, развивает новую реализацию механизма межпроцессного взаимодействия Binder на Rust и рассматривает возможность переработки на Rust различных драйверов. Компания Microsoft приступила к реализации драйверов для Hyper-V на Rust. Компания ARM работает над улучшением поддержи Rust для систем на базе процессоров ARM. Компания IBM реализовала поддержку Rust в ядре для систем PowerPC.

Foinse: oscailtenet.ru

Add a comment