Miguel Ojeda, Rust-for-Linux projekti autor, pakkus Linuxi tuuma arendajatele arutamiseks välja Rusti seadmete draiverite arendamiseks mõeldud komponentide versiooni 6. See on seitsmes versioonikandmata plaastrite väljaanne, mis põhineb esimesel variandil, mis avaldati versioonita. Rusti tugi on eksperimenteerimise all, kuid see on juba lisatud linux-next haru ja on piisavalt arenenud, et alustada abstraktsioonikihtide loomist tuuma alamsüsteemide üle ning kirjutada draivereid ja mooduleid. Arendust toetab Google ja ISRG (Internet Security Research Group), kes on Let's Encrypt projekti asutaja ja toetab HTTPS-i, edendades tehnoloogiaid interneti turvalisuse suurendamiseks.
Uues versioonis:
- Tööriistakomplekt ja alloc-teegi variant, mis on vabastatud võimalusest, et tekkida võib «panic» olek, on värskendatud Rusti versioonile 1.60, kus stabiliseerus toetus «maybe_uninit_extra» režiimile, mida kasutatakse tuuma plaastrites.
- Dokumendist testide käivitamise võimalus on lisatud (testid, mida kasutatakse samal ajal dokumentatsiooni näidistena), transformeerides tuuma API-le toetuvad testid KUnit testideks, mida käitatakse tuuma laadimise ajal.
- Nõuded on vastu võetud, mille kohaselt testid ei tohi põhjustada Clippy linteri hoiatusi, nagu ka Rusti keeles kirjutatud tuuma kood.
- Pakuti välja «net» mooduli algne rakendus, mis sisaldab võrgufunktsioone. Rusti koodile on antud juurdepääs tuuma sellistele võrgu struktuuridele nagu «Namespace» (tuginedes tuuma struktuurile «struct net»), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ning nende vastetele IPv6 jaoks.
- Ellu on viidud algne tugi asünkroonsete programmeerimismeetodite (async) jaoks, mis on rakendatud kasync mooduli kujul. Näiteks on võimalik luua asünkroonselt töötav kood TCP-soketite 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 moodul net::filter võrgu paketifiltrite manipuleerimiseks. Lisatud näide rust_netfilter.rs, mis реализует фильтр на языке Rust.
- Lisatud lihtsa müüri smutex::Mutex teostus, mis ei nõua sidumist (pinning).
- Lisatud lukustus NoWaitLock, mis ei põhjusta kunagi ootamise vabastamist, ja kui mõni muu lõng on hõivatud, näitab see lukustuse saamise katse korral viga, selle asemel et peatada kutset.
- Lisatud RawSpinLock, mis on seotud raw_spinlock_t tuumaga, ja seda kasutatakse sektsioonides, mis ei saa olla ooteolekus.
- Lisatud ARef tüüp objektide viidetele, millele rakendatakse viidete arvu arvestamise mehhanism (always-refcounted).
- Rustc_codegen_gcc tagab, et rakendus GCC raamatukogu libgccjit on rustc koodi generaator, et toetada mevcut GCC arhitektuure ja optimeerimisi. Rustc kompilaatori bootstrappingu võimalus on ellu viidud, mis tähendab, et rustc kasutab GCC põhjal põhinevat koodi generaatorit enda kokku panemiseks. Lisaks, hiljutises GCC 12.1 väljaandes on tehtud parandusi libgccjit-is, mis on rustc_codegen_gcc korrektse töö tagamiseks vajalikud. Preparatsioonid rustc_codegen_gcc installimise võimaluse loomiseks rustupi tööriista kaudu on käimas.
- GCC esiotsa gccrs arendamine on märkimisväärselt edenenud, rakendades Rust keele kompilaatorit GCC alusel. Praegu töötab gccrs-i täieliku töö režiimis kaks arendajat.
Tuletame meelde, et ettepanekud muudatused võimaldavad kasutada Rusti teise keele kui draiverite ja tuuma moodulite arendamiseks. Rusti toetus on esitatud valikuna, mis pole vaikimisi aktiveeritud ja ei too kaasa Rusti lisamist tuuma kohustuslikesse koostamise sõltuvustesse. Rusti kasutamine draiverite arendamiseks võimaldab minimaalse vaevaga luua turvalisi ja kvaliteetseid draivereid, vabanedes sellistest probleemidest nagu mäluprobleemide juurde pääsemine pärast nende vabastamist, nullviidete de-referentsimine ja mälupuhvri piiride ületamine.
Rust tagab mäluga ohutu töö kompileerimise ajal viidete kontrollimise, objektide omandi jälgimise ja objektide eluea (nähtavuse) arvestamise kaudu ning hindab koodi käivitamise ajal mälule juurdepääsu õigust. Rust pakub ka vahendeid täisarvude ületäitumise kaitsmiseks, nõuab muutuja väärtuste kohustuslikku algväärtustamist enne kasutamist, käsitleb vigu paremini standardraamatukogus, rakendab muutujaid ja viiteid vaikimisi muutumatuks (immutable) ning pakub tugevat staatilist tüübi määramist loogiliste vigade vähendamiseks.
Allikas: opennet.ru
