Eighth version of patches for the Linux kernel with Rust language support

Miguel Ojeda, autor projekta Rust-for-Linux, predložio je razmatranje od strane programera jezgre Linuxa izdanja v8 komponenti za razvoj upravljačkih programa na jeziku Rust. Ovo je revizija zakrpa s obzirom na prvu verziju objavljenu bez broja verzije. Podrška za Rust smatra se eksperimentalnom, ali je već uključena u granu linux-next, te se očekuje integracija u jesenskom izdanju 5.20/6.0 i dovoljno je razvijena za početak rada na stvaranju slojeva apstrakcije iznad podsustava jezgre, kao i za pisanje upravljačkih programa i modula. Razvoj financira tvrtka Google i organizacija ISRG (Internet Security Research Group), koja je osnivač projekta Let's Encrypt i doprinosi promociji HTTPS-a i razvoju tehnologija za poboljšanje sigurnosti interneta.

U novoj verziji:

  • Alatni program i varijanta biblioteke alloc, oslobođena mogućih generacija stanja 'panic' prilikom pojave grešaka, ažurirani su na izdanju Rust 1.62. U usporedbi s ranije korištenom verzijom, stabilizirana je podrška za funkcionalnost const_fn_trait_bound koja se koristi u zakrpama za jezgru.
  • Kod poveznica je istaknut u zasebnom crate-paketu 'bindings', što olakšava ponovnu izgradnju u slučaju da dođe do promjena samo u osnovnom paketu 'kernel'.
  • Implementacija makroa 'concat_idents!' prepisana je u obliku proceduralnog makroa, koji nije vezan za funkcionalnost concat_idents i omogućava upotrebu referenci na lokalne varijable.
  • Makro 'static_assert!' je prepisan, što je omogućilo korištenje 'core::assert!()' u bilo kojem kontekstu umjesto konstanti.
  • Makro 'build_error!' prilagođen je za rad uz postavljene za module režime 'RUST_BUILD_ASSERT_{WARN,ALLOW}'.
  • Dodana je posebna datoteka sa postavkama 'kernel/configs/rust.config'.
  • Obrađivane u makropodstavcima datoteke '*.i' preimenovane su u '*.rsi'.
  • Prekinuta je podrška za izgradnju Rust-komponenata s razinama optimizacije koje se razlikuju od onih primjenjivanih za kod na jeziku C.
  • Dodan je modul fs, koji pruža obavijesti za rad s datotečnim sustavima. Predložen je primjer jednostavnog datotečnog sustava napisanog na jeziku Rust.
  • Dodan je modul workqueue za rad sa sustavnim redovima (pruža obavijesti iznad struktura jezgre work_struct i workqueue_struct).
  • Nastavljeno je razvijanje modula kasync s implementacijom metoda asinkronog programiranja (async). Dodan je primjer funkcionalnog TCP poslužitelja na razini jezgre, napisanog u Rust-u.
  • Dodana je mogućnost obrade prekida u jeziku Rust pomoću tipa [Threaded]Handler i tipova [Threaded]Registration.
  • Dodana je proceduralna makronaredba "#[vtable]", koja pojednostavljuje rad s tablicama pokazivača na funkcije, poput strukture file_operations.
  • Dodana je implementacija dvosmjernih povezanih listi "unsafe_list::List".
  • Dodana je početna podrška za RCU (Read-copy-update) i tip Guard za provjeru vezanosti zaključavanja za čitanje na trenutnu nit.
  • Dodana je funkcija Task::spawn() za kreiranje i automatsko pokretanje jezgrenih niti. Također je dodana metoda Task::wake_up().
  • Dodan je modul delay, koji omogućava korištenje odgoda (oblik preko msleep()).

Predložene promjene omogućuju korištenje Rusta kao drugog jezika za razvijanje upravljačkih programa i modula jezgre. Podrška za Rust je predstavljena kao opcija koja nije aktivna po zadanim postavkama i ne dovodi do uključivanja Rusta među obavezne zavisnosti za izgradnju jezgre. Korištenje Rusta za razvoj upravljačkih programa omogućit će stvaranje sigurnih i kvalitetnijih upravljačkih programa uz minimalni trud, oslobađajući ih od problema poput pristupa memoriji nakon što je oslobođena, dereferenciranja nul pokazivača i izlaska iz granica bafera.

Siguran rad s memorijom osigurava se u Rust-u tijekom kompajlacije putem provjere referenci, praćenja vlasništva nad objektima i uzimanja u obzir vremena života objekata (opseg vidljivosti), kao i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža alate za zaštitu od prelivanja cijelih brojeva, zahtijeva obveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli prema zadanim postavkama te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster