Kaheksas versioon Linuxi tuumapatchidest, mis toetavad Rusti keelt

Miguel Ojeda, Rust for Linux projekti autor, pakkus Linuxi tuuma arendajatele kaalumiseks välja v8 komponente seadme draiverite arendamiseks Rust keeles. See on toimetamise redaktsioon parandustest, arvestades esimest versiooni, mis avaldati numbrita. Rusti tugi on experimentalne, kuid juba on see lisatud linux-next haru, püüdes integreeruda sügisese 5.20/6.0 väljaandega ja on piisavalt arenenud, et alustada abstraktsioonikihtide loomist tuuma alam süsteemide üle, samuti draiverite ja moodulite kirjutamist. Arendust rahastavad Google ja ISRG (Internet Security Research Group), kes on Let's Encrypt projekti asutaja ja aitab edendada HTTPS-i ning arendada tehnoloogiaid interneti turvalisuse parandamiseks.

Uues versioonis:

  • Tööriistakomplekt ja alloc teegi variant, mis on vabastatud võimalikest „panic“ seisundite genereerimise probleemidest vigade tekkimisel, on uuendatud Rust 1.62 väljaandeni. Võrreldes varem kasutatud versiooniga on Rusti tööriistakomplektis stabiliseeritud toimetamine const_fn_trait_bound funktsionaalsuse toetamiseks, mida kasutatakse tuuma patchides.
  • Sidumiskood on eraldatud eraldi crate-paketti „bindings“, mis lihtsustab uuesti kompileerimist, kui muudatused tehakse ainult peamises pakendis „kernel“.
  • Makro „concat_idents!“ on ümber kirjutatud protseduurilise makrona, mis ei ole seotud concat_idents funktsionaalsusega ja võimaldab kohalike muutuja viidete kasutamist.
  • Makro „static_assert!“ on ümber kirjutatud, mis võimaldab kasutada „core::assert!()“ igas kontekstis, mitte ainult konstantide puhul.
  • Makro „build_error!“ on kohandatud töö tegemiseks, kui moodulitele on seatud režiim „RUST_BUILD_ASSERT_{WARN,ALLOW}“.
  • Lisatud on eraldi fail konfiguratsioonide jaoks „kernel/configs/rust.config“.
  • Makropookide failid „*.i“ on ümber nimetatud „*.rsi“.
  • Rusti komponentide kompileerimise tugi on lõpetatud, kui optimiseerimise tasemed erinevad C keeles kirjutatud koodiga kasutatavatest.
  • Lisatud on fs moodul, mis pakub side pakette failisüsteemidega töötamiseks. Pakutud on näide lihtsast failisüsteemist, mis on kirjutatud Rust keeles.
  • Lisatud on workqueue moodul, mis tegeleb süsteemsete järjekordadega (pakub ümbersidumise tuuma struktuuride work_struct ja workqueue_struct üle).
  • Kasynci mooduli arendamine jätkub, rakendades asünkroonse programmeerimise (async) meetodeid. Lisatud on töötav TCP-serveri näide, kirjutatud Rustis, mis töötab tuumatasemel.
  • Lisatud on Rusti kaudu katkestuste töötlemise võimalus, kasutades [Threaded]Handler tüüpe ja [Threaded]Registration` tüüpe.
  • Lisatud on protseduuriline makro «#[vtable]», mis lihtsustab funktsioonide näidikutega tabelitega, nagu file_operations struktuuriga, töötamist.
  • Lisatud on kahesuunaliste sidusate loendite «unsafe_list::List» rakendus.
  • Lisatud on algne tugi RCU (Read-copy-update) ja Guard tüüp, et kontrollida lugemiseks lukustuse sidumist praeguse lõimega.
  • Lisatud on funktsioon Task::spawn() tuumade lõime loomise ja automaatse käivitamise jaoks. Samuti on lisatud meetod Task::wake_up().
  • Lisatud on delay moodul, mis võimaldab viivituste kasutamist (msleep() ümbrik).

Ettepanekud muudatused võimaldavad kasutada Rusti teise keelena draiverite ja tuumamoodulite arendamiseks. Rusti toetus esitatakse kui valik, mis ei ole vaikimisi aktiveeritud ja ei too endaga kaasa Rusti lisamist tuuma kohustuslike kogumis sõltuvuste hulka. Rusti kasutamine draiverite arendamiseks võimaldab minimaalse vaevaga luua turvalisi ja kvaliteetsemaid draivereid, vabastades neid sellistest probleemidest nagu mälu tajumine pärast vabastamist, nullviidete mõistmine ja mälupuhvri piire ü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

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster