Osma različica popravkov za jedro Linuxa s podporo za jezik Rust

Miguel Ojeda, avtor projekta Rust-for-Linux, je predlagal izdajo komponent v8 za razvoj gonilnikov naprav v jeziku Rust, ki naj bi jih preučili razvijalci jedra Linuxa. To je revidirana različica popravkov, ki upošteva prvo različico, objavljeno brez številke različice. Podpora za Rust velja za eksperimentalno, vendar je že vključena v vejo linux-next, trdi, da je integrirana v jesensko izdajo 5.20/6.0, in je dovolj zrela, da lahko začne delati na ustvarjanju abstraktnih plasti nad podsistemi jedra, kot tudi na pisanju gonilnikov in moduli. Razvoj financirata Google in ISRG (Internet Security Research Group), ki je ustanovitelj projekta Let's Encrypt in promovira HTTPS ter razvoj tehnologij za izboljšanje internetne varnosti.

V novi različici:

  • Komplet orodij in različica knjižnice alloc, brez možnega ustvarjanja stanja "panike", ko pride do napak, sta bila posodobljena za izdajo Rust 1.62. V primerjavi s prej uporabljeno različico ima komplet orodij Rust stabilizirano podporo za funkcionalnost const_fn_trait_bound, ki se uporablja v popravkih jedra.
  • Povezovalna koda je ločena v ločenem paketu »vezi« zaboja, kar poenostavlja vnovično gradnjo, če se spremeni samo glavni paket »jedro«.
  • Implementacija makra “concat_idents!” prepisan v obliki proceduralnega makra, ki ni vezan na funkcionalnost concat_idents in omogoča uporabo referenc na lokalne spremenljivke.
  • Makro »static_assert!« je bil prepisan in dovoljuje uporabo »core::assert!()« v katerem koli kontekstu namesto konstant.
  • Makro "build_error!" prilagojen za delovanje, ko je za module nastavljen način “RUST_BUILD_ASSERT_{WARN,ALLOW}”.
  • Dodana ločena datoteka z nastavitvami »kernel/configs/rust.config«.
  • Datoteke »*.i«, obdelane v zamenjavah makrov, so bile preimenovane v »*.rsi«.
  • Podpora za gradnjo komponent Rust z ravnmi optimizacije, ki se razlikujejo od tistih, ki se uporabljajo za kodo C, je bila ukinjena.
  • Dodan modul fs, ki omogoča vezave za delo z datotečnimi sistemi. Podan je primer preprostega datotečnega sistema, napisanega v Rustu.
  • Dodan modul workqueue za delo s sistemskimi čakalnimi vrstami (zagotavlja vezave prek struktur jedra work_struct in workqueue_struct).
  • Razvoj modula kasync se je nadaljeval z implementacijo metod asinhronega programiranja (async). Dodan primer strežnika TCP na jedrni ravni, napisanega v Rustu.
  • Dodana zmožnost obravnavanja prekinitev v jeziku Rust z uporabo vrst [Threaded]Handler in vrst [Threaded]Registration`.
  • Dodan proceduralni makro "#[vtable]" za lažje delo s tabelami funkcijskih kazalcev, kot je struktura file_operations.
  • Dodana implementacija dvosmernih povezanih seznamov "unsafe_list::List".
  • Dodana začetna podpora za RCU (branje-kopiranje-posodobitev) in tip Guard za preverjanje, ali je branje vezano na trenutno nit.
  • Dodana funkcija Task::spawn() za ustvarjanje in samodejni zagon niti jedra. Dodana je tudi metoda Task::wake_up().
  • Dodan je modul za zakasnitev, ki vam omogoča uporabo zakasnitev (ovitek nad msleep()).

Predlagane spremembe omogočajo uporabo Rusta kot drugega jezika za razvoj gonilnikov in modulov jedra. Podpora za Rust je predstavljena kot možnost, ki ni privzeto omogočena in ne povzroči vključitve Rusta med zahtevane odvisnosti gradnje za jedro. Uporaba Rusta za razvoj gonilnikov vam bo omogočila ustvarjanje varnejših in boljših gonilnikov z minimalnim naporom, brez težav, kot je dostop do območja pomnilnika, potem ko je ta osvobojen, dereferenciranje ničelnih kazalcev in prekoračitev medpomnilnika.

Varno ravnanje s pomnilnikom je v Rustu zagotovljeno v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta in življenjske dobe (obsega) objekta ter z vrednotenjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Vir: opennet.ru

Dodaj komentar