Veröffentlichung der Programmiersprache Rust 1.57

Die Veröffentlichung der vom Mozilla-Projekt gegründeten, mittlerweile aber unter der Schirmherrschaft der unabhängigen Non-Profit-Organisation Rust Foundation entwickelten Systemprogrammiersprache Rust 1.57 wurde veröffentlicht. Die Sprache konzentriert sich auf Speichersicherheit, bietet automatische Speicherverwaltung und bietet die Möglichkeit, eine hohe Aufgabenparallelität zu erreichen, ohne einen Garbage Collector oder eine Laufzeit zu verwenden (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek).

Die automatische Speicherverwaltung von Rust bewahrt den Entwickler vor Fehlern bei der Manipulation von Zeigern und schützt vor Problemen, die durch Speichermanipulation 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.

Wichtigste Neuerungen:

  • Die Verwendung des „Panic!“-Makros wurde stabilisiert. in Kontexten, die während der Kompilierung erstellt wurden, wie z. B. „const fn“-Deklarationen. Zusätzlich zur Verwendung von „Panik!“ const-Deklarationen erlauben die Verwendung des „assert!“-Makros. und einige andere Standardbibliotheks-APIs. Die Stabilisierung deckt noch nicht die gesamte Formatierungsinfrastruktur ab, daher in der aktuellen Form das „Panic!“-Makro kann nur mit statischen Zeichenfolgen (panic!(“...)) oder mit einem einzelnen interpolierten Wert „&str“ beim Ersetzen von (panic!(“{}“, a)) verwendet werden, was auf das Ersetzen von „{ beschränkt sein sollte }" ohne Formatierungsspezifizierer und andere Typen. In Zukunft wird die Anwendbarkeit von Makros in konstanten Kontexten erweitert, aber die stabilisierten Fähigkeiten reichen bereits aus, um Assert-Prüfungen in der Kompilierungsphase durchzuführen: const _: () = Assert!(std::mem::size_of:: () == 64); const _: () = affirm!(std::mem::size_of:: () == 8);
  • Der Cargo-Paketmanager ermöglicht die Verwendung von Profilen mit beliebigen Namen, nicht beschränkt auf „dev“, „release“, „test“ und „bench“. Um beispielsweise die Optimierung in der Verknüpfungsphase (LTO) nur dann zu ermöglichen, wenn die endgültigen Produktbaugruppen generiert werden, können Sie in Cargo.toml ein „Produktions“-Profil erstellen und ihm das Flag „lto = true“ hinzufügen. Wenn Sie jedoch Ihre eigenen Profile definieren, müssen Sie ein vorhandenes Profil angeben, um die Standardeinstellungen von diesem zu übernehmen. Das folgende Beispiel erstellt ein „Produktions“-Profil, das das „Release“-Profil durch die Einbindung des „lto = true“-Flags ergänzt. Das Profil selbst wird durch den Aufruf von Cargo mit der Option „--profile Production“ aktiviert und die Assembly-Artefakte werden im Verzeichnis „target/produktion“ abgelegt. [profile.produktion] inherits = „release“ lto = true
  • Die Verwendung von try_reserve für die Typen Vec, String, HashMap, HashSet und VecDeque wurde stabilisiert, sodass Sie im Voraus Platz für eine bestimmte Anzahl von Elementen eines bestimmten Typs reservieren können, um die Häufigkeit von Speicherzuweisungsvorgängen zu reduzieren und zu vermeiden stürzt während des Betriebs aufgrund von Speichermangel ab.
  • Es ist erlaubt, Makros mit geschweiften Klammern in Ausdrücken wie „m!{ .. }.method()“ und „m!{ .. }?“ anzugeben.
  • Die Ausführung der Funktionen File::read_to_end und read_to_string wurde optimiert.
  • Die Unterstützung für die Unicode-Spezifikation wurde auf Version 14.0 aktualisiert.
  • Die Anzahl der mit „#[must_use]“ gekennzeichneten Funktionen wurde erweitert, um eine Warnung auszugeben, wenn der Rückgabewert ignoriert wird. Dies hilft bei der Identifizierung von Fehlern, die durch die Annahme verursacht werden, dass eine Funktion Werte ändert, anstatt einen neuen Wert zurückzugeben.
  • Experimentelles Backend für die Codegenerierung mit libgccjit hinzugefügt.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • Sammlungen::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Befehl::get_program
    • Befehl::get_args
    • Befehl::get_envs
    • Befehl::get_current_dir
    • CommandArgs
    • CommandEnvs
  • In der Funktion hint::unreachable_unchecked wird das Attribut „const“ verwendet, das bestimmt, ob es in jedem Kontext anstelle von Konstanten verwendet werden kann.
  • Die dritte Unterstützungsstufe wurde für armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi und armv7a-kmc- implementiert. solid_asp3-eabihf-Plattformen. Die dritte Ebene umfasst grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Code-Buildbarkeit.

Source: opennet.ru

Kommentar hinzufügen