Miguel Ojeda, autori i projektit Rust-for-Linux, propozoi pĂ«r shqyrtim nga zhvilluesit e bĂ«rthamĂ«s Linux publikimin e komponentĂ«ve v6 pĂ«r zhvillimin e drejtorĂ«ve tĂ« pajisjeve nĂ« gjuhĂ«n Rust. Kjo Ă«shtĂ« redaktimi i shtatĂ« i patches, duke marrĂ« parasysh versionin e parĂ«, i publikuar pa numrin e versionit. MbĂ«shtetja pĂ«r Rust konsiderohet eksperimentale, por Ă«shtĂ« pĂ«rfshirĂ« tashmĂ« nĂ« degĂ«n linux-next dhe Ă«shtĂ« mjaft e avancuar pĂ«r tĂ« filluar punĂ«n nĂ« krijimin e shtresave tĂ« abstraksionit mbi nĂ«ndegĂ«t e bĂ«rthamĂ«s, si dhe pĂ«r tĂ« shkruar drejtorĂ« dhe module. 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-it dhe zhvillimin e teknologjive pĂ«r rritjen e sigurisĂ« nĂ« internet.
NĂ« versionin e ri:
- Mjetet dhe varianti i librit alloc, i liruar nga mundësitë e gjenerimit të gjendjes "panic" në rast gabimesh, janë përditësuar në lëshimin Rust 1.60, në të cilin mbështetja për modalitetin "maybe_uninit_extra" është stabilizuar dhe aplikuar në patches për bërthamën.
- U shtua mundësia për të ekzekutuar teste nga dokumentacioni (teste që përdoren njëkohësisht si shembuj në dokumentacion), përmes transformimit gjatë kompilimit të testeve të lidhura me API-në e bërthamës në teste KUnit, të cilat ekzekutohen gjatë ngarkimit të bërthamës.
- Shtohen kërkesat, sipas të cilave testet nuk duhet të çojnë në njoftime të linters Clippy, si dhe kodi për bërthamën në gjuhën Rust.
- U propozuar një implementim fillestar i modulit "net" me funksione rrjetesh. Për kodin në gjuhën Rust ofrohet qasje në struktura rrjetesh të bërthamës, të tilla si "Namespace" (bazuar në strukturën e 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.
- U implementua 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ë vepron në mod eksion asinkron për manipulimin e TCP-socketëve: 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?; } }
- U shtua moduli net::filter për manipulimin e filtrave të paketave rrjetës. U shtua shembulli rust_netfilter.rs me implementimin e filtrit në gjuhën Rust.
- U shtua implementimi i mutex-it të thjeshtë smutex::Mutex, që nuk kërkon lidhje (pinning).
- U shtua bllokimi NoWaitLock, i cili nuk shkakton kurrë pritje për çlirimin, dhe në rast se është zënë nga një thread tjetër, jep një gabim kur tentoni të merrni bllokimin në vend që të ndaloni thirrësin.
- U shtua bllokimi RawSpinLock i barabartë me raw_spinlock_t në bërthamë, i cili përdoret për seksionet që nuk mund të jenë në një gjendje pritjeje.
- U shtua tipi ARef për referencat në objektin, të cilit i aplikohet mekanizmi i numërimit të referencave (always-refcounted).
- Në backend-in rustc_codegen_gcc, që lejon përdorimin e bibliotekës libgccjit nga projekti GCC si gjenerues kodi në rustc për të siguruar mbështetje në rustc për arkitekturën dhe optimizimet në GCC, është realizuar mundësia e bootstrapping-ut të kompajlerit rustc. Me bootstrapping kuptohet përdorimi në rustc të gjeneruesit të kodit të bazuar në GCC për ndërtimin e kompajlerit vetë rustc. Për më tepër, në daljen e fundit GCC 12.1 janë përfshirë rregullimet në libgccjit e nevojshme për funksionimin e duhur të rustc_codegen_gcc. Po përgatitet mundësia e instalimit të rustc_codegen_gcc me ndihmën e utilitarit rustup.
- Po shënohet progresi në zhvillimin e GCC-front-end-it gccrs me implementimin e kompajlerit të gjuhës Rust mbi GCC. Aktualisht, dy zhvillues janë duke punuar në gccrs në një modalitet të plotë punues.
Kujtojmë se ndryshimet e propozuara japin mundësinë për të përdorur Rust si gjuhën e dytë për zhvillimin e drejtorive dhe moduleve të bërthamës. Mbështetja për Rust paraqitet si një opsion, i cili nuk është aktiv me parazgjedhje dhe nuk çon në përfshirjen e Rust në listën e varësive të detyrueshme për ndërtimin e bërthamës. Përdorimi i Rust për zhvillimin e drejtorive do të lejojë krijimin e drejtorive të sigurta dhe më të kualitetshme me minimumin e mundimeve, duke eliminuar probleme si manipulimi me hapësirën e memories pas lirimit të saj, dereferencimi i pikave null dhe tejkalimi i kufijve të tamponit.
Trajtimi i sigurt i memories garantohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe marrëveshjes së kohëzgjatjes së objekteve (zona e dukshmërisë), si dhe përmes vlerësimit të saktësisë së qasjes në memory gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga mbushjet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pazëvendësueshëm (immutable) si standard, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.
Burimi: opennet.ru
