Kolmas Linuxi südamiku patšide väljaanne Rust keele toe abil

Miguel Ojeda, Rust-for-Linux projekti autor, on Linuxi tuumade arendajatele esitanud kolmanda variandi seadmete draiverite arendamiseks Rust keeles. Rusti toetamist peetakse eksperimentaalseks, kuid see on juba kinnitatud linux-next haru lisamiseks. Arendust rahastab Google ja ISRG (Internet Security Research Group), mis on Let's Encrypt projekti asutaja ja toetab HTTPS-i ja interneti turvalisuse tehnoloogiate edendamist.

Tulet meelde, et pakutud muudatused võimaldavad kasutada Rust'i teise keelena draiverite ja tuumamoodulite arendamiseks. Rust'i toetamist tutvustatakse valikuna, mis ei ole vaikimisi aktiivne ja ei too kaasa Rust'i lisamist tuuma kohustuslikesse kogumise sõltuvustesse. Rust'i kasutamine draiverite arendamiseks võimaldab minimaalsete pingutustega luua turvalisemaid ja kvaliteetsemaid draivereid, vabastades need probleemidest nagu mälu kasutamine pärast selle vabastamist, nullviidete dereferenseerimine ja puhverserverist välja minemine.

Rust tagab mälutöö turvalisust kompileerimise ajal viidatud linkide kontrollimise, objektide omaniku jälgimise ja objektide eluea arvestamise (nähtavuse) kaudu, samuti pärast koodi käitamise ajal mälu juurdepääsu õigsuse hindamise kaudu. Rust pakub ka vahendeid täisarvude ülevoolude eest kaitsmiseks, nõuab muutuja väärtuste kohustuslikku initsialiseerimist enne kasutamist, haldab vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) kontseptsiooni linkide ja muutujate puhul vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.

Uues patšide versioonis jätkatakse esimese ja teise versiooni patšide arutelu käigus esitatud ettepanekute kõrvaldamist. Kõige olulisemad muudatused:

  • On toimunud üleminek stabiilse Rust 1.57 väljaande kasutamisele viitamist kompilaatorina ja Rust 2021 keele stabiilse väljaande sidumine. Varasemad patšid tuginesid Rust beta harule ja kasutasid keele mitmeid ebastabiilseid funktsioone. Üleminek Rust 2021 spetsifikatsioonile on võimaldanud alustada tööd ebastabiilsete võimaluste, nagu const_fn_transmute, const_panic, const_unreachable_unchecked ja core_panic ning try_reserve, kõrvaldamise suunas.
  • Patšide raames on jätkatud Rust-i alloc-teegi variandi arendamist, muutes mälu jaotamise funktsioone, et vältida 'panic' olekute tekkimist, kui esinevad vead, nagu mälu puudus. Uues versioonis on rakendatud valikud 'no_rc' ja 'no_sync', et deaktiveerida Rust-koodis tuumale mittevajalike funktsioonide rakendamine, muutes teegi modulaarsemaks. Kesksetel alloc arendajatega jätkatakse vajalike muudatuste viimist vajalikesse teekidesse. Rust põhiteeki (core) on lisatud 'no_fp_fmt_parse' valik, mis on vajalik tuumateegi toimimiseks.
  • Koodi on puhastatud, et kõrvaldada võimalikke kompilaatori hoiatusteateid tuuma koostamisel CONFIG_WERROR režiimis. Rust-koodi koostamisel on lisatud täiendavad diagnostilised kompilaatori režiimid ja Clippy lintejate hoiatusteated.
  • On pakutud abstraktsioone, et kasutada Rust-keeles seklukke, energiatarbimise haldust, I/O mälu (readX/writeX), katkestuste ja lõimede käitlejat, GPIO-d, seadmete, draiverite ja akadeemiliste õiguste ligipääsu.
  • Aretusvahendeid on laiendatud draiverite arendamiseks, rakendades edastatavaid mutex'e, bittide iteraatoreid, lihtsustatud mähiseid näidikute üle, täiustatud tõrke-diagnostika ja andmeside sõltumatust infrastruktuuri.
  • Viidete töötlemine on paranenud lihtsustatud Ref-tüüpi, mis põhineb refcount_t tagaosal, kasutades sama nimetust API-d tuuma jaoks viidete arvu loendamiseks. Arc ja Rc tüübid, mis on pakutud alloci tavateegina, on eemaldatud ja pole tuumatasemel koodis kättesaadavad (teegi jaoks on valmistatud valikud, mis need tüübid deaktiveerivad).
  • Patšidesse on lisatud PL061 GPIO draiveri variant, kirjutatud Rust keeles. Draiveri eripära on see, et selle rakendus kordab peaaegu rida-realt olemasolevat GPIO draiverit C-keeles. Rust-keele draiverite loomisest huvitatud arendajatele on ette valmistatud rea-realt võrdlus, mis näitab, kuidas C-kood on muudetud Rust struktuurideks.
  • Rust-koodi põhikoodibaasi on võetud rustc_codegen_gcc, rustc tagumise osa GCC jaoks, mis rakendab eelkompileerimise võimalust, kasutades libgccjit teeki. Kui tagumine osa areneb korralikult, võimaldab see Rust-koodi kokku panna GCC abil.
  • Lisaks ARM-i, Google'i ja Microsofti ettevõtetele on Rusti keele kasutamise huvi Linuxi tuumas väljendanud ka Red Hat. Meenutame, et Google toetab otse Rust for Linux projekti, arendab uut rakendust omavahelise suhtluse mehhanismi Binder Rustis ja kaalub erinevate draiverite üleviimist Rusti. Microsoft on alustanud Hyper-V draiverite rakendamist Rustis. ARM töötab Rusti toe parandamise kallal ARM protsessoripõhistes süsteemides. IBM on rakendanud Rusti toe tuumas PowerPC süsteemide jaoks.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster