Lansare Rust 1.93. Proiecte Rex, Fjall 3 și Arti 1.9.0

A fost lansată versiunea 1.93 a limbajului de programare Rust, inițial dezvoltat de proiectul Mozilla, dar acum dezvoltat sub egida unei organizații independente non-profit, Rust Foundation. Limbajul se concentrează pe gestionarea sigură a memoriei și oferă instrumente pentru atingerea unui înalt grad de paralelism al sarcinilor, fără a necesita un colector de gunoi și runtime (runtime-ul se limitează la inițializarea de bază și la suportul 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:

  • Biblioteca standard C integrată în Rust, Musl, utilizată pentru legătura statică cu platformele țintă „*-linux-musl” (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl etc.) pe sisteme fără Musl, a fost actualizată la versiunea 1.2.5. De asemenea, versiunea minim suportată a Musl pentru legătura dinamică a fost ridicată la release-ul 1.2.5. Precedent, Rust a utilizat versiunea Musl 1.2.3, care avea probleme în implementarea rezolvatorului DNS. În versiunea Musl 1.2.4, rezolvatorul DNS a fost îmbunătățit pentru a permite trimiterea unei solicitări prin TCP în caz de eșec al apelului prin UDP, rezolvând problemele cu cererile de înregistrări DNS mari și asigurând compatibilitatea cu serverele DNS recursive care nu suportă returnarea unei părți din rezultat în răspunsuri UDP trunchiate. În versiunea Musl 1.2.5, rezolvatorul DNS a implementat procesarea răspunsurilor cu secvențe lungi de CNAME și a rezolvat problema prin care unele răspunsuri mari transmise prin TCP erau eliminate.
  • Biblioteca standard a fost refăcută pentru a rezolva problemele de reentrabilitate în utilizarea alocatoarelor globale de memorie scrise în Rust, a macro-ului std::thread_local! și a funcției std::thread::current, care provocau recursie infinită. Pentru a preveni situațiile în care std::thread_local! și std::thread::current apelau același alocator în încercarea de a aloca memorie, acum se aplică direct mecanismul de alocare a memoriei al sistemului.
  • În interiorul blocurilor „asm!” cu cod asamblor, este permisă utilizarea atributelor „cfg”, ceea ce, de exemplu, permite gestionarea activării seturilor extinse de instrucțiuni CPU în contextul unor expresii individuale din cadrul blocului asm (anterior, atributele „cfg” puteau fi specificate doar pentru întregul bloc asm). asm!( // sau global_asm! sau naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // ... #[cfg(target_feature = "sse2")] a = const 123, // folosit doar pe sse2 );
  • O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
    • <[MaybeUninit]>::assume_init_drop
    • <[MaybeUninit]>::assume_init_ref
    • <[MaybeUninit]>::assume_init_mut
    • <[MaybeUninit]>::write_copy_of_slice
    • <[MaybeUninit]>::write_clone_of_slice
    • String::into_raw_parts
    • Vec::into_raw_parts
    • ::unchecked_neg
    • ::unchecked_shl
    • ::unchecked_shr
    • ::unchecked_shl
    • ::unchecked_shr
    • ::as_array
    • ::as_array_mut
    • ::as_array
    • ::as_mut_array
    • VecDeque::pop_front_if
    • VecDeque::pop_back_if
    • Duration::from_nanos_u128
    • char::MAX_LEN_UTF8
    • char::MAX_LEN_UTF16
    • std::fmt::from_fn
    • std::fmt::FromFn
  • Platforma țintă „riscv64a23-unknown-linux-gnu” a fost actualizată la un nivel de suport mai înalt, care presupune o garanție de compilare, dar fără garanții în cazul trecerii testului de suită.

De asemenea, merită menționate câteva proiecte conexe cu Rust:

  • Pentru nucleul Linux este dezvoltat cadrul Rex, care permite crearea de module pentru nucleul Linux în limbajul Rust, ce pot fi utilizate pentru a extinde funcționalitatea nucleului în loc de eBPF. Rex oferă aceleași garanții de siguranță precum eBPF, dar folosește pentru izolare și securitate capabilitățile limbajului Rust și un runtime ușor. Pentru aceste programe nu se aplică verificatorul, iar programele sunt compilate în cod nativ de către compilatorul Rust.

    În programele Rex este permisă utilizarea unui subset al limbajului Rust, care oferă garanții de siguranță. În forma sa actuală, sunt susținute 5 tipuri de programe eBPF: kprobe, perf_event, tracepoint, xdp și tc. Există posibilitatea apelării funcțiilor auxiliare eBPF, interacționarea cu structurile map eBPF, gestionarea resurselor nucleului, tratarea excepțiilor și utilizarea de wrapper-e și abstracții asupra structurilor nucleului.

  • Este disponibilă lansarea Fjall 3, un stocare încorporată scrisă în Rust care lucrează cu date în format cheie-valoare. Stocarea datelor se face sub formă de log utilizând arborele LSM (Log-Structured-Merge), similar cu RocksDB, în care modificările sunt înregistrate prin adăugarea de date la sfârșitul fișierului. Pentru accesul la baza de date se oferă un API de stil BTreeMap. Sunt suportate funcții precum spații de nume, căutare directă și inversă pe intervale, compresie încorporată, tranzacții serializabile, stocarea separată a cheilor și valorilor foarte mari asociate, întreținerea automată în fundal a bazei de date. Codul este deschis sub licența Apache 2.0.
  • Proiectul Tor a publicat versiunea Arti 1.9.0, o implementare a instrumentarului Tor, scrisă în limbajul Rust. Când codul Arti va atinge un nivel capabil să înlocuiească complet varianta C, dezvoltatorii Tor intenționează să acorde Arti statutul de implementare principală a Tor și să înceteze treptat suportul pentru implementarea în C. În noua versiune, a fost continuată implementarea funcționalității pentru relee și servere direcții (Directory Authority), a fost îmbunătățită suportul pentru lucrul cu porturi alocate dinamic (proxy.socks_listen = „auto”), a fost adăugat un API experimental pentru gestionarea cheilor pentru serviciile onion.

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