Astotā ielāpu versija Linux kodolam ar Rust valodas atbalstu

Projekta Rust-for-Linux autors Migels Ojeda ierosināja v8 komponentu izlaišanu ierīču draiveru izstrādei Rust valodā, lai to apsvērtu Linux kodola izstrādātāji. Šī ir labotā ielāpu versija, ņemot vērā pirmo versiju, kas publicēta bez versijas numura. Rust atbalsts tiek uzskatīts par eksperimentālu, taču tas jau ir iekļauts linux-next filiālē, apgalvo, ka ir integrēts rudens 5.20/6.0 laidienā, un ir pietiekami nobriedis, lai sāktu darbu pie abstrakcijas slāņu izveides kodola apakšsistēmās, kā arī rakstīšanas draiveri un moduļi. Izstrādi finansē Google un ISRG (Internet Security Research Group), kas ir projekta Let's Encrypt dibinātājs un veicina HTTPS un tehnoloģiju izstrādi interneta drošības uzlabošanai.

Jaunajā versijā:

  • Rīku komplekts un alloc bibliotēkas variants, kurā nav iespējama "panikas" stāvokļa ģenerēšana kļūdu gadījumā, ir atjaunināti Rust 1.62 izlaišanai. Salīdzinot ar iepriekš izmantoto versiju, Rust rīkkopa ir stabilizējusi atbalstu kodola ielāpos izmantotajai funkcionalitātei const_fn_trait_bound.
  • Iesiešanas kods tiek sadalīts atsevišķā kastes pakotnē “iesējumi”, kas vienkāršo pārbūvi, ja tiek veiktas izmaiņas tikai galvenajā pakotnē “kodolu”.
  • Makro “concat_idents!” ieviešana pārrakstīts kā procesuāls makro, kas nav saistīts ar concat_idents funkcionalitāti un ļauj izmantot atsauces uz vietējiem mainīgajiem.
  • Makro “static_assert!” ir pārrakstīts, ļaujot izmantot “core::assert!()” jebkurā kontekstā, nevis konstantes.
  • Makro "build_error!" pielāgots darbam, kad moduļiem ir iestatīts režīms “RUST_BUILD_ASSERT_{WARN,ALLOW}”.
  • Pievienots atsevišķs fails ar iestatījumiem “kernel/configs/rust.config”.
  • Makro aizstāšanā apstrādātie “*.i” faili ir pārdēvēti par “*.rsi”.
  • Ir pārtraukts atbalsts Rust komponentu veidošanai ar optimizācijas līmeņiem, kas atšķiras no tiem, kas tiek izmantoti C kodam.
  • Pievienots fs modulis, kas nodrošina saistījumus darbam ar failu sistēmām. Tiek sniegts vienkāršas failu sistēmas piemērs, kas rakstīts Rust.
  • Pievienots darbrindu modulis darbam ar sistēmas rindām (nodrošina saistījumus pār work_struct un workqueue_struct kodola struktūrām).
  • Kasync moduļa izstrāde turpinājās ar asinhronās programmēšanas metožu (async) ieviešanu. Pievienots pamata līmeņa TCP servera piemērs, kas rakstīts Rust valodā.
  • Pievienota iespēja apstrādāt pārtraukumus Rust valodā, izmantojot veidus [Threaded] Handler un [Threaded] Registration.
  • Pievienots procesuālais makro "#[vtable]", lai atvieglotu darbu ar funkciju rādītāju tabulām, piemēram, struktūru file_operations.
  • Pievienota divvirzienu saistīto sarakstu "unsafe_list::List" ieviešana.
  • Pievienots sākotnējais atbalsts RCU (lasīt-kopēt-atjaunināt) un apsardzes tipam, lai pārbaudītu, vai lasīšanas bloķēšana ir saistīta ar pašreizējo pavedienu.
  • Pievienota funkcija Task::spawn(), lai izveidotu un automātiski palaistu kodola pavedienus. Pievienota arī metode Task::wake_up().
  • Pievienots aizkaves modulis, kas ļauj izmantot aizkaves (iesaiņojums virs msleep()).

Ierosinātās izmaiņas ļauj izmantot Rust kā otro valodu draiveru un kodola moduļu izstrādei. Rust atbalsts tiek parādīts kā opcija, kas nav iespējota pēc noklusējuma, un tā rezultātā Rust netiek iekļauta starp nepieciešamajām kodola uzbūves atkarībām. Izmantojot Rust, lai izstrādātu draiverus, ar minimālu piepūli varēsit izveidot drošākus un labākus draiverus, bez problēmām, piemēram, piekļuves atmiņas apgabalam pēc tā atbrīvošanas, nulles norādes atsauču un bufera pārtēriņa.

Atmiņas drošība Rust tiek nodrošināta kompilēšanas laikā, pārbaudot atsauces, sekojot līdzi objekta īpašumtiesībām un objekta kalpošanas laikam (tvērumam), kā arī novērtējot atmiņas piekļuves pareizību koda izpildes laikā. Rūsa arī nodrošina aizsardzību pret veselu skaitļu pārpildīšanu, pieprasa obligātu mainīgo vērtību inicializāciju pirms lietošanas, labāk apstrādā kļūdas standarta bibliotēkā, pēc noklusējuma piemēro nemainīgu atsauču un mainīgo jēdzienu, piedāvā spēcīgu statisko rakstīšanu, lai samazinātu loģiskās kļūdas.

Avots: opennet.ru

Pievieno komentāru