De sechsde ferzje fan patches foar de Linux-kernel mei stipe foar de Rust-taal

Miguel Ojeda, de skriuwer fan it Rust-for-Linux-projekt, stelde de frijlitting fan v6-komponinten foar foar it ûntwikkeljen fan apparaatbestjoerders yn 'e Rust-taal foar konsideraasje troch Linux kernel-ûntwikkelders. Dit is de sânde edysje fan de patches, rekken hâldend mei de earste ferzje, publisearre sûnder ferzjenûmer. Rust-stipe wurdt as eksperiminteel beskôge, mar is al opnommen yn 'e linux-next branch en is genôch ûntwikkele om te begjinnen mei it meitsjen fan abstraksjelagen oer kernel-subsystemen, lykas it skriuwen fan bestjoerders en modules. De ûntwikkeling wurdt finansierd troch Google en de ISRG (Internet Security Research Group), dy't de oprjochter is fan it projekt Let's Encrypt en befoarderet HTTPS en de ûntwikkeling fan technologyen om ynternetfeiligens te ferbetterjen.

Yn de nije ferzje:

  • De toolkit en in fariant fan 'e alloc-bibleteek, befrijd fan mooglike generaasje fan in "panyk" steat as flaters foarkomme, binne bywurke nei de frijlitting fan Rust 1.60, dy't stipe stabilisearret foar de "miskien_uninit_extra" modus brûkt yn kernel patches.
  • De mooglikheid tafoege om tests út te fieren fan 'e dokumintaasje (tests dy't ek brûkt wurde as foarbylden yn' e dokumintaasje), troch kompilaasje-tiid-konverzje fan testen ferbûn oan 'e kernel API yn KUnit-tests útfierd tidens it laden fan 'e kernel.
  • Easken binne oannommen dat testen net moatte resultearje yn in Clippy linter warskôging, krekt as Rust kernel koade.
  • In earste ymplemintaasje fan 'e "net" module mei netwurkfunksjes wurdt foarsteld. Rust koade hat tagong ta kernel netwurk struktueren lykas Namespace (basearre op de struct net kernel struktuer), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) en harren IPv6 ekwivalinten .
  • D'r is inisjele stipe foar asynchrone programmearringstechniken (async), útfierd yn 'e foarm fan' e kasync-module. Jo kinne bygelyks asynchrone koade skriuwe om TCP-sockets te manipulearjen: async fn echo_server (stream: TcpStream) -> Resultaat {let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; as n == 0 { werom Ok(()); } stream.write_all(&buf[..n]).await?; } }
  • Added net :: filtermodule foar it manipulearjen fan netwurkpakketfilters. Tafoege foarbyld rust_netfilter.rs mei in filter ymplemintaasje yn de Rust taal.
  • Tafoege ymplemintaasje fan in ienfâldige mutex smutex :: Mutex, dat net nedich pinning.
  • NoWaitLock tafoege, dy't nea wachtet op in slot, en as beset troch in oare thread, feroarsake in flater dy't wurdt rapportearre by it besykjen om it slot te krijen ynstee fan de beller te stopjen.
  • RawSpinLock tafoege, identifisearre troch raw_spinlock_t yn 'e kearn, om oan te passen op seksjes dy't net idle kinne.
  • Added ARef type foar ferwizings nei in foarwerp dêr't de referinsje tellen meganisme wurdt tapast (altyd-refcounted).
  • De rustc_codegen_gcc-backend, wêrmei jo de libgccjit-bibleteek fan it GCC-projekt kinne brûke as koadegenerator yn rustc om rustc te leverjen mei stipe foar arsjitektuer en optimisaasjes beskikber yn GCC, hat de mooglikheid ymplementearre om de rustc-kompiler te bootstrapping. Kompilatorpromoasje betsjut de mooglikheid om in GCC-basearre koadegenerator te brûken yn rustc om de rustc-kompiler sels te bouwen. Derneist omfettet de resinte útjefte fan GCC 12.1 fixes foar libgccjit nedich foar rustc_codegen_gcc om goed te wurkjen. Tariedingen binne oan 'e gong om de mooglikheid te jaan om rustc_codegen_gcc te ynstallearjen mei it rustup-hulpprogramma.
  • De foarútgong yn 'e ûntwikkeling fan' e GCC frontend gccrs mei de ymplemintaasje fan 'e Rust-taalkompiler basearre op GCC wurdt opmurken. D'r wurkje op it stuit twa folsleine ûntwikkelders oan gccrs.

Tink derom dat de foarstelde wizigingen it mooglik meitsje om Rust as twadde taal te brûken foar it ûntwikkeljen fan bestjoerders en kernelmodules. Rust-stipe wurdt presintearre as in opsje dy't net standert ynskeakele is en net resultearret yn Rust wurdt opnommen as in fereaske build-ôfhinklikens foar de kernel. Troch Rust te brûken foar sjauffeurûntwikkeling kinne jo feiliger en bettere sjauffeurs meitsje mei minimale ynspanning, frij fan problemen lykas ûnthâld tagong nei it befrijen, nul oanwizer dereferences, en buffer oerrin.

Unthâld-feilige ôfhanneling wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom en foarwerp libben (omfang), likegoed as troch evaluaasje fan 'e korrektheid fan ûnthâld tagong ûnder koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Boarne: opennet.ru

Add a comment