A fost publicată versiunea 1.88 a limbajului de programare generală Rust, inițial dezvoltat de proiectul Mozilla, dar acum întreținut de organizația non-profit Rust Foundation. Limbajul se concentrează pe operarea sigură cu memoria și oferă instrumente pentru a atinge un grad ridicat de paralelism în execuția sarcinilor, fără a necesita un colector de gunoi și un runtime (runtime-ul se limitează la inițializarea de bază și gestionarea bibliotecii standard).
Metodele de gestionare a memoriei în Rust scutesc dezvoltatorul de erori în manipularea pointerilor și protejează împotriva problemelor care apar din lucrul de nivel scăzut cu memoria, cum ar fi accesarea unui spațiu de memorie după ce acesta a fost eliberat, dereferința pointerilor nuli, depășirea limitelor buffer-ului etc. Pentru distribuirea bibliotecilor, asigurarea construirii și gestionarea dependențelor, se dezvoltă managerul de pachete Cargo. Pentru găzduirea bibliotecilor, suportul este oferit prin intermediul repository-ului crates.io.
Lucrul sigur cu memoria este asigurat în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectelor, luarea în considerare a timpului de viață al obiectelor (domeniul de vizibilitate) și evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, instrumente pentru protejarea împotriva suprasaturării numerice, impune inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică conceptul de referințe și variabile imutabile (immutable) din oficiu și oferă o tipizare statică puternică pentru a minimiza erorile logice.
Noutăți principale:
- A fost adăugată suportul pentru specificarea mai multor expresii "let" în cadrul blocurilor condiționale "if" și "while", utilizând operatorul "&&" (AND logic) pentru a le combina. Expresiile "let" pot fi combinate cu expresii condiționale booleene. Variabilele declarate în expresiile let pot fi utilizate în expresiile condiționale ulterioare, precum și în blocurile "if" și "while". if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- A fost adăugat suport pentru scrierea de funcții "naked", etichetate cu atribuirea "#[unsafe(naked)]" și conținând un singur apel la "naked_asm!". Funcțiile create în acest mod nu au epilog și prolog generate de compilator, ceea ce permite dezvoltatorului să controleze complet codul de asamblare auxiliare atașat funcției („funcția naked conține doar instrucțiuni de asamblare specificate de dezvoltator și nu include gestionări speciale ale argumentelor și valorilor de retur, adăugate de compilator). Funcțiile naked sunt considerate o alternativă mai convenabilă la funcțiile definite în blocul „global_asm!”. #[unsafe(naked)] pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( "add rax, rdi, rsi", "ret" ); }
- În limbajul predicatelor, utilizat în atribuțiile de compilare condiționată „cfg” și „cfg_attr” (care permit activarea sau dezactivarea unor părți de cod în funcție de condiții specifice), a fost adăugat suport pentru litere booleene „true” și „false”, care sunt asociate cu configurațiile care sunt întotdeauna activate sau întotdeauna dezactivate. Aceste litere pot fi folosite de asemenea în macro-ul „cfg!” și în tabelele „[target]” din manifesturi și configurații pentru Cargo. Expresiile cfg(true) și cfg(false) pot fi utilizate în locul cfg(all()) și cfg(any()) pentru a exprima mai clar intențiile lor.
- În managerul de pachete Cargo este activat un sistem automat de colectare a gunoaielor pentru curățarea cache-ului din catalogul de acasă al utilizatorului. Pachetele salvate anterior în cache, împreună cu dependențele descărcate, nu erau eliminate, ceea ce ducea la o creștere constantă a consumului de spațiu pe disc. Mecanismul activ de colectare a gunoaielor va elimina automat fișierele crate descărcate din surse externe, la care nu s-a apelat mai mult de 3 luni, și fișierele crate instalate local, la care nu s-a apelat de mai mult de o lună. Curățarea cache-ului nu se activează atunci când se folosesc opțiunile „—offline” sau „—frozen” în Cargo.
- O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- mod ffi::c_str
- HashMap::extract_if
- HashSet::extract_if
- hint::select_unpredictable
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
- ::as_chunks
- ::as_rchunks
- ::as_chunks_unchecked
- ::as_chunks_mut
- ::as_rchunks_mut
- ::as_chunks_unchecked_mut
- Semnul „const” aplicat în funcții:
- NonNull::replace
- ::replace
- std::ptr::swap_nonoverlapping
- Cell::replace
- Cell::get
- Cell::get_mut
- Cell::from_mut
- Cell::as_slice_of_cells
- Nivelul de suport pentru platforma țintă i686-pc-windows-gnu a fost eliminat.
De asemenea, se pot menționa evenimente legate de Rust:
- Proiectul Munal OS dezvoltă un sistem de operare experimental, scris în Rust și bazat pe concepția de unikernel. În Munal OS nu se aplică multitasking-ul preemptiv, maparea paginilor de memorie și spațiul de adresare virtual (se folosește un aranjament de memorie pe baza UEFI). Nucleul și aplicațiile rulează într-un singur spațiu de adresare, folosind un model de securitate bazat pe izolare sandbox de tip WASM (inclusiv motorul wasmi pentru rularea aplicațiilor în format bytecode WebAssembly).
Sistemul de operare dispune de o interfață grafică și suportă controlul prin tastatură și mouse. Pentru dezvoltarea aplicațiilor grafice se folosește un toolkit propriu cu o bibliotecă de widgeturi. Pentru interacțiunea pe rețea sunt disponibile un stivă TCP și un driver pentru dispozitivul de rețea. Printre aplicațiile disponibile pentru Munal OS se numără: un browser web cu suport de bază pentru HTML și HTTPS, un editor de text și un terminal pentru executarea codului Python. Codul este deschis sub licența MIT.

- A avut loc lansarea nucleului Asterinas 0.15.2, scris în Rust și oferind un ABI compatibil cu nucleul Linux. Nucleul suportă arhitecturile x86-64 și RISC-V și implementează 206 din cele 368 de apeluri de sistem Linux. La dezvoltarea nucleului participă 45 de dezvoltatori, în principal din diverse universități chinezești. Nucleul este construit folosind arhitectura „framekernel”, în care componentele nucleului sunt plasate în același spațiu de adresare, iar securitatea este realizată la nivel de separare logică a codului sigur de codul în care pot apărea probleme de securitate. Toate apelurile de sistem, sistemele de fișiere și driverele sunt implementate la nivelul OS Services și nu pot include blocuri unsafe. Codul este distribuit sub licența MPL 2.0.
- Pentru nucleul Linux a fost pregătită utilitarul rsched, care permite analizarea statisticilor despre funcționarea programatorului de sarcini. În practică, utilitarul permite evaluarea deciziilor programatorului legate de furnizarea de resurse proceselor, precum și monitorizarea întârzierilor care apar în timpul planificării. Pentru colectarea datelor în nucleu se folosește subsistemul BPF, iar instrumentarul care funcționează în spațiul utilizatorului este scris în Rust. Autorul utilitarului este Chris Mason, creatorul și arhitectul principal al sistemului de fișiere Btrfs.
- Compania Collabora a anunțat dezvoltarea unei variante a instrumentarului Coccinelle pentru limbajul Rust. Coccinelle a fost conceput inițial pentru a automatiza căutarea și transformarea codului în limbajul C în nucleul Linux. Transformările sunt definite sub formă de reguli care amintesc de patch-uri abstracte, nelegate de o poziție specifică în cod.
- Dezvoltatorii GNOME au prezentat o bibliotecă pentru încărcarea imaginilor, glycin, scrisă în limbajul Rust și asigurând decodificarea imaginilor folosind izolația sandbox. Se suportă livrarea conținutului decodificat prin gdk::Textures și extragerea metadatelor. Se oferă legături pentru utilizarea glycin în GTK4, precum și un backend pentru integrarea glycin în biblioteca GdkPixbuf, utilizată în GNOME pentru încărcarea imaginilor. Glycin este deja utilizat în vizualizatorul de imagini Loupe, oferit implicit în GNOME. În plus, backendul pentru GdkPixbuf permite utilizarea glycin în GNOME Shell, generatoare de miniaturi și aplicații GNOME variate, fără a necesita modificări în aceste programe.
Sursa: opennet.ro

