A fost publicat release-ul limbajului de programare Rust 1.91, inițial dezvoltat de Mozilla, dar acum în dezvoltare sub egida organizației non-profit Rust Foundation. Limbajul este axat pe gestionarea sigură a memoriei și oferă instrumente pentru atingerea unui grad ridicat de paralelism în execuția sarcinilor, fără a utiliza un colector de gunoi și runtime (runtime-ul se rezumă la inițializarea de bază și 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:
- A fost îmbunătățită suportul pentru sisteme ARM de 64 de biți cu sistemul de operare Windows. Platforma țintă „aarch64-pc-windows-msvc” a fost mutată de la nivelul doi la nivelul unu de suport. A fost asigurat nivelul doi de suport pentru arhitecturile aarch64-pc-windows-gnullvm și x86_64-pc-windows-gnullvm. Nivelul unu de suport implică generarea de binare, efectuarea unor teste riguroase și oferirea celei mai mari garanții de suport pentru platformă — fiecare modificare în compilator este verificată prin execuția unui set complet de teste. Nivelul doi de suport include generarea de binare și garanția generării, dar nu garantează trecerea setului de teste. Nivelul trei acoperă suportul de bază, dar fără testare automatizată, publicarea de binare oficiale și verificarea posibilității de a compila codul.
- A fost adăugată o avertizare lint „dangling_pointers_from_locals” pentru identificarea returnării de funcții a raw-pointernelor suspendate (dangling raw pointer) care indică date stocate în variabile locale definite în funcția apelată. Astfel de variabile sunt eliminate după terminarea funcției, iar raw-pointerele care indică datele asociate acestor variabile devin suspendate, adică indică spre memorie eliberată. Dereferențierea ulterioară a unui astfel de pointer duce la un comportament nedefinit. fn f() -> *const u8 { let x = 0; &x // avertisment: un pointer suspendat va fi generat deoarece variabila locală „x” va fi eliminată }
- A fost adăugată o avertizare lint „integer_to_ptr_transmutes”, care informează despre conversia numerelor întregi în pointere folosind funcția std::mem::transmute.
- În managerul de pachete Cargo a fost stabilizat suportul pentru parametrul „build.build-dir”, care specifică directorul pentru stocarea artefactelor temporare de construcție generate de cargo și rustc în timpul procesului de construcție.
- Pentru ABI sysv64, win64, efiapi și aapcs, a fost stabilizată suportul pentru declarația funcțiilor cu un număr variabil de argumente în stil C.
- A fost stabilizată suportul pentru assembler inline pentru arhitectura LoongArch32.
- O nouă porțiune de API a fost transformată în stabilitate, inclusiv metode și implementări ale tiparelor stabilize.
- Path::file_prefix
- AtomicPtr::fetch_ptr_add
- AtomicPtr::fetch_ptr_sub
- AtomicPtr::fetch_byte_add
- AtomicPtr::fetch_byte_sub
- AtomicPtr::fetch_or
- AtomicPtr::fetch_and
- AtomicPtr::fetch_xor
- {integer}::strict_add
- {integer}::strict_sub
- {integer}::strict_mul
- {integer}::strict_div
- {integer}::strict_div_euclid
- {integer}::strict_rem
- {integer}::strict_rem_euclid
- {integer}::strict_neg
- {integer}::strict_shl
- {integer}::strict_shr
- {integer}::strict_pow
- i{N}::strict_add_unsigned
- i{N}::strict_sub_unsigned
- i{N}::strict_abs
- u{N}::strict_add_signed
- u{N}::strict_sub_signed
- PanicHookInfo::payload_as_str
- core::iter::chain
- u{N}::checked_signed_diff
- core::array::repeat
- PathBuf::add_extension
- PathBuf::with_added_extension
- Duration::from_mins
- Duration::from_hours
- impl PartialEq<str> for PathBuf
- impl PartialEq<String> for PathBuf
- impl PartialEq<str> for Path
- impl PartialEq<String> for Path
- impl PartialEq<PathBuf> for String
- impl PartialEq<Path> for String
- impl PartialEq<PathBuf> for str
- impl PartialEq<Path> for str
- Ipv4Addr::from_octets
- Ipv6Addr::from_octets
- Ipv6Addr::from_segments
- impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
- impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
- impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
- Cell::as_array_of_cells
- u{N}::carrying_add
- u{N}::borrowing_sub
- u{N}::carrying_mul
- u{N}::carrying_mul_add
- BTreeMap::extract_if
- BTreeSet::extract_if
- impl Debug for windows::ffi::EncodeWide<‘_>
- str::ceil_char_boundary
- str::floor_char_boundary
- impl Sum for Saturating<u{N}>
- impl Sum<&Self> for Saturating<u{N}>
- impl Product for Saturating<u{N}>
- impl Product<&Self> for Saturating<u{N}>
- Semnul „const” aplicat în funcții:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Compilatorul a fost actualizat la ramura LLVM 21.
Sursa: opennet.ro
