Die Version 1.91 der Programmiersprache Rust wurde veröffentlicht. Ursprünglich von Mozilla entwickelt, wird sie heute von der unabhängigen, gemeinnützigen Organisation Rust Foundation weiterentwickelt. Rust legt den Fokus auf sichere Speicherverwendung und bietet Mittel zur Erhöhung des hohen Parallelismus bei der Ausführung von Aufgaben, ohne dabei einen Garbage Collector oder umfassende Laufzeitumgebungen zu benötigen (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und die Unterstützung der Standardbibliothek).
Die Speicherverwaltungsmethoden in Rust befreien Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch die Programmierung auf niedriger Ebene entstehen, wie z.B. den Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Zur Verteilung von Bibliotheken, zur Gewährleistung des Builds und zum Management von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.
Die sichere Handhabung von Speicher in Rust wird während der Kompilierung durch die Überprüfung von Referenzen, das Verfolgen des Besitztums von Objekten, das Management der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit sichergestellt. Rust bietet außerdem Mechanismen zum Schutz vor ganzzahligen Überläufen, erfordert die verpflichtende Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek effektiver, implementiert das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.
Hauptneuheiten:
- Die Unterstützung für 64-Bit ARM-Systeme mit Windows wurde verbessert. Die Zielplattform „aarch64-pc-windows-msvc“ wurde von der zweiten auf die erste Unterstützungsstufe angehoben. Für die Architekturen aarch64-pc-windows-gnullvm und x86_64-pc-windows-gnullvm wurde die zweite Unterstützungsstufe sichergestellt. Die erste Unterstützungsstufe umfasst die Erstellung von Binärbauten, umfassende Tests und die höchste Unterstützungsgewährleistung für die Plattform – jede Änderung im Compiler wird durch das Ausführen der vollständigen Testreihe überprüft. Die zweite Unterstützungsstufe beinhaltet die Erstellung von Binärbauten und die Gewährleistung der Bauten, jedoch ohne die Garantie, den Testlauf zu bestehen. Die dritte Stufe umfasst die grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Möglichkeit, den Code zu erstellen.
- Das lint-Warnsignal „dangling_pointers_from_locals“ wurde hinzugefügt, um das Zurückgeben von Funktionen mit hängenden Raw-Zeigern (dangling raw pointer) zu erkennen, die auf Daten verweisen, die in lokalen Variablen gespeichert sind, die in der aufgerufenen Funktion definiert wurden. Solche Variablen werden nach dem Abschluss der Funktion entfernt, und die Raw-Zeiger auf die mit diesen Variablen verbundenen Daten werden hängend, das heißt, sie verweisen auf einen freigegebenen Speicher. Ein späteres Dereferenzieren eines solchen Zeigers führt zu unbestimmtem Verhalten. fn f() -> *const u8 { let x = 0; &x // Warnung: Ein hängender Zeiger wird erzeugt, da die lokale Variable „x“ entfernt wird }
- Das lint-Warnsignal „integer_to_ptr_transmutes“ wurde hinzugefügt, um über die Umwandlung von Ganzzahlen in Zeiger mit der Funktion std::mem::transmute zu informieren.
- Im Paketmanager Cargo wurde die Unterstützung für den Parameter „build.build-dir“ stabilisiert, der das Verzeichnis bestimmt, in dem temporäre Build-Artefakte gespeichert werden, die von Cargo und rustc während des Build-Prozesses erstellt werden.
- Für ABI sysv64, win64, efiapi und aapcs wurde die Unterstützung für die Deklaration von Funktionen mit einer variablen Anzahl von Argumenten im C-Stil stabilisiert.
- Die Unterstützung für Inline-Assembler für die Architektur LoongArch32 wurde stabilisiert.
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- 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}>
- Das Kennzeichen „const“ wird in Funktionen angewendet:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Der Compiler wurde auf den LLVM 21-Zweig aktualisiert.
Quelle: opennet.ru
