Miguel Ojeda, Rust-for-Linux projekti autor, on ette pannud Linuxi tuumaarendajatele kaaluda v6 seadme draiverite arenduse komponente Rusti keeles. See on seitsmes versioon patches'itest, mis pĂ”hineb esimesel variandil, mis avaldati ilma versiooninumbrita. Rusti tuge peetakse eksperimentaalseks, kuid see on juba lisatud linux-next harusse ja on piisavalt vĂ€lja arendatud, et alustada abstraktsioonitasandite loomist tuumaaluste ĂŒle, samuti draiverite ja plokkide kirjutamist. Arengut rahastavad Google ja ISRG (Internet Security Research Group), mis on Let's Encrypt projekti asutaja ja toetab HTTPS-i edendamist ning tehnoloogiate arendamist interneti turvalisuse suurendamiseks.
Uues versioonis:
- Tööriistakomplekt ja alloc'i raamatukogu versioon, mis on vaba vĂ”imalike 'panic' seisundite genereerimisest vigade korral, on vĂ€rskendatud Rust 1.60 vĂ€ljaandele, kus stabiliseeriti 'maybe_uninit_extra' reĆŸiimi tugi, mida kasutatakse tuumale suunatud patĆĄides.
- Dokumentatsioonist testide lÀbiviimise vÔimalus on lisatud (testid, mida kasutatakse samal ajal dokumentatsiooni nÀidetena), muundades testid API tuuma jaoks KUnit testideks, mis viiakse lÀbi tuuma laadimisel.
- Sanktsioneeritud nÔuded, mille kohaselt ei tohi testid pÔhjustada Clippy lintimise tööriista hoiatuste vÀljastamist, samuti kodeerimise nÔuded Rust keeles tuuma jaoks.
- Esialgne rakendus moodulile ânetâ on vĂ€lja pakutud, mis sisaldab vĂ”rgufunktsioone. Rust keeles on juurdepÀÀs selliste tuuma vĂ”rgustruktuuride nagu âNamespaceâ (tuuma struktuuri âstruct netâ pĂ”hjal), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ja nende ekvivalendid IPv6 jaoks.
- Esialgne tugi asĂŒnkroonse programmeerimise meetoditele (async) on rakendatud kasync mooduli vormis. NĂ€iteks saab luua asĂŒnkroonselt toimivat koodi TCP-sokettide manipuleerimiseks: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; } }
- Lisatud net::filter moodul vÔrgu paketifiltrite manipuleerimiseks. Lisatud nÀidis rust_netfilter.rs, mis sisaldab filtrite rakendust Rusti keeles.
- Lisatud lihtsa mĂŒtseksi smutex::Mutex rakendus, mis ei nĂ”ua sidumist (pinning).
- Lisatud NoWaitLock lukustus, mis ei pÔhjusta kunagi ooteperioodi vabastamisel ja teise lÔime poolt kasutamise korral toob esile vea lukustuse hankimise proovimisel, selle asemel et peatada kutsuja.
- Lisatud RawSpinLock lukustus, mis on identne raw_spinlock_t-ga tuumas ja mida kasutatakse sektsioonides, mis ei saa olla ooteolekus.
- Lisatud ARef tĂŒĂŒp objektile, millele rakendatakse viidemehhanismi (always-refcounted).
- Rusti koodigeneratsiooni GCC teeki libgccjit kasutav rustc_codegen_gcc tagab koos GCC toetatavate arhitektuuride ja optimeerimisega rustcis koodi genereerimise vÔimaluse. Rusti kompilaatori (rustc) 'bootstrapping' vÔimalus lubab GCC baasil pÔhineva koodigeneratsiooni kasutamist rustci enda kokkupanemiseks. Samuti on GCC uusimas versioonis 12.1 tehtud vajalikud parandused libgccjit, et tagada rustc_codegen_gcc nÔuetekohane töö. Valmistatakse ette rustc_codegen_gcc paigaldamise vÔimalust rustupi utiliidi kaudu.
- GCC-fronteeri gccrs arengus on mĂ€rgata edusamme Rusti keele kompilatori rakendamisel GCC baasil. Praegu töötab gccrs kohaliku tööreĆŸiimi all kaks arendajat.
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.
Allikas: opennet.ru
