Den sjÀtte versionen av patcharna för Linux-kÀrnan med stöd för sprÄket Rust

Miguel Ojeda, författare till projektet Rust-for-Linux, har föreslagit att Linux-kĂ€rnutvecklare övervĂ€ger att slĂ€ppa v6-komponenter för att utveckla enhetsdrivrutiner pĂ„ Rust. Detta Ă€r den sjunde revideringen av patcharna med hĂ€nsyn till den första versionen, som publicerades utan versionsnummer. Stödet för Rust ses som experimentellt, men har redan inkluderats i linux-next-grenen och Ă€r tillrĂ€ckligt utvecklat för att pĂ„börja arbetet med att skapa abstraktionslager över kĂ€rnsystemen samt för att skriva drivrutiner och moduler. Utvecklingen finansieras av Google och organisationen ISRG (Internet Security Research Group), som grundade projektet Let’s Encrypt och frĂ€mjar HTTPS och utvecklingen av teknologier för att öka internets sĂ€kerhet.

I den nya versionen:

  • Verktygen och versionen av biblioteket alloc, som har tagits bort frĂ„n möjliga tillstĂ„nd av "panic" vid fel, har uppdaterats till release Rust 1.60, dĂ€r stödet för lĂ€get "maybe_uninit_extra" stabiliserats, vilket anvĂ€nds i patcharna för kĂ€rnan.
  • Möjligheten att köra tester frĂ„n dokumentationen (tester som samtidigt anvĂ€nds som exempel i dokumentationen) har lagts till, genom att vid kompilering omvandla tester bunden till kĂ€rnans API till KUnit-tester som körs under uppstarten av kĂ€rnan.
  • Krav har antagits enligt vilka tester inte fĂ„r leda till varningar frĂ„n lintern Clippy, precis som koden för kĂ€rnan pĂ„ Rust.
  • En initial implementation av modulen "net" med nĂ€tverksfunktioner har föreslagits. För Rust-kod finns tillgĂ„ng till sĂ„dana nĂ€tverksstrukturer i kĂ€rnan som "Namespace" (baserad pĂ„ kĂ€rnstrukturen "struct net"), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) och deras motsvarigheter för IPv6.
  • Initialt stöd för asynkron programmering (async) har implementerats i form av modulen kasync. Till exempel kan kod för att manipulera TCP-sockets i asynkront lĂ€ge skapas: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; } }
  • Modulen net::filter för manipulering av nĂ€tverkspaketfilter har lagts till. Ett exempel rust_netfilter.rs med implementering av ett filter pĂ„ Rust har lagts till.
  • Implementeringen av en enkel mutex smutex::Mutex har lagts till, utan behov av pinning.
  • En NoWaitLock-lĂ„sning har lagts till, som aldrig leder till att vĂ€nta pĂ„ frigöring, och om en annan trĂ„d tar den, ger ett felmeddelande vid försök att erhĂ„lla lĂ„sningen istĂ€llet för att stoppen anroparen.
  • En RawSpinLock-lĂ„sning har lagts till, som motsvarar raw_spinlock_t i kĂ€rnan, tillĂ€mpad pĂ„ sektioner som inte kan befinna sig i vĂ€ntelĂ€ge.
  • Typen ARef har lagts till för referenser till objektet, dĂ€r refcounting-mekanismen tillĂ€mpas (always-refcounted).
  • I backend rustc_codegen_gcc, som möjliggör anvĂ€ndning av libgccjit-biblioteket frĂ„n GCC-projektet som kodgenerator i rustc för att stödja tillgĂ€ngliga arkitekturer och optimeringar i GCC, har möjligheten för bootstrapping av rustc implementerats. Bootstrapping innebĂ€r möjligheten att anvĂ€nda en GCC-baserad kodgenerator i rustc för att bygga sjĂ€lva rustc-kompilatorn. Dessutom har nylanseringen av GCC 12.1 inkluderat korrigeringar i libgccjit, som Ă€r nödvĂ€ndiga för korrekt drift av rustc_codegen_gcc. Förberedelser pĂ„gĂ„r för att möjliggöra installation av rustc_codegen_gcc via rustup-verktyget.
  • Det noteras framsteg i utvecklingen av GCC-frontenden gccrs med implementeringen av en Rust-kompilator baserad pĂ„ GCC. För nĂ€rvarande arbetar tvĂ„ utvecklare med gccrs i fullt arbetslĂ€ge.

Vi pÄminner om att de föreslagna förÀndringarna ger möjlighet att anvÀnda Rust som ett andra sprÄk för utveckling av drivrutiner och moduler för kÀrnan. Stödet för Rust presenteras som ett alternativ, inte aktiverat som standard och inte som en obligatorisk byggberoende för kÀrnan. AnvÀndningen av Rust för utveckling av drivrutiner kommer att möjliggöra skapandet av sÀkrare och högre kvalitetsdrivrutiner med minimala insatser, utan problem som att referera till minnesomrÄden efter att de har frigjorts, dereferera nullpekare och överskridning av buffertgrÀnser.

SÀker minneshantering sÀkerstÀlls i Rust vid kompilering genom kontroll av referenser, spÄrning av Àgande av objekt och beaktande av objektens livstid (synlighet), samt genom utvÀrdering av korrekt tillgÄng till minnet under kodens körning. Rust tillhandahÄller ocksÄ verktyg för skydd mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan anvÀndning, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster