Veröffentlichung der Programmiersprache Rust 1.73

Die Version 1.73 der Programmiersprache Rust, ursprünglich von Mozilla entwickelt und nun unter der Schirmherrschaft der unabhängigen gemeinnützigen Organisation Rust Foundation weitergeführt, wurde veröffentlicht. Die Sprache konzentriert sich auf sichere Speicherverwaltung und bietet Mittel, um hohen Parallelismus bei der Ausführung von Aufgaben zu erreichen, dabei jedoch ohne die Nutzung eines Garbage Collectors und mit minimalem Runtime (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 Gestaltung der Fehlermeldungen, die vom standardmäßigen Panic-Handler ausgegeben werden, wurde überarbeitet. Der Text, der im Makro „panic!“ angegeben ist, wird jetzt in einer separaten Zeile ohne Anführungszeichen angezeigt, was die Lesbarkeit der Meldung verbessert und Verwirrung bei eingebetteten Anführungszeichen oder mehrzeiligen Meldungen beseitigt. fn main() { let file = "ferris.txt"; panic!("oh nein! {file:?} nicht gefunden!"); } Vorher thread 'main' panicked at 'oh nein! "ferris.txt" nicht gefunden!', src/main.rs:3:5 Nachher thread 'main' panicked at src/main.rs:3:5: oh nein! "ferris.txt" nicht gefunden!

    Auch die Ausgabe der Meldungen, die bei der Aktivierung der Makros „assert_eq“ und „assert_ne“ angezeigt werden, wurde überarbeitet. fn main() { assert_eq!(„🦀“, „🐟“, „ferris ist kein Fisch“); } War thread ‘main’ panicked at ‘assertion failed: `(left == right)` left: `„🦀“`, right: `„🐟“`: ferris ist kein Fisch’, src/main.rs:2:5 Ist thread ‘main’ panicked at src/main.rs:2:5: assertion `left == right` failed: ferris ist kein Fisch left: „🦀“ right: „🐟“

  • In Übereinstimmung mit RFC 3184 wurde die Möglichkeit hinzugefügt, direkt mit lokalen für den Thread (thread_local) Schlüssel des Speichers LocalKey<Cell> und LocalKey<RefCell> zu arbeiten, indem die Methoden get(), set(), take() und replace() verwendet werden, anstelle der Verwendung eines Closures „with(|inner| …)“, was die Ausführung zusätzlicher Initialisierungscodes für Standardwerte, die für neue Threads mit dem Makro „thread_local!“ angegeben sind, überflüssig macht. thread_local! { static THINGS: Cell<Vec> = Cell::new(Vec::new()); } fn f() { // war THINGS.with(|i| i.set(vec![1, 2, 3])); // ist THINGS.set(vec![1, 2, 3]); // … // war let v = THINGS.with(|i| i.take()); // ist let v: Vec = THINGS.take(); }
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • Unsigned {integer}::div_ceil
    • Unsigned {integer}::next_multiple_of
    • Unsigned {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey::<Cell>::get
    • LocalKey::<Cell>::set
    • LocalKey::<Cell>::take
    • LocalKey::<Cell>::replace
    • LocalKey::<RefCell>::with_borrow
    • LocalKey::<RefCell>::with_borrow_mut
    • LocalKey::<RefCell>::set
    • LocalKey::<RefCell>::take
    • LocalKey::<RefCell>::replace
  • Das „const“-Merkmal, das die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wurde in den Funktionen angewendet:
    • rc::Weak::new
    • sync::Weak::new
    • NonNull::as_ref
  • Im Compiler wird die Versionsinformation im Abschnitt „.comment“ ähnlich wie bei GCC und Clang aufgezeichnet.
  • 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-ohos implementiert. Die dritte Ebene bietet grundlegende Unterstützung, jedoch ohne automatisierte Tests, die Veröffentlichung offizieller Builds und die Überprüfung der Möglichkeit zur Codekompilierung.
  • Die zweite Unterstützungsebene für die Zielplattform wasm32-wasi-preview1-threads wurde implementiert. Die zweite Unterstützungsebene gewährleistet die Kompilierung.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster