Kaheksas versioon plaastritest Linuxi kernelile, mis toetab Rust keelt

Projekti Rust-for-Linux autor Miguel Ojeda tegi ettepaneku v8 komponentide väljalaskmiseks seadmedraiverite arendamiseks Rust keeles, et Linuxi kerneli arendajad saaksid seda kaaluda. See on plaastrite muudetud versioon, võttes arvesse esimest versiooni, avaldatud ilma versiooninumbrita. Roostetuge peetakse eksperimentaalseks, kuid see on juba linux-next harusse kaasatud, väidetavalt on integreeritud versioonide 5.20/6.0 sügisväljalaskesse ja on piisavalt küps, et alustada tööd abstraktsioonikihtide loomisel kerneli alamsüsteemides ja draiverite kirjutamisel. ja moodulid. Arendust rahastavad Google ja ISRG (Internet Security Research Group), mis on Let's Encrypt projekti asutaja ning propageerib HTTPS-i ja tehnoloogiate arendamist interneti turvalisuse parandamiseks.

Uues versioonis:

  • Tööriistakomplekti ja alloc teegi varianti, mis ei tekita tõrgete ilmnemisel võimalikku paanikaseisundit, on Rust 1.62 väljalaskmiseks värskendatud. Võrreldes varem kasutatud versiooniga on Rusti tööriistakomplekt stabiliseerinud kerneli paikades kasutatava funktsiooni const_fn_trait_bound toe.
  • Köitmiskood on eraldatud eraldi kastipaketiks "köitmised", mis lihtsustab uuesti ülesehitamist, kui muudatusi tehakse ainult põhipaketis "kernel".
  • Makro "concat_idents!" rakendamine ümber kirjutatud protseduurilise makro kujul, mis ei ole seotud funktsiooniga concat_idents ja võimaldab kasutada viiteid kohalikele muutujatele.
  • Makro "static_assert!" on ümber kirjutatud, võimaldades konstantide asemel kasutada igas kontekstis "core::assert!()".
  • Makro "build_error!" kohandatud töötama, kui moodulite jaoks on seatud režiim "RUST_BUILD_ASSERT_{WARN,ALLOW}".
  • Lisatud on eraldi fail sätetega “kernel/configs/rust.config”.
  • Makroasendustega töödeldud failid “*.i” on ümber nimetatud “*.rsi”-ks.
  • C-koodi jaoks kasutatavast erineva optimeerimistasemega Rust-komponentide ehitamise tugi on lõpetatud.
  • Lisatud fs-moodul, mis pakub failisüsteemidega töötamiseks seoseid. Siin on näide lihtsast failisüsteemist, mis on kirjutatud Rustis.
  • Lisatud tööjärjekorra moodul süsteemi järjekordadega töötamiseks (pakkub sidumist kerneli struktuuride work_struct ja workqueue_struct kaudu).
  • Kasync mooduli arendus jätkus asünkroonsete programmeerimismeetodite (async) juurutamisega. Lisatud on näide põhitaseme TCP-serverist, mis on kirjutatud Rustis.
  • Lisati võimalus käsitleda katkestusi Rust keeles, kasutades [Threaded] Handler tüüpi ja [Threaded] Registration` tüüpe.
  • Lisatud on protseduuriline makro "#[vtable]", et oleks lihtsam töötada funktsiooniosutajate tabelitega, näiteks struktuur file_operations.
  • Lisatud on kahesuunaliste lingitud loendite rakendamine "unsafe_list::List".
  • Lisatud esialgne tugi RCU-le (Read-copy-update) ja valvetüübile, et kontrollida, kas lugemislukk on praeguse lõimega seotud.
  • Kerneli lõimede loomiseks ja automaatseks käivitamiseks on lisatud funktsioon Task::spawn(). Lisatud on ka meetod Task::wake_up().
  • Lisatud viivitusmoodul, mis võimaldab kasutada viiteid (ümbris msleep() kohal).

Kavandatavad muudatused võimaldavad kasutada Rusti draiverite ja tuumamoodulite arendamiseks teise keelena. Rooste tugi esitatakse valikuna, mis ei ole vaikimisi lubatud ja mille tulemuseks ei ole rooste kaasamine kerneli kohustusliku ehitussõltuvusse. Rooste kasutamine draiverite arendamiseks võimaldab teil luua turvalisemaid ja paremaid draivereid minimaalse pingutusega, ilma probleemideta, nagu juurdepääs mälule pärast vabastamist, nullkursori viited ja puhvri ülekoormus.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse ja objekti eluea (ulatuse) jälgimise, samuti koodi täitmise ajal mälu juurdepääsu õigsuse hindamise kaudu. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Allikas: opennet.ru

Lisa kommentaar