Veröffentlichung der Programmiersprache Rust 1.57

Die neue Version der systemnahen Programmiersprache Rust 1.57 wurde veröffentlicht. Ursprünglich von Mozilla entwickelt, wird das Projekt nun unter der Schirmherrschaft der unabhängigen, gemeinnützigen Rust Foundation weitergeführt. Die Sprache legt den Fokus auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und ermöglicht eine hohe Parallelität bei der Ausführung von Aufgaben, ohne dabei auf einen Garbage Collector oder komplexe Runtime angewiesen zu sein. Die Runtime beschränkt sich auf grundlegende Initialisierungen und die Unterstützung der Standardbibliothek.

Das automatische Speichermanagement in Rust befreit Entwickler von Fehlern beim Umgang mit Zeigern und schützt vor Problemen, die aus der niederen Speicherverwaltung entstehen, wie etwa dem Zugreifen auf Speicherbereiche nach deren Freigabe, dem Dereferenzieren von Nullzeigern, Pufferüberläufen usw. Zur Verbreitung von Bibliotheken, zur Gewährleistung des Builds und zur Verwaltung der Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.

Hauptneuheiten:

  • Die Verwendung des Makros „panic!“ wurde in Kontexten stabilisiert, die beim Kompilieren entstehen, wie z. B. in Deklarationen „const fn“. Darüber hinaus ist neben der Verwendung von „panic!“ in const-Deklarationen nun auch die Nutzung des Makros „assert!“ sowie einiger anderer APIs der Standardbibliothek erlaubt. Die Stabilisierung umfasst jedoch momentan noch nicht die gesamte Formatierungsinfrastruktur, weshalb das Makro „panic!“ derzeit nur mit statischen Zeichenfolgen (panic!(„…“)) oder mit einem interpolierten Wert „&str“ bei der Substitution (panic!(„{}“, a)) verwendet werden kann, wobei die Substitution auf „{}“ ohne Formatierungsspezifizierer und andere Traits beschränkt sein muss. In Zukunft wird die Anwendbarkeit von Makros in konstanten Kontexten erweitert, jedoch sind die bereits stabilisierten Möglichkeiten ausreichend, um assert-Überprüfungen zur Kompilierungszeit durchzuführen: const _: () = assert!(std::mem::size_of::() == 8); const _: () = assert!(std::mem::size_of::() == 1);
  • Im Paketmanager Cargo können Profile mit beliebigen Namen verwendet werden, die nicht auf „dev“, „release“, „test“ und „bench“ beschränkt sind. Um beispielsweise die Optimierung während des Linkvorgangs (LTO) nur bei der Erstellung der endgültigen Produktversionen zu aktivieren, kann in der Cargo.toml ein Profil „production“ erstellt und das Flag „lto = true“ hinzugefügt werden. Bei der Definition eigener Profile ist es erforderlich, ein bestehendes Profil anzugeben, von dem die Standardeinstellungen geerbt werden. Im folgenden Beispiel wird das Profil „production“ erstellt, das das Profil „release“ um das Flag „lto = true“ ergänzt. Das Profil wird aktiviert, wenn Cargo mit der Option „—profile production“ aufgerufen wird, und die Build-Artefakte werden im Verzeichnis „target/production“ abgelegt. [profile.production] inherits = „release“ lto = true
  • Die Nutzung von try_reserve für die Typen Vec, String, HashMap, HashSet und VecDeque wurde stabilisiert, was es ermöglicht, im Voraus Platz für eine bestimmte Anzahl von Elementen des angegebenen Typs zu reservieren. Dadurch wird die Häufigkeit von Speicherzuweisungsoperationen verringert und ein unerwartetes Beenden aufgrund von Speichermangel während der Ausführung vermieden.
  • Die Angabe von Makros mit geschweiften Klammern ist in Ausdrücken wie „m!{ .. }.method()“ und „m!{ .. }?“ erlaubt.
  • Die Ausführung der Funktionen File::read_to_end und read_to_string wurde optimiert.
  • Die Unterstützung der Unicode-Spezifikation wurde auf Version 14.0 aktualisiert.
  • Die Anzahl der Funktionen, die mit «#[must_use]» gekennzeichnet sind, wurde erweitert, um eine Warnung auszugeben, falls der Rückgabewert ignoriert wird. Dies hilft, Fehler zu identifizieren, die durch die Annahme entstehen, dass eine Funktion Werte ändert, anstatt einen neuen Wert zurückzugeben.
  • Ein experimenteller Backend zur Codegenerierung unter Verwendung von libgccjit wurde hinzugefügt.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::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
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Das „const“-Flag, das die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wird in der Funktion hint::unreachable_unchecked angewendet.
  • Die dritte Unterstützungsstufe wurde für die Plattformen armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi und armv7a-kmc-solid_asp3-eabihf realisiert. Die dritte Stufe umfasst grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Code-Baufähigkeit.

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