Miguel Ojeda, Rust-for-Linux projekti autor, pakkus Linuxi tuuma arendajatele kaaluda Rusti keeles seadme juhtmete arendamiseks mõeldud komponentide v8 väljaandmist. See on parandatud versioon plaastritest, mis põhinevad algsel variandil, mis avaldati versiooninumbrita. Rusti tugi on eksperimendina arvesse võetud, kuid on juba integreeritud linux-next haru, püüdes integreeruda sügisel välja antud versioonidesse 5.20/6.0 ja on piisavalt küps, et alustada põhituumade kohalike abstraktsioonikihtide loomist, samuti juhtmete ja moodulite kirjutamist. Arendust toetab Google ja ISRG (Internet Security Research Group), kes on Let’s Encrypt projekti asutaja ning edendab HTTPS-i ja arendab tehnoloogiaid interneti turvalisuse parandamiseks.
Uues versioonis:
- Tööriist komplekt ja alloc teek, mis on vabastatud võimalikest "panic" olekute genereerimise riskidest vigade ilmnemisel, on värskendatud Rust 1.62 väljaandele. Erinevalt eelnevalt kasutatud versioonist on Rusti tööriistade komplekti stabiliseeritud const_fn_trait_bound funktsionaalsuse tugi, mida kasutatakse tuumale suunatud plaastrites.
- Sidumise kood on eraldi crate-paketi «bindings» alla, mis lihtsustab ümberkompileerimist, kui muudatused tehakse ainult põhialusesse «kernel».
- Mikroskoop «concat_idents!» on ümber kirjutatud protseduurilise makroskoopina, mis ei ole seotud concat_idents funktsionaalsusega ja võimaldab kohalike muutuja viiteid.
- Mikroskoop «static_assert!» on ümber kirjutatud, mis võimaldas kasutada «core::assert!()» igas kontekstis, mitte ainult konstantide puhul.
- Mikroskoop «build_error!» on kohandatud töötama, kui moodulitel on seadistatud režiim «RUST_BUILD_ASSERT_{WARN,ALLOW}».
- Lisatud eraldi fail seadistuste jaoks «kernel/configs/rust.config».
- Makropoodides töödeldud failid «*.i» on ümber nimetatud «*.rsi».
- Toetamine Rust-komponentide kompileerimiseks optimeerimisastmetega, mis erinevad C keele koodist, on lõpetatud.
- Lisatud moodul fs, mis pakub seotud funktsioone failisüsteemidega töötamiseks. Esitatud on näide lihtsast failisüsteemist, mis on kirjutatud Rusti keeles.
- Lisatud moodul workqueue süsteemsete järjekordade töötlemiseks (pakub seotud funktsioone kernelis struktuuride work_struct ja workqueue_struct üle).
- Jätkuv kasynci mooduli arendus asünkroonilise programmeerimise (async) meetodite rakendamisega. Lisatud töövõime näide TCP-serverist, mis on kirjutatud Rustis ja töötab tuumatasemel.
- Lisatud katkestuste töötlemise võimalus Rusti keeles, kasutades tüüpe [Threaded]Handler ja [Threaded]Registration.
- Lisatud protseduuriline makro „#[vtable]“, mis lihtsustab töötamist funktsioonide näidikute tabelitega, nagu struktuur file_operations.
- Lisatud kahepoolsete seotud loendite „unsafe_list::List“ rakendus.
- Lisatud algne toetus RCU (Read-copy-update) ja tüübi Guard, mis kontrollib lugemise lukustamise seondumist jooksvale niidile.
- Lisatud funktsioon Task::spawn(), et luua ja automaatselt käivitada tuumaniite. Samuti on lisatud meetod Task::wake_up().
- Lisatud moodul delay, mis võimaldab kasutada viivitusi (ümberpöördumine msleep() funktsiooni).
Teie muudatused võimaldavad kasutada Rusti teise keelena draiverite ja tuumamoodulite arendamisel. Rusti toega tutvustatakse valikuna, mis ei ole vaikimisi aktiivne ega too Rusti tuuma kohustuslikesse koostamise sõltuvustesse. Rusti kasutamine draiverite arendamiseks võimaldab vähese vaevaga luua turvalisi ja kvaliteetseid draivereid, vabastades need probleemidest, nagu mälu juurde pääsemine pärast vabastamist, null-punktide dereferentseerimine ja puhvri ületamine.
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
