Die Programmier-Engine Rust 1.66, ursprünglich von Mozilla entwickelt und jetzt von der unabhängigen Non-Profit-Organisation Rust Foundation betreut, wurde veröffentlicht. Die Sprache legt einen starken Fokus auf speichersichere Programmierung und bietet Werkzeuge zur Erreichung hohen Parallelismus bei der Ausführung von Aufgaben, ohne auf einen Garbage Collector und Runtime angewiesen zu sein (Runtime umfasst lediglich die grundlegende Initialisierung und die Pflege 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:
- In Aufzählungen mit ganzzahligen Repräsentationen (Attribut „#[repr(Int)]“) ist die explizite Angabe des Diskriminanten (der Variantennummer in der Aufzählung) auch dann zulässig, wenn die Aufzählung Felder enthält. #[repr(u8)] enum Foo { A(u8), # Diskriminant 0 B(i8), # Diskriminant 1 C(bool) = 42, # Diskriminant 42 }
- Die Funktion core::hint::black_box wurde hinzugefügt, die einfach den übergebenen Wert zurückgibt. Da der Compiler annimmt, dass diese Funktion eine bestimmte Aktion ausführt, kann black_box verwendet werden, um die Compiler-Optimierung von Schleifen während der Leistungstests oder beim Studium des generierten Maschinencodes zu deaktivieren (so dass der Compiler den Code nicht als unbenutzt betrachtet und löscht). Zum Beispiel lässt im folgenden Beispiel die Angabe von black_box(v.as_ptr()) den Compiler nicht glauben, dass der Vektor v nicht verwendet wird. use std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
- Der Paketmanager „cargo“ bietet den Befehl „remove“ an, um Abhängigkeiten über die Befehlszeile aus der Cargo.toml-Manifestsdatei zu entfernen.
- Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
- proc_macro::Span::source_text
- u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
- i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
- i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
- BTreeSet::{first, last, pop_first, pop_last}
- BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
- Implementierungen von Add AsFd für stdio-Sperren bei der Anwendung von WASI.
- impl TryFrom<Vec> für Box
- core::hint::black_box
- Duration::try_from_secs_{f32,f64}
- Option::unzip
- std::os::fd
- In den Vorlagen sind Bereichsangaben «..X» und «..=X» erlaubt.
- Bei der Erstellung des Frontends des Compilers rustc und des Backends LLVM werden die Optimierungsmodi LTO (Link Time Optimization) und BOLT (Binary Optimization and Layout Tool) verwendet, die die Performance des resultierenden Codes erhöhen und den Speicherverbrauch reduzieren.
- Die dritte Unterstützungsstufe für die Plattformen armv5te-none-eabi und thumbv5te-none-eabi wurde implementiert. Die dritte Stufe beinhaltet eine grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Möglichkeit zur Codierung.
- Unterstützung für die Verknüpfung mit universellen Bibliotheken von macOS wurde hinzugefügt.
Zusätzlich kann die Integration des GCC-Frontends für die Programmiersprache Rust (gccrs) in die Codebasis hervorgehoben werden. Das Frontend ist in den Branch GCC 13 integriert, dessen Veröffentlichung für Mai 2023 geplant ist. Ab GCC 13 kann das Standard-GCC-Toolset verwendet werden, um Programme in Rust zu kompilieren, ohne den Compiler rustc installieren zu müssen, der auf der LLVM-Technologie basiert. Die Implementierung von Rust in GCC 13 wird als Beta-Version betrachtet und nicht standardmäßig aktiviert.
Quelle: opennet.ru
