Veröffentlichung der Programmiersprache Rust 1.73

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

  • Das Format der vom standardmäßigen Programmabsturz-Handler (Panik) ausgegebenen Meldungen wurde neu gestaltet. Der im „Panic!“-Makro angegebene Text wird jetzt in einer separaten Zeile ohne Anführungszeichen angezeigt, wodurch die Nachricht einfacher zu lesen ist und Verwirrung vermieden wird, wenn verschachtelte Anführungszeichen vorhanden oder über mehrere Zeilen verteilt sind. fn main() { let file = "ferris.txt"; Panik!("Oh nein! {Datei:?} nicht gefunden!"); } Es gab einen Thread „main“, der wegen „Oh nein!“ in Panik geriet. „ferris.txt“ nicht gefunden!‘, src/main.rs:3:5 Thread ‚main‘ geriet in Panik bei src/main.rs:3:5: oh nein! „ferris.txt“ nicht gefunden!

    Auch die Ausgabe der Meldungen, die beim Auslösen der Makros „assert_eq“ und „assert_ne“ angezeigt werden, wurde überarbeitet. fn main() { Assert_eq!("🦀", "🐟", "Ferris ist kein Fisch"); } Es gab einen Thread „main“, der in Panik geriet wegen „Assertion failed: `(left == right)` left: `"🦀"`, right: `"🐟"`: ferris is not a fish', src/main.rs: 2 :5 Thread „main“ geriet in Panik bei src/main.rs:2:5: Behauptung „links == rechts“ fehlgeschlagen: Ferris ist kein Fisch links: „🦀“ rechts: „🐟“

  • Gemäß RFC 3184 wurde die Möglichkeit hinzugefügt, Thread-lokale (thread_local) LocalKey-Speicherschlüssel direkt zu manipulieren > und LocalKey > durch die Verwendung der Methoden get(), set(), take() und replace() anstelle der Verwendung eines „with(|inner| ...)“-Abschlusses, wodurch kein zusätzlicher Initialisierungscode für die Standardeinstellung erforderlich ist Werte, die für neue Threads angegeben werden, wenn das Makro „thread_local!“ verwendet wird. thread_local! { static DINGE: Zelle > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // wurde THINGS.set(vec![3, 1, 2]); // ... // was let v = THINGS.with(|i| i.take()); // wurde let v: Vec = DINGE.take(); }
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • Vorzeichenloser {integer}::div_ceil
    • Vorzeichenloser {integer}::next_multiple_of
    • Ohne Vorzeichen {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::get
    • LocalKey:: >::set
    • LocalKey:: >::nehmen
    • LocalKey:: >::ersetzen
    • LocalKey:: >::with_borrow
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::set
    • LocalKey:: >::nehmen
    • LocalKey:: >::ersetzen
  • Das Attribut „const“, das die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten bestimmt, wird in Funktionen verwendet:
    • rc::Weak::new
    • sync::Weak::new
    • NonNull::as_ref
  • Der Compiler ermöglicht die Aufzeichnung von Versionsinformationen im Abschnitt „.comment“, ähnlich wie bei GCC und Clang.
  • Die dritte Unterstützungsebene wurde für die Plattformen aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl und x86_64-unknown-linux implementiert -ohos. Die dritte Ebene umfasst grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds oder Prüfung, ob der Code erstellt werden kann.
  • Die zweite Unterstützungsebene für die Zielplattform wasm32-wasi-preview1-threads wurde implementiert. Bei der zweiten Supportstufe handelt es sich um eine Montagegarantie.

Source: opennet.ru

Kommentar hinzufügen