Die Veröffentlichung der universellen Programmiersprache Rust 1.63, die vom Mozilla-Projekt gegrĂŒndet wurde, jetzt aber unter der Schirmherrschaft der unabhĂ€ngigen gemeinnĂŒtzigen Organisation Rust Foundation entwickelt wird, wurde veröffentlicht. Die Sprache konzentriert sich auf die Speichersicherheit und bietet die Möglichkeit, eine hohe JobparallelitĂ€t zu erreichen und gleichzeitig die Verwendung eines Garbage Collectors und einer Laufzeit zu vermeiden (die Laufzeit beschrĂ€nkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek).
Die Speicherverarbeitungsmethoden von Rust bewahren den Entwickler vor Fehlern bei der Manipulation von Zeigern und schĂŒtzen vor Problemen, die durch die Speicherverarbeitung auf niedriger Ebene entstehen, wie z. B. Zugriff auf einen Speicherbereich, nachdem dieser freigegeben wurde, Dereferenzierung von Nullzeigern, PufferĂŒberlĂ€ufe usw. Um Bibliotheken zu verteilen, Builds bereitzustellen und AbhĂ€ngigkeiten zu verwalten, entwickelt das Projekt den Cargo-Paketmanager. Das crates.io-Repository wird zum Hosten von Bibliotheken unterstĂŒtzt.
Die Speichersicherheit wird in Rust zur Kompilierungszeit durch ReferenzprĂŒfung, Verfolgung des Objektbesitzes, Verfolgung der Objektlebensdauer (UmfĂ€nge) und Beurteilung der Korrektheit des Speicherzugriffs wĂ€hrend der CodeausfĂŒhrung gewĂ€hrleistet. Rust bietet auĂerdem Schutz vor GanzzahlĂŒberlĂ€ufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet standardmĂ€Ăig das Konzept unverĂ€nderlicher Referenzen und Variablen an und bietet starke statische Typisierung, um logische Fehler zu minimieren.
Wichtigste Neuerungen:
- Die std::thread::scope-API wurde hinzugefĂŒgt, mit der Sie bereichsbezogene Threads erstellen können. Im Gegensatz zu zuvor verfĂŒgbaren Threads ermöglicht die neue std::thread::scope-API die Ăbergabe nicht statischer Daten, wĂ€hrend Threads, die mit der klassischen std::thread::spawn-API erstellt wurden, alle ĂŒbergebenen Argumente besitzen mussten und nicht empfangen konnten geliehene Variablen. Die std::thread::scope-API stellt sicher, dass alle erzeugten Threads beendet werden, bevor Daten zurĂŒckgegeben werden, und bietet so angemessene Sicherheit fĂŒr den Ausleihmechanismus.
- Es wurden neue Wrapper-Typen fĂŒr Dateideskriptoren vorgeschlagen â BorrowedFd und OwnedFd, die Ausleihen und Besitz ermöglichen. Typen sind mit â#[repr(transparent)]â gekennzeichnet, sodass sie direkt und eigentumsbewusst in externen C-Bindungen verwendet werden können.
- Bietet die Möglichkeit, Condvar::new, Mutex::new und RwLock::new im Kontext von Konstanten aufzurufen, um globale statische Mutex-, RwLock- und Condvar-Werte zu erstellen, ohne lazy_static-Pakete zu verwenden.
- FĂŒr Funktionen wie fn foo (Wert: T, f: impl Copy) Syntax wie âfoo::â ist zulĂ€ssig (32, 3)â, mit expliziter Angabe der Art des Generikums.
- Der Ăbergang zur Verwendung der NLL-Technik (Non-Lexical Lifetimes) zur Identifizierung von Problemen mit entlehnten Variablen ist abgeschlossen. NLL berĂŒcksichtigt auf der Ebene eine Reihe von Zeigern im AusfĂŒhrungsflussdiagramm, was es ermöglicht, die QualitĂ€t der PrĂŒfung auf Leihvariablen (Borrow Checker) zu erhöhen und die AusfĂŒhrung einiger Arten von korrektem Code zu ermöglichen, die Verwendung von was zuvor zu einem Fehler gefĂŒhrt hat. Die UnterstĂŒtzung fĂŒr den alten Mechanismus, der die lebenslange Bindung auf lexikalischer Ebene verwendete, wurde jetzt vollstĂ€ndig aus rustc entfernt und die Verwendung der neuen NLL wurde durchgehend implementiert.
- Ein neuer Teil der API wurde in die Kategorie âstabilâ verschoben, einschlieĂlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
- array::from_fn
- Box::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- Pfad::try_exists
- Ref::filter_map
- RefMut::filter_map
- NonNull::<[T]>::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
Source: opennet.ru
