Kuues versioon plaastritest Linuxi kernelile, mis toetab Rust keelt

Projekti Rust-for-Linux autor Miguel Ojeda pakkus välja v6 komponentide väljatöötamise seadmedraiverite arendamiseks Rust keeles, et Linuxi kerneli arendajad saaksid seda kaaluda. See on plaastrite seitsmes väljaanne, võttes arvesse esimest versiooni, avaldatud ilma versiooninumbrita. Roostetuge peetakse eksperimentaalseks, kuid see on juba linux-next harusse kaasatud ja piisavalt arenenud, et alustada tööd abstraktsioonikihtide loomisel kerneli alamsüsteemides, samuti draiverite ja moodulite kirjutamisel. Arendust rahastavad Google ja ISRG (Internet Security Research Group), mis on Let's Encrypt projekti asutaja ning propageerib HTTPS-i ja tehnoloogiate arendamist interneti turvalisuse parandamiseks.

Uues versioonis:

  • Tööriistakomplekt ja alloc teegi variant, mis on vabastatud võimalikust "paanika" oleku tekitamisest tõrgete ilmnemisel, on värskendatud versioonile Rust 1.60, mis stabiliseerib tuge kerneli paikades kasutatavale režiimile "maybe_uninit_extra".
  • Lisati võimalus käitada dokumentatsioonist teste (testid, mida dokumentatsioonis kasutatakse ka näidetena), kerneli API-ga seotud testide kompileerimisaegse teisendamise kaudu kerneli laadimise ajal käivitatavateks KUniti testideks.
  • On vastu võetud nõuded, et testid ei tohiks anda Clippy linteri hoiatust, nagu ka Rusti tuuma kood.
  • Pakutakse välja võrgufunktsioonidega mooduli "net" esialgne juurutamine. Rust koodil on juurdepääs tuumavõrgu struktuuridele, nagu nimeruum (põhineb struct net kerneli struktuuril), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 ( struct sockaddr_in) ja nende IPv6 ekvivalendid .
  • Esialgne tugi on asünkroonsetele programmeerimistehnikatele (async), mis on rakendatud kassünkroonse mooduli kujul. Näiteks võite kirjutada asünkroonse koodi TCP-soklite manipuleerimiseks: async fn echo_server(stream: TcpStream) -> Tulemus { let mut buf = [0u8; 1024]; loop { las n = stream.read(&mut buf).wait?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).wait?; } }
  • Lisatud net::filtri moodul võrgupakettfiltritega manipuleerimiseks. Lisatud näide rust_netfilter.rs koos filtri juurutamisega Rust keeles.
  • Lisatud on lihtsa mutexi smutex::Mutexi teostus, mis ei vaja kinnitamist.
  • Lisatud NoWaitLock, mis ei oota kunagi lukku ja kui see on hõivatud mõne muu lõimega, põhjustab helistaja peatamise asemel luku hankimisel tõrketeate.
  • Lisatud on RawSpinLock, mida tuumas tähistab raw_spinlock_t, et rakendada sektsioonidele, mis ei saa olla jõude.
  • Lisatud ARef-tüüp viidete jaoks objektile, millele rakendatakse viidete loendusmehhanismi (alati uuesti loetakse).
  • Rustc_codegen_gcc taustaprogramm, mis võimaldab teil kasutada GCC projekti libgccjit teeki rustc-s koodigeneraatorina, et pakkuda rustc-le toetust GCC-s saadaolevatele arhitektuuridele ja optimeerimistele, on rakendanud rustc-kompilaatori alglaadimise võimaluse. Kompilaatori edendamine tähendab võimalust kasutada rustc-s GCC-põhist koodigeneraatorit rustc-kompilaatori enda koostamiseks. Lisaks sisaldab hiljutine GCC 12.1 väljalase libgccjiti parandusi, mis on vajalikud rustc_codegen_gcc korrektseks tööks. Käimas on ettevalmistused rustc_codegen_gcc installimise võimaluse tagamiseks utiliidi rustup abil.
  • Märgitakse edusamme GCC esiosa gccrs arendamisel GCC-l põhineva Rust keele kompilaatori rakendamisega. Praegu töötab gccrs-iga kaks täiskohaga arendajat.

Tuletame meelde, et kavandatud muudatused võimaldavad kasutada Rusti draiverite ja tuumamoodulite arendamiseks teise keelena. Rooste tugi esitatakse valikuna, mis ei ole vaikimisi lubatud ja mille tulemuseks ei ole rooste kaasamine kerneli kohustusliku ehitussõltuvusse. Rooste kasutamine draiverite arendamiseks võimaldab teil luua turvalisemaid ja paremaid draivereid minimaalse pingutusega, ilma probleemideta, nagu juurdepääs mälule pärast vabastamist, nullkursori viited ja puhvri ülekoormus.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse ja objekti eluea (ulatuse) jälgimise, samuti koodi täitmise ajal mälu juurdepääsu õigsuse hindamise kaudu. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Allikas: opennet.ru

Lisa kommentaar