Die sesde weergawe van pleisters vir die Linux-kern met Rust-taalondersteuning

Miguel Ojeda, skrywer van die Rust-for-Linux-projek, het die vrystelling van v6-komponente voorgestel vir die ontwikkeling van toestelbestuurders in die Rust-taal vir oorweging deur Linux-kernontwikkelaars. Dit is die sewende uitgawe van die pleisters, met inagneming van die eerste weergawe, gepubliseer sonder 'n weergawenommer. Roesondersteuning word as eksperimenteel beskou, maar is reeds ingesluit in die linux-next-tak en is voldoende ontwikkel om te begin werk aan die skep van abstraksielae oor kernsubstelsels, sowel as die skryf van drywers en modules. Die ontwikkeling word befonds deur Google en die ISRG (Internet Security Research Group), wat die stigter van die Let's Encrypt-projek is en HTTPS en die ontwikkeling van tegnologieë bevorder om internetsekuriteit te verbeter.

In die nuwe weergawe:

  • Die gereedskapstel en 'n variant van die alloc-biblioteek, bevry van moontlike generering van 'n "paniek"-toestand wanneer foute voorkom, is opgedateer na die vrystelling van Rust 1.60, wat ondersteuning stabiliseer vir die "miskien_uninit_extra"-modus wat in kernkolle gebruik word.
  • Bygevoeg die vermoë om toetse uit die dokumentasie uit te voer (toetse wat ook as voorbeelde in die dokumentasie gebruik word), deur samestelling-tyd omskakeling van toetse gekoppel aan die kern API in KUnit toetse uitgevoer tydens kern laai.
  • Vereistes is aangeneem dat toetse nie 'n Clippy linter-waarskuwing tot gevolg moet hê nie, net soos Rust-kernkode.
  • 'n Aanvanklike implementering van die "net"-module met netwerkfunksies word voorgestel. Roeskode het toegang tot kernnetwerkstrukture soos Namespace (gebaseer op die struct net kernel struktuur), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) en hul IPv6 ekwivalente .
  • Daar is aanvanklike ondersteuning vir asinchroniese programmeringstegnieke (async), geïmplementeer in die vorm van die kasync-module. Byvoorbeeld, jy kan asynchrone kode skryf om TCP-sockets te manipuleer: async fn echo_server(stroom: TcpStream) -> Resultaat { let mut buf = [0u8; 1024]; lus { let n = stream.read(&mut buf).await?; as n == 0 { gee Ok(() terug); } stream.write_all(&buf[..n]).wag?; } }
  • Bygevoeg net :: filter module vir die manipulering van netwerk pakkie filters. Bygevoeg voorbeeld rust_netfilter.rs met 'n filter implementering in die Rust taal.
  • Bygevoeg implementering van 'n eenvoudige mutex smutex::Mutex, wat nie vaspen vereis nie.
  • Bygevoeg NoWaitLock, wat nooit vir 'n slot wag nie, en as dit deur 'n ander draad beset word, veroorsaak dat 'n fout gerapporteer word wanneer u probeer om die slot te verkry in plaas daarvan om die beller te stop.
  • Bygevoeg RawSpinLock, geïdentifiseer deur raw_spinlock_t in die kern, om van toepassing te wees op afdelings wat nie ledig kan wees nie.
  • Bygevoeg ARef tipe vir verwysings na 'n voorwerp waarop die verwysing tel meganisme toegepas word (altyd-hertel).
  • Die rustc_codegen_gcc-agtergrond, wat jou toelaat om die libgccjit-biblioteek van die GCC-projek as 'n kodegenerator in rustc te gebruik om rustc te voorsien van ondersteuning vir argitekture en optimaliserings wat in GCC beskikbaar is, het die vermoë geïmplementeer om die rustc-samesteller te selflaai. Samestellerpromosie beteken die vermoë om 'n GCC-gebaseerde kodegenerator in rustc te gebruik om die rustc-samesteller self te bou. Daarbenewens bevat die onlangse vrystelling van GCC 12.1 regstellings aan libgccjit wat nodig is vir rustc_codegen_gcc om korrek te werk. Voorbereidings is aan die gang om die vermoë te bied om rustc_codegen_gcc te installeer deur die rustup-nutsding te gebruik.
  • Daar word kennis geneem van die vordering in die ontwikkeling van die GCC-frontend gccrs met die implementering van die Rust-taalsamesteller gebaseer op GCC. Daar is tans twee voltydse ontwikkelaars wat aan gccrs werk.

Onthou dat die voorgestelde veranderings dit moontlik maak om Rust as 'n tweede taal te gebruik vir die ontwikkeling van drywers en kernmodules. Roes-ondersteuning word aangebied as 'n opsie wat nie by verstek geaktiveer is nie en lei nie tot die insluiting van Rust onder die vereiste bouafhanklikhede vir die kern nie. Deur Rust te gebruik om drywers te ontwikkel, sal jy veiliger en beter bestuurders met minimale inspanning kan skep, vry van probleme soos toegang tot 'n geheue-area nadat dit vrygestel is, die verwysing van nulwysers en bufferoorskryding.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, hou van objekeienaarskap en objekleeftyd (omvang), asook deur evaluering van die korrektheid van geheuetoegang tydens kode-uitvoering. Roes bied ook beskerming teen heelgetal-oorvloei, vereis dat veranderlikes geïnisialiseer word voor gebruik, hanteer foute beter in die standaardbiblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, en bied sterk statiese tik om logiese foute te minimaliseer.

Bron: opennet.ru

Voeg 'n opmerking