Трето издание на закрпи за кернелот Линукс со поддршка за јазикот Rust

Мигел Оједа, автор на проектот Rust-for-Linux, предложи опција за трета компонента за развој на двигатели на уреди во јазикот Rust за развивачите на кернелот на Линукс да ја разгледаат. Поддршката за 'рѓа се смета за експериментална, но веќе е договорена за вклучување во Linux-следната гранка. Развојот е финансиран од Google и ISRG (Internet Security Research Group), која е основач на проектот Let’s Encrypt и промовира HTTPS и развој на технологии за подобрување на безбедноста на Интернет.

Потсетете се дека предложените промени овозможуваат користење на Rust како втор јазик за развој на двигатели и модули на јадрото. Поддршката на Rust е претставена како опција што не е стандардно овозможена и не резултира со вклучување на Rust како потребна зависност од изградбата на кернелот. Користењето на Rust за развој на драјвери ќе ви овозможи да креирате побезбедни и подобри драјвери со минимален напор, без проблеми како што се пристап до меморијата по ослободувањето, дереференции на нула покажувач и пречекорувања на баферот.

Безбедното ракување со меморијата е обезбедено во Rust во времето на компајлирање преку проверка на референци, следење на сопственоста на објектот и животниот век на објектот (обем), како и преку проценка на исправноста на пристапот до меморијата за време на извршувањето на кодот. Rust исто така обезбедува заштита од прелевање на цели броеви, бара задолжителна иницијализација на вредностите на променливите пред употреба, подобро се справува со грешките во стандардната библиотека, стандардно го применува концептот на непроменливи референци и променливи, нуди силно статичко пишување за да се минимизираат логичките грешки.

Новата верзија на закрпи продолжува да ги елиминира коментарите дадени за време на дискусијата за првата и втората верзија на закрпи. Најзабележителни промени:

  • Направена е транзиција кон користење на стабилното издание на Rust 1.57 како референтен компајлер и обезбедена е врска до стабилизираното издание на јазикот Rust 2021. Претходно, закрпи беа врзани за бета гранката на Rust и користеа некои јазични карактеристики кои беа класифицирани како нестабилни. Преминот кон спецификацијата Rust 2021 ни овозможи да започнеме работа за да избегнеме употреба на такви нестабилни функции во закрпи како const_fn_transmute, const_panic, const_unavailable_unchecked и core_panic и try_reserve.
  • Развојот на alloc верзијата на библиотеката Rust вклучена во закрпите продолжи, модифицирана за да се ослободат функциите за распределба на меморијата од можното генерирање на состојба „панична“ кога ќе се појават грешки, како на пример без меморија. Новата верзија ги имплементира опциите „no_rc“ и „no_sync“ за да ја оневозможи функционалноста што не се користи во кодот Rust на јадрото, што ја прави библиотеката помодуларна. Работата продолжува со главните програмери на alloc, насочени кон пренесување на промените потребни за кернелот во главната библиотека. Опцијата „no_fp_fmt_parse“, потребна за библиотеката да работи на ниво на јадрото, е преместена во основната библиотека Rust (јадро).
  • Кодот е исчистен за да се ослободи од можни предупредувања за компајлерот при градење на кернелот во режим CONFIG_WERROR. При градење код во Rust, се овозможени дополнителни дијагностички режими на компајлерот и предупредувања за Clippy linter.
  • Апстракциите се предложени за употреба во Rust код за seqlocks (заклучување на секвенца), повици за повратен повик за управување со енергија, I/O меморија (readX/writeX), управувачи со прекини и нишки, GPIO, пристап до уреди, драјвери и ингеренциите.
  • Алатките за развој на драјвери се проширени за да вклучат преместливи мутекси, бит-итератори, поедноставени поврзувања со покажувачот, подобрена дијагностика на грешки и инфраструктура независна од податочна магистрала.
  • Подобрена работа со врски со помош на поедноставен тип Ref, базиран на заднината refcount_t, која го користи истоимениот API на јадрото за броење референци. Поддршката за типовите Arc и Rc обезбедени во стандардната библиотека за доделување е отстранета и не е достапна во кодот извршен на ниво на јадрото (за самата библиотека се подготвени опции кои ги оневозможуваат овие типови).
  • Закрпите вклучуваат верзија на двигателот PL061 GPIO, препишана во Rust. Посебна карактеристика на драјверот е тоа што неговата имплементација речиси линија по линија го повторува постоечкиот двигател GPIO на јазикот C. За програмерите кои сакаат да се запознаат со креирањето на драјвери во Rust, подготвена е споредба линија по линија која им овозможува да разберат во кои конструкции во Rust се претвора кодот C.
  • Главната база на кодови Rust го усвои rustc_codegen_gcc, рустц заднина за GCC што имплементира предвремена компилација (AOT) користејќи ја библиотеката libgccjit. Со правилен развој на заднината, ќе ви овозможи да го соберете Rust кодот вклучен во кернелот користејќи GCC.
  • Покрај ARM, Google и Microsoft, Red Hat изрази интерес за користење на Rust јазикот во кернелот Linux. Да потсетиме дека Google директно обезбедува поддршка за проектот Rust for Linux, развива нова имплементација на механизмот за интерпроцесна комуникација на Binder во Rust и ја разгледува можноста за преработка на различни драјвери во Rust. Мајкрософт започна да имплементира драјвери за Hyper-V во Rust. АРМ работи на подобрување на Rust поддршката за системи базирани на ARM. IBM има имплементирано Rust поддршка во кернелот за PowerPC системи.

Извор: opennet.ru

Додадете коментар