Lansarea Rust 1.89. Aproximativ 8% din pachetele src în Debian Sid depind de Rust

A fost publicat release-ul limbajului de programare Rust 1.89, dezvoltat inițial de Mozilla, dar acum având sprijinul organizației independente non-profit Rust Foundation. Limbajul se concentrează pe managementul sigur al memoriei și oferă instrumente pentru atingerea unui nivel ridicat de paralelism în execuția sarcinilor, fără a necesita un colector de gunoi și un runtime (care este redus la inițializarea de bază și întreținerea 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 oferită posibilitatea utilizării simbolului „_” ca argument al parametrilor generici cu semnul „const” pentru deducerea valorilor acestor parametri pe baza contextului înconjurător. pub fn all_false<const LEN: usize>() -> [bool; LEN] { [false; _] }
  • A fost adăugat un nou avertisment lint „mismatched_lifetime_syntaxes” pentru a rezolva problema unei definiri neclare a duratei de viață în semnăturile funcțiilor atunci când se folosește mecanismul „lifetime elision” (care determină automat durata de viață a referințelor, permitându-le să fie utilizate fără a le specifica manual). Avertismentul efectuează verificarea faptului că parametrii de intrare și ieșire ai funcției aparțin aceleași grupe de tipuri. Grupurile sunt formate pe baza suportului pentru definirea explicită a duratei de viață și a posibilității deducerii automate a duratei de viață de către compilator (de exemplu, în tipurile „&’a T” și „ContainsLifetime<‘a>” poate fi prezentă explicit durata de viață, dar compilatorul nu poate determina automat durata de viață; în schimb, în tipurile „&T”, „&’_ T” și „ContainsLifetime<‘_>” este permis atât atribuirea explicită, cât și deducerea automată).
  • În atributul „target_feature” pentru sistemele x86 a fost implementată funcționalitatea de a verifica suportul pentru seturi extinse de instrucțiuni sha512, sm3, sm4, kl și widekl, precum și pentru funcții individuale avx512. #[target_feature(enable = „avx512bw”)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
  • Începerea executării doctest (teste încorporate în documentație) nu este asigurată doar pentru platforma țintă curentă, ci și pentru alte platforme specificate la lansarea managerului de pachete „cargo” („cargo test —doc —target other_target”).
  • Pentru funcțiile ‘extern „C”‘, la construirea pentru platforma țintă „wasm32-unknown-unknown”, a fost implementat ABI standard C pentru WebAssembly.
  • Cu unele rezerve privind compatibilitatea tipurilor, este permisă utilizarea tipurilor i128 și u128 în funcțiile externe C (extern „C”), pentru care anterior a fost afișat un avertisment lint „improper_ctypes_definitions”.
  • O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
    • Multe funcții încorporate în compilator (Intrinsics) pentru procesoarele x86, inclusiv funcții pentru AVX512, SHA512, SM3 și SM4.
    • NonZero<char>
    • File::lock
    • File::lock_shared
    • File::try_lock
    • File::try_lock_shared
    • File::unlock
    • NonNull::from_ref
    • NonNull::from_mut
    • NonNull::without_provenance
    • NonNull::with_exposed_provenance
    • NonNull::expose_provenance
    • OsString::leak
    • PathBuf::leak
    • Result::flatten
    • std::os::linux::net::TcpStreamExt::quickack
    • std::os::linux::net::TcpStreamExt::set_quickack

    Semnul „const” aplicat în funcții:

    • <[T; N]>::as_mut_slice
    • <[u8]>::eq_ignore_ascii_case
    • str::eq_ignore_ascii_case
  • A început procesul de tranziție a platformei țintă „x86_64-apple-darwin” de la primul nivel de suport la al doilea (Apple intenționează să oprească suportul pentru arhitectura x86_64). Primul nivel de suport implică crearea de build-uri binare, efectuarea de teste riguroase și oferirea celei mai mari garanții de suport pentru platformă — fiecare modificare în compilator este verificată prin executarea întregului set de teste. Al doilea nivel de suport implică garanția construierii, dar fără garanții în ceea ce privește trecerea testului.
  • A fost implementat al treilea nivel de suport pentru platformele „loongarch32-unknown-none” și „loongarch32-unknown-none-softfloat”. Al treilea nivel implică suport de bază, dar fără teste automatizate, publicarea de build-uri oficiale și verificarea posibilității de construire a codului.

De asemenea, pot fi menționate evenimente și proiecte legate de Rust:

  • Raportul privind starea pachetelor în limbajul Rust pe Debian a fost publicat. Se observă că în ramura Debian Unstable (Sid), aproximativ 8% din pachetele src din depozitul main au dependențe de construcție legate de cel puțin un pachet „librust-*”. În Debian 12, astfel de pachete reprezentau 4,5%. De asemenea, s-a observat că mai mult de 3 mii de pachete includ cod în limbajul Rust, grupat în pachete librust-..-dev, iar 150 de pachete src furnizează fișiere executabile compilate sau biblioteci Rust.

    Printre pachetele de interes pentru Debian se numără sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d și fish. Suportul opțional pentru Rust a fost implementat în APT, QEMU (virtiofsd), nucleul Linux și Mesa, iar așteptările sunt ca acesta să fie disponibil și în LibreOffice. Un instrumentar debcargo a fost realizat pentru a transforma crate-pachete în pachete src Debian.

  • A fost prezentat proiectul tmux-rs, un clon al multiplexorului de terminal tmux (manager de feronerie), rescris din C în Rust.
  • Dezvoltatorul driverului Tyr de la compania Collabora a publicat un articol despre dispozitivele care funcționează la nivel de nucleu pentru driverele GPU și principiile dezvoltării acestor drivere în limbajul Rust.
  • A fost demonstrată o aplicație universală în limbajul Rust, capabilă să ruleze atât pe CPU, cât și pe diverse platforme GPU: CUDA pentru NVIDIA, SPIR-V pentru GPU-uri cu suport Vulkan, Metal pentru Apple, DirectX 12 pentru Windows, WebGPU pentru browsere.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster