Veröffentlichung von Rust 1.79. Ein Konsortium zur Entwicklung von hochzuverlässigen Systemen mit Rust wurde gegründet.

Die Veröffentlichung der Programmiersprache Rust 1.79, ursprünglich von Mozilla entwickelt, erfolgt nun unter der Schirmherrschaft der unabhängigen Non-Profit-Organisation Rust Foundation. Die Sprache legt den Fokus auf sichere Speicherverwaltung und bietet Mittel für hohe Parallelität bei der Aufgabenausführung, ohne dabei einen Garbage Collector oder eine umfangreiche Runtime zu benötigen (die Runtime beschränkt sich auf die grundlegende Initialisierung und 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 Unterstützung von Inline-Konstanten wurde hinzugefügt, die direkt im Code mit den Blöcken „const { … }“ angegeben werden können. Diese Blöcke werden im Kontext von Konstanten behandelt und ermöglichen die Vermeidung separater Definitionskonstanten. Der im Block „const { … }“ angegebene Code wird zur Compile-Zeit ausgewertet und als Konstante verwendet, ohne während der Programmausführung ausgeführt zu werden. Im Gegensatz zur Definition von Konstanten durch den Ausdruck „const ITEM: … = …“ muss im Block „const { … }“ der Typ nicht angegeben werden, da hier die automatische Typinferenz unterstützt wird. Zum Beispiel Code mit separater Konstantendefinition.

    const EMPTY: Option<Vec> = None;
    let foo = [EMPTY; 100];

    kann an die Verwendung vor Ort angepasst werden:

    let foo = [const { None }; 100];

  • Die Syntax „T: Trait“ wurde stabilisiert, um Einschränkungen in der Position des assoziativen Typs zu definieren, wodurch die Definition von Ausdrücken mit geschachtelten Typbeschränkungen verkürzt wird, die zuvor die Angabe einer geschachtelten impl Trait oder mehrerer Bedingungen „where“ erforderte.
  • Automatische Verlängerung der Lebensdauer temporärer Werte, die in "match" und "if"-Konstruktionen verwendet werden, wurde sichergestellt.

    let a = if true {
    ..;
    &temp() // Lebensdauer wird verlängert
    } else {
    ..;
    &temp() // Lebensdauer wird verlängert
    };

  • Die Möglichkeit, die Funktion main aus anderen Modulen und crate-Paketen zu importieren, wurde stabilisiert.
  • Beim Bau der Standardbibliothek im Compiler wird das Flag „-Cforce-frame-pointers=yes“ verwendet, das Daten zur Rekonstruktion des Stacks während der Profilierung von Programmen hinzufügt.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • {integer}::unchecked_add
    • {integer}::unchecked_mul
    • {integer}::unchecked_sub
    • ::split_at_unchecked
    • ::split_at_mut_unchecked
    • ::utf8_chunks
    • str::Utf8Chunks
    • str::Utf8Chunk
    • ::is_aligned
    • ::is_aligned
    • NonNull::is_aligned
    • ::len
    • ::len
    • ::is_empty
    • ::is_empty
    • NonNull::::is_empty
    • CStr::count_bytes
    • io::Error::downcast
    • num::NonZero
    • path::absolute
    • proc_macro::Literal::byte_character
    • proc_macro::Literal::c_string
  • Das „const“-Merkmal, das die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wurde in den Funktionen angewendet:
    • Atomic*::into_inner
    • io::Cursor::new
    • io::Cursor::get_ref
    • io::Cursor::position
    • io::empty
    • io::repeat
    • io::sink
    • panic::Location::caller
    • panic::Location::file
    • panic::Location::line
    • panic::Location::column
  • Stabilisiert
    Teil der Funktionen, die bei der Kompilierung in das Zwischenformat Webassembly (WASM) verwendet werden können.
  • Die dritte Unterstützungsebene für die Plattformen aarch64-apple-visionos, aarch64-apple-visionos-sim und riscv32ima-unknown-none-elf wurde implementiert. Die dritte Ebene bietet grundlegende Unterstützung, jedoch ohne automatisierte Tests, die Veröffentlichung offizieller Builds und die Überprüfung der Code-Baufähigkeit.
  • Die zweite Unterstützungsebene für die Zielplattformen aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm und x86_64-pc-windows-gnullvm wurde implementiert. Die zweite Unterstützungsebene garantiert den Build.

Außerdem hat die Rust Foundation, die das Ökosystem rund um die Programmiersprache Rust betreut, die Gründung des "Safety-Critical Rust Consortium" bekannt gegeben. Ziel des Konsortiums ist es, die Programmiersprache Rust in Lösungen einzusetzen, die eine erhöhte Zuverlässigkeit (Safety-Critical Software) erfordern, bei denen ein Fehler das Leben von Menschen gefährden, der Umwelt schaden oder zu schweren Schäden an Geräten führen kann. Zu den Unternehmen, die dem Konsortium beigetreten sind, gehören ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle und Woven by Toyota. Zu den Aufgaben des Konsortiums gehören das Schreiben von Leitfäden, die Entwicklung von Bibliotheken, Lintern und statischen Analysatoren sowie die Anwendung von Methoden zur formalen Verifikation von Zuverlässigkeit und die Entwicklung von Sprachuntergruppen für hochzuverlässige Systeme.

Unter den Projekten, die sich mit hochzuverlässigen Systemen befassen, ist Verus zu erwähnen — ein Werkzeug zur Überprüfung der Korrektheit von in Rust geschriebener Codes. Die Überprüfung erfolgt durch die Definition einer Spezifikation, die das erlaubte Verhalten des Codes beschreibt. Während der Ausführung des Codes überprüft Verus die Übereinstimmung mit der Spezifikation, um die Korrektheit der Ausführung zu bestätigen.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster