Miguel Ojeda, autori i projektit Rust-for-Linux, propozoi pĂ«r shqyrtim nga zhvilluesit e bĂ«rthamĂ«s Linux lĂ«shimin e komponentĂ«ve v6 pĂ«r zhvillimin e drejtorĂ«ve tĂ« pajisjeve nĂ« gjuhĂ«n Rust. Ky Ă«shtĂ« edicioni i shtatĂ« i patches qĂ« merr parasysh variantin e parĂ«, i botuar pa numĂ«r versioni. MbĂ«shtetja pĂ«r Rust konsiderohet eksperimentale, por tashmĂ« Ă«shtĂ« pĂ«rfshirĂ« nĂ« degĂ«n linux-next dhe Ă«shtĂ« mjaft e zhvilluar pĂ«r t'u filluar puna pĂ«r krijimin e niveleve tĂ« abstraksionit mbi nĂ«n-sistemĂ«t e bĂ«rthamĂ«s, si dhe pĂ«r shkrimin e drejtorĂ«ve dhe moduleve. Zhvillimi financohet nga kompania Google dhe organizata ISRG (Internet Security Research Group), e cila Ă«shtĂ« themeluesi i projektit Letâs Encrypt dhe ndihmon nĂ« promovimin e HTTPS dhe zhvillimin e teknologjive pĂ«r tĂ« rritur sigurinĂ« e internetit.
Në këtë version të ri:
- Instrumenti dhe varianti i bibliotekës alloc, i çliruar nga gjenerimet e mundshme të gjendjes "panic" në rast të gabimeve, janë përditësuar në lëshimin Rust 1.60, në të cilin është stabilizuar mbështetja për modin "maybe_uninit_extra", e cila përdoret në patches për bërthamën.
- Shtuar mundësia e ekzekutimit të testeve nga dokumentacioni (testet, të përdorura gjithashtu si shembuj në dokumentacion), përmes transformimit gjatë kompilimit të testeve të lidhura me API-në e bërthamës, në teste KUnit, të ekzekutuara gjatë ngarkimit të bërthamës.
- Pranohen kërkesat, sipas të cilave testet nuk duhet të çojnë në daljen e paralajmërimit të analizuesit Clippy, ashtu si edhe kodi për bërthamën në gjuhën Rust.
- Propozohet një implementim fillestar i moduli "net" me funksione rrjetesh. Për kodin në gjuhën Rust ofrohet akses në struktura rrjeti të bërthamës, si "Namespace" (në bazë të strukturës së bërthamës "struct net"), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) dhe ekuivalentët e tyre për IPv6.
- Implementohet mbështetje fillestare për metodat e programimit asinkron (async), e realizuar në formën e modulit kasync. Për shembull, mund të krijoni kod që funksionon në mënyrë asinkrone për manipulimin me TCP-sockets: 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?; } }
- Shtuar moduli net::filter për manipulimin e filtreve të paketave rrjetike. Shtuar një shembull rust_netfilter.rs me implementimin e filtrit në gjuhën Rust.
- Shtuar implementimi i një mutexi të thjeshtë smutex::Mutex, që nuk kërkon lidhje (pinning).
- Shtuar një bllokim NoWaitLock, i cili kurrë nuk çon në pritje për çlirimin, dhe në rast se merret nga një thread tjetër çon në daljen e një gabimi kur përpiqet të marrë bllokimin në vend të ndaljes së thirrësit.
- Shtuar një bllokim RawSpinLock i identifikuar me raw_spinlock_t në bërthamë, e cila aplikohet në seksionet që nuk mund të jenë në gjendje pritjeje.
- Shtuar tipin ARef për referencat në objektin, duke aplikuar mekanizmin e numërimit të referencave (always-refcounted).
- Në backend-in rustc_codegen_gcc, që lejon përdorimin e bibliotekës libgccjit nga projekti GCC si një gjenerator kodi në rustc për të siguruar mbështetje në rustc për arkitekturën dhe optimizimet e disponueshme në GCC, është realizuar mundësia e bootstrapping-ut të kompilerit rustc. Bootstrapping e kompilerit nënkupton mundësinë e përdorimit në rustc të gjeneratorit të kodit të bazuar në GCC për ndërtimin e vetë kompilerit rustc. Për më tepër, në lëshimin e fundit të GCC 12.1 janë përfshirë rregullimet në libgccjit, të nevojshme për funksionimin e duhur të rustc_codegen_gcc. Po përgatitet mundësia e instalimit të rustc_codegen_gcc përmes utilitetit rustup.
- Raportohet përparimi në zhvillimin e front-end-it GCC gccrs me implementimin e kompilerit të gjuhës Rust të bazuar në GCC. Aktualisht, mbi gccrs janë duke punuar dy zhvillues në modin e plotë të punës.
Kujtojme se ndryshimet e propozuara ofrojnë mundësinë e përdorimit të Rust si gjuhë të dytë për zhvillimin e drejtuesve dhe moduleve të bërthamës. Mbështetja për Rust paraqitet si një opsion, i cili nuk aktivizohet nga parazgjedhja dhe nuk çon në përfshirjen e Rust në numrin e varësive të detyrueshme për ndërtimin e bërthamës. Përdorimi i Rust për zhvillimin e drejtuesve do të lejojë krijimin e drejtuesve të sigurt dhe më të kualitetshëm me përpjekje minimale, duke eliminuar probleme si përdorimi i hapësirës së memories pas lirimit të saj, dereferencimi i treguesve null dhe tejkalimi i kufijve të tamponit.
Funksionaliteti i sigurt i punës me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe llogaritjes së kohëzgjatjes së jetës së objekteve (fusha e dukshmërisë), si dhe përmes vlerësimit të saktësisë së aksesit në memorie gjatë ekzekutimit të kodit. Rust ofron gjithashtu mjete për mbrojtjen nga tejkalimet e numrave të tërë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron një tipizim statik të fortë për të minimizuar gabimet logjike.
Burimi: opennet.ru
