Osma različica popravkov jedra Linux s podporo za jezik Rust

Miguel Ojeda, avtor projekta Rust-for-Linux, predlagano za obravnavo razvijalcem jedra Linux Izdaja komponent v8 za razvoj gonilnikov naprav v Rustu. To je 8. revizija popravkov, če upoštevamo prvo različico, objavljeno brez številke različice. Podpora za Rust velja za eksperimentalno, vendar je bila že vključena v vejo linux-next in je predvidena za integracijo v jesenski izdaji 5.20/6.0. Je dovolj zrela, da se lahko začne delo na ustvarjanju abstrakcijskih plasti nad podsistemi jedra, pa tudi na pisanju gonilnikov in modulov. Razvoj financirata Google in ISRG (Internet Security Research Group), ustanovitelj projekta Let's Encrypt, ki spodbuja HTTPS in razvoj tehnologij za izboljšanje internetne varnosti.

V novi različici:

  • Orodjarna in različica knjižnice alloc, brez morebitnih panik ob napakah, sta bili posodobljeni na Rust 1.62. V primerjavi s prej uporabljeno različico orodjarna Rust zdaj podpira funkcionalnost const_fn_trait_bound, ki se uporablja v popravkih jedra.
  • Koda za vezave je ločena v ločenem paketu "bindings", kar poenostavi obnovo, če so spremembe narejene samo v glavnem paketu "kernel".
  • Implementacija makra »concat_idents!« je bila prepisana kot proceduralni makro, ki ni vezan na funkcionalnost concat_idents in omogoča uporabo referenc na lokalne spremenljivke.
  • Makro »static_assert!« je bil prepisan tako, da omogoča uporabo »core::assert!()« v katerem koli kontekstu namesto konstant.
  • Makro »build_error!« je bil prilagojen tako, da deluje, 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 makro zamenjavah, 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 je bil modul fs, ki zagotavlja povezave za delo z datotečnimi sistemi. Naveden je preprost primer datotečnega sistema, napisan v Rustu.
  • Dodan modul workqueue za delo s sistemskimi čakalnimi vrstami (zagotavlja vezave za strukture jedra work_struct in workqueue_struct).
  • Modul kasync se je še naprej razvijal in implementiral asinhrone programske metode (async). Dodan je bil primer strežnika TCP na ravni jedra, napisanega v Rustu.
  • Dodana je bila možnost obravnave prekinitev v jeziku Rust z uporabo lastnosti [Threaded]Handler in tipov [Threaded]Registration.
  • Dodan proceduralni makro "#[vtable]" za poenostavitev dela s tabelami kazalcev funkcij, kot je struktura file_operations.
  • Dodana implementacija dvojno povezanih seznamov "unsafe_list::List".
  • Dodana je bila začetna podpora za RCU (branje-kopiranje-posodobitev) in tip Guard za preverjanje, ali je zaklepanje branja vezano na trenutno nit.
  • Dodana je bila funkcija Task::spawn() za ustvarjanje in samodejno zagon niti jedra. Dodana je bila tudi metoda Task::wake_up().
  • Dodan modul zakasnitve, ki omogoča uporabo zakasnitev (ovitek čez 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

Kupite zanesljivo gostovanje za strani z DDoS zaščito, VPS VDS strežniki 🔥 Kupite zanesljivo spletno gostovanje z zaščito DDoS, VPS VDS strežniki | ProHoster