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
