Tretja izdaja popravkov za jedro Linuxa s podporo za jezik Rust

Miguel Ojeda, avtor projekta Rust-for-Linux, je predlagal možnost tretje komponente za razvoj gonilnikov naprav v jeziku Rust, ki naj bi jo morali upoštevati razvijalci jedra Linuxa. Podpora za Rust se šteje za eksperimentalno, vendar je že dogovorjeno za vključitev v vejo linux-next. 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.

Spomnimo se, da predlagane spremembe omogočajo uporabo Rusta kot drugega jezika za razvoj gonilnikov in modulov jedra. Podpora za Rust je predstavljena kot možnost, ki privzeto ni omogočena in ne povzroči vključitve Rusta kot obvezne 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 so dostop do pomnilnika po sprostitvi, dereferenciranje ničelnega kazalca 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.

Nova različica popravkov še naprej odpravlja pripombe med razpravo o prvi in ​​drugi različici popravkov. Najbolj opazne spremembe:

  • Izveden je bil prehod na uporabo stabilne izdaje Rust 1.57 kot referenčnega prevajalnika in zagotovljena je bila povezava do stabilizirane izdaje jezika Rust 2021. Prej so bili popravki vezani na beta vejo Rust in so uporabljali nekatere jezikovne funkcije, ki so bili razvrščeni kot nestabilni. Prehod na specifikacijo Rust 2021 nam je omogočil, da smo začeli delati, da bi se izognili uporabi tako nestabilnih funkcij v popravkih, kot so const_fn_transmute, const_panic, const_unavailable_unchecked ter core_panic in try_reserve.
  • Nadaljeval se je razvoj različice alloc knjižnice Rust, vključene v popravke, ki je bila spremenjena tako, da je funkcijam dodeljevanja pomnilnika odpravljena možnost ustvarjanja stanja »panike«, ko pride do napak, na primer zmanjkanja pomnilnika. Nova različica implementira možnosti »no_rc« in »no_sync« za onemogočanje funkcionalnosti, ki se ne uporabljajo v kodi jedra Rust, zaradi česar je knjižnica bolj modularna. Nadaljuje se delo z glavnimi razvijalci alloc, katerega cilj je prenos sprememb, potrebnih za jedro, v glavno knjižnico. Možnost »no_fp_fmt_parse«, ki je potrebna za delovanje knjižnice na ravni jedra, je bila premaknjena v osnovno knjižnico (jedro) Rust.
  • Koda je bila očiščena, da se znebite možnih opozoril prevajalnika pri gradnji jedra v načinu CONFIG_WERROR. Pri gradnji kode v Rustu so omogočeni dodatni diagnostični načini prevajalnika in opozorila Clippy linterja.
  • Abstrakcije so predlagane za uporabo v kodi Rust za seqlocks (zaklepanja zaporedja), povratne klice za upravljanje porabe energije, I/O pomnilnik (readX/writeX), prekinitve in upravljalnike niti, GPIO, dostop do naprav, gonilnikov in poverilnic.
  • Orodja za razvoj gonilnikov so bila razširjena tako, da vključujejo premestitvene mutekse, bitne iteratorje, poenostavljene vezave kazalcev, izboljšano diagnostiko napak in infrastrukturo, neodvisno od podatkovnega vodila.
  • Izboljšano delo s povezavami z uporabo poenostavljenega tipa Ref, ki temelji na ozadju refcount_t, ki za štetje referenc uporablja API jedra z istim imenom. Podpora za tipa Arc in Rc, ki je na voljo v standardni knjižnici dodeljevanja, je bila odstranjena in ni na voljo v kodi, ki se izvaja na ravni jedra (za samo knjižnico so bile pripravljene možnosti, ki onemogočajo te vrste).
  • Popravki vključujejo različico gonilnika PL061 GPIO, prepisano v Rust. Posebnost gonilnika je, da njegova izvedba skoraj vrstico za vrstico ponavlja obstoječi gonilnik GPIO v jeziku C. Za razvijalce, ki se želijo seznaniti z ustvarjanjem gonilnikov v Rustu, je bila pripravljena primerjava po vrsticah, ki jim omogoča razumevanje, v katere konstrukte v Rustu se pretvori koda C.
  • Glavna kodna baza Rust je sprejela rustc_codegen_gcc, zaledje rustc za GCC, ki izvaja prevajanje vnaprej (AOT) z uporabo knjižnice libgccjit. S pravilnim razvojem ozadja vam bo omogočil zbiranje kode Rust, vključene v jedro, z uporabo GCC.
  • Poleg ARM, Googla in Microsofta je Red Hat izrazil zanimanje za uporabo jezika Rust v jedru Linuxa. Spomnimo se, da Google neposredno zagotavlja podporo za projekt Rust for Linux, razvija novo izvedbo medprocesnega komunikacijskega mehanizma Binder v Rustu in razmišlja o možnosti predelave različnih gonilnikov v Rust. Microsoft je začel uvajati gonilnike za Hyper-V v Rust. ARM si prizadeva izboljšati podporo za Rust za sisteme, ki temeljijo na ARM. IBM je implementiral podporo za Rust v jedro za sisteme PowerPC.

Vir: opennet.ru

Dodaj komentar