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

Migels Ojeda, projekta Rust-for-Linux autors, ierosināja izlaist v6 komponentus ierīču draiveru izstrādei Rust valodā, lai to apsvērtu Linux kodola izstrādātāji. Šis ir septītais ielāpu izdevums, ņemot vērā pirmo versiju, kas publicēts bez versijas numura. Rust atbalsts tiek uzskatīts par eksperimentālu, bet jau ir iekļauts linux-next filiālē un ir pietiekami attīstīts, lai sāktu darbu pie abstrakcijas slāņu izveides virs kodola apakšsistēmām, kā arī draiveru un moduļu rakstīšanas. 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, kas atbrīvots no iespējamās "panikas" stāvokļa ģenerēšanas kļūdu gadījumā, ir atjaunināts līdz Rust 1.60 izlaišanai, kas stabilizē atbalstu "maybe_uninit_extra" režīmam, ko izmanto kodola ielāpus.
  • Pievienota iespēja palaist testus no dokumentācijas (testi, kas tiek izmantoti arī kā piemēri dokumentācijā), kompilēšanas laikā pārveidojot ar kodola API saistītos testus par KUnit testiem, kas tiek izpildīti kodola ielādes laikā.
  • Ir pieņemtas prasības, ka testu rezultātā nevajadzētu parādīt Clippy lintera brīdinājumu, tāpat kā Rust kodola kodam.
  • Tiek piedāvāta sākotnējā “net” moduļa ieviešana ar tīkla funkcijām. Rust kodam ir piekļuve tādām kodola tīkla struktūrām kā Namespace (pamatojoties uz struct net kodola struktūru), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) un to IPv6 ekvivalentiem. .
  • Ir sākotnējais atbalsts asinhronajām programmēšanas metodēm (async), kas ieviests kasync moduļa veidā. Piemēram, varat rakstīt asinhronu kodu, lai manipulētu ar TCP ligzdām: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; cilpa { let n = straume.lasīt(&mut buf).gaida?; ja n == 0 { return Ok(()); } stream.write_all(&buf[..n]).gaida?; } }
  • Pievienots net::filtru modulis manipulēšanai ar tīkla pakešu filtriem. Pievienots piemērs rust_netfilter.rs ar filtra ieviešanu Rust valodā.
  • Pievienota vienkārša mutex smutex::Mutex ieviešana, kurai nav nepieciešama piespraušana.
  • Pievienota NoWaitLock slēdzene, kas nekad negaida atbrīvošanu, un, ja to aizņem cits pavediens, tiek ziņots par kļūdu, mēģinot iegūt bloķēšanu, nevis apturot zvanītāju.
  • Pievienots RawSpinLock, ko kodolā identificē ar raw_spinlock_t, lai lietotu sadaļās, kuras nevar būt dīkstāves.
  • Pievienots ARef tips atsaucēm uz objektu, kuram tiek piemērots atsauces skaitīšanas mehānisms (vienmēr pārskaitīts).
  • Rustc_codegen_gcc aizmugursistēma, kas ļauj izmantot libgccjit bibliotēku no GCC projekta kā koda ģeneratoru programmā rustc, lai nodrošinātu rustc atbalstu arhitektūrām un optimizācijām, kas pieejamas GCC, ir ieviesusi rustc kompilatora sāknēšanas iespēju. Kompilatora veicināšana nozīmē iespēju izmantot rustc uz GCC balstītu koda ģeneratoru, lai izveidotu pašu rustc kompilatoru. Turklāt nesenajā GCC 12.1 laidienā ir iekļauti libgccjit labojumi, kas nepieciešami, lai rustc_codegen_gcc darbotos pareizi. Notiek sagatavošanās darbi, lai nodrošinātu iespēju instalēt rustc_codegen_gcc, izmantojot utilītu rustup.
  • Tiek atzīmēts progress GCC frontend gccrs izstrādē, ieviešot Rust valodas kompilatoru, kura pamatā ir GCC. Pašlaik pie gccrs strādā divi pilna laika izstrādātāji.

Atgādiniet, ka 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 kā obligātā kodola veidošanas atkarība. Izmantojot Rust draiveru izstrādei, ar minimālu piepūli varēsit izveidot drošākus un labākus draiverus, bez problēmām, piemēram, piekļuvi atmiņai pēc atbrīvošanas, nulles rādītāja atsauču un bufera pārtēriņu.

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