Veröffentlichung der Programmiersprache Rust 1.66

Die Veröffentlichung der universellen Programmiersprache Rust 1.66, 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:

  • In Aufzählungen mit Ganzzahldarstellungen (das „#[repr(Int)]“-Attribut) ist die explizite Angabe der Diskriminante (Variantennummer in der Aufzählung) zulässig, auch wenn die Aufzählung Felder enthält. #[repr(u8)] enum Foo { A(u8), # Diskriminante 0 B(i8), # Diskriminante 1 C(bool) = 42, # Diskriminante 42 }
  • Funktion core::hint::black_box hinzugefügt, die einfach den empfangenen Wert zurückgibt. Da der Compiler denkt, dass diese Funktion etwas tut, kann die black_box-Funktion verwendet werden, um Compiler-Optimierungen für Schleifen zu deaktivieren, wenn Code-Leistungstests durchgeführt oder generierter Maschinencode untersucht werden (damit der Compiler den Code nicht als ungenutzt betrachtet und entfernt). Im folgenden Beispiel verhindert black_box(v.as_ptr()) beispielsweise, dass der Compiler denkt, dass der Vektor v nicht verwendet wird. benutze 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“, mit dem Sie Abhängigkeiten vom Cargo.toml-Manifest über die Befehlszeile entfernen können.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • 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}
    • Fügen Sie AsFd-Implementierungen für stdio-Sperrtypen hinzu, wenn Sie WASI verwenden.
    • impl TryFrom > für Box<[T; N]>
    • core::hint::black_box
    • Dauer::try_from_secs_{f32,f64}
    • Option::entpacken
    • std::os::fd
  • In Vorlagen sind die Bereiche „..X“ und „..=X“ zulässig.
  • Beim Erstellen des Frontends des Rustc-Compilers und des LLVM-Backends werden die Optimierungsmodi LTO (Link Time Optimization) und BOLT (Binary Optimization and Layout Tool) verwendet, um die Leistung des resultierenden Codes zu erhöhen und den Speicherverbrauch zu reduzieren.
  • Level-5-Unterstützung für die Plattformen armv5te-none-eabi und thumbvXNUMXte-none-eabi implementiert. Die dritte Ebene beinhaltet grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Fähigkeit, den Code zu erstellen.
  • Unterstützung für die Verknüpfung mit generischen macOS-Bibliotheken hinzugefügt.

Darüber hinaus können wir die Aufnahme des Front-End-Compilers der Rust-Sprache (gccrs) in die GCC-Codebasis feststellen. Das Frontend ist im GCC 13-Zweig enthalten, der im Mai 2023 veröffentlicht wird. Ab GCC 13 kann das Standard-GCC-Toolkit zum Kompilieren von Rust-Programmen verwendet werden, ohne dass der mit LLVM-Entwicklungen erstellte Rustc-Compiler installiert werden muss. Die Rust-Implementierung in GCC 13 befindet sich im Beta-Status und ist standardmäßig nicht aktiviert.

Source: opennet.ru

Kommentar hinzufügen