Veröffentlichung der Programmiersprache Rust 1.34

Die Version 1.34 der Programmiersprache Rust, entwickelt von Mozilla, wurde veröffentlicht. Diese Sprache konzentriert sich auf sicheres Arbeiten mit Speicher, bietet automatisches Speichermanagement und ermöglicht hohe Parallelität bei der Ausführung von Aufgaben, ganz ohne Garbage Collector und Laufzeitumgebung.

Das automatische Speichermanagement in Rust befreit Entwickler von der Manipulation von Zeigern und schützt vor Problemen, die aus niedrigstufigem Speicherzugriff resultieren, wie z. B. dem Zugriff auf Speicher nach dessen Freigabe, dem Dereferenzieren von Nullzeigern, Buffer-Überläufen usw. Zur Verbreitung von Bibliotheken, zur Sicherstellung der Build-Prozesse und zur Verwaltung von Abhängigkeiten wird der Paketmanager Cargo entwickelt, der es ermöglicht, benötigte Bibliotheken mit einem Klick zu erhalten. Bibliotheken werden über das Repository crates.io bereitgestellt.

Hauptneuheiten:

  • Der Paketmanager Cargo hat Unterstützung für alternative Paketregister erhalten, die parallel zum öffentlichen Register crates.io existieren können. Beispielsweise können Entwickler geschlossener Anwendungen nun ihr eigenes privates Register verwenden, das in der Auflistung der Abhängigkeiten in der Cargo.toml-Datei erwähnt werden kann. Zudem können sie ein Versionsmodell anwenden, das mit crates.io vergleichbar ist, und sowohl auf crates.io als auch auf ihr eigenes Register in den Abhängigkeiten verweisen.

    Um ein externes Register hinzuzufügen, tragen Sie es in die Datei ~/.cargo/config ein.
    In der Sektion „[registries]“ kann eine neue Option „my-registry“ hinzugefügt werden. Zum Verweisen auf das externe Register in den Abhängigkeiten in der Cargo.toml-Datei steht die Option „other-crate“ zur Verfügung. Um sich mit einem zusätzlichen Register zu verbinden, reicht es, das Authentifizierungstoken in die Datei ~/.cargo/credentials zu speichern und den Befehl auszuführen.
    «cargo login —registry=my-registry», und zur Veröffentlichung des Pakets —
    «cargo publish —registry=my-registry»;

  • Es wurde die vollständige Unterstützung für den Operator „?“ in doctests hinzugefügt, der es ermöglicht, Beispielcode aus der Dokumentation als Tests zu verwenden. Zuvor war der Operator
    «?» kann zur Fehlerbehandlung während der Testausführung nur verwendet werden, wenn die Funktion «fn main()» oder in den Funktionen «#[test]» vorhanden ist;
  • In den durch prozedurale Makros definierten benutzerdefinierten Attributen (custom attribute) wurde die Möglichkeit geschaffen, beliebige Mengen von Token zu verwenden («#[attr($tokens)]», «#[attr[$tokens]]» und «#[attr{$tokens}]»). Früher konnten Elemente nur in baumartigen/rekursiven Formen mithilfe von String-Literalen angegeben werden, wie z. B. «#[foo(bar, baz(quux, foo = «bar»))]», nun ist es auch möglich, Aufzählungen (‘#[range(0..10)]’) und Konstruktionen wie «#[bound(T: MyTrait)]» zu nutzen;
  • Die Typen-Traits TryFrom und TryInto wurden stabilisiert, um Typkonversionen mit Fehlerbehandlung zu ermöglichen. Beispielsweise verwenden Methoden wie from_be_bytes mit ganzzahligen Typen als Eingabe Arrays, doch oft kommen Daten mit dem Typ Slice, und die manuelle Konvertierung zwischen Arrays und Slices kann problematisch sein. Mit den neuen Traits kann diese Operation jetzt einfach mit dem Aufruf .try_into() durchgeführt werden, zum Beispiel: „let num = u32::from_be_bytes(slice.try_into()?)“. Für Konversionen, die immer erfolgreich sind (wie von u8 zu u32), wurde der Fehler-Typ Infallible hinzugefügt, der eine transparente Verwendung ermöglicht.
    TryFrom ist für alle bestehenden „From“-Implementierungen verfügbar.
  • Die Funktion CommandExt::before_exec wurde als veraltet erklärt, da sie es ermöglichte, einen Handler vor der Ausführung von exec auszuführen, der im Kontext des Kindprozesses lief, der nach dem Aufruf von fork() erstellt wurde. Unter solchen Bedingungen konnten einige Ressourcen des Elternprozesses, wie Dateideskriptoren und gespiegelt Bereiche im Speicher, dupliziert werden, was zu undefiniertem Verhalten und Fehlfunktionen von Bibliotheken führen konnte.
    Es wird empfohlen, anstelle von before_exec die unsafe-Funktion CommandExt::pre_exec zu verwenden.
  • Die signierten und unsignierten atomaren Ganzzahltypen von 8 bis 64 Bit (z.B. AtomicU8) sowie die signierten Typen NonZeroI[8|16|32|54|128] wurden stabilisiert.
  • Eine neue Charge von APIs wurde stabilisiert, einschließlich der stabilisierten Methoden Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub] und SystemTime::checked_[add|sub]. Die Funktionen iter::from_fn und iter::successors wurden ebenfalls stabilisiert.
  • Für alle Ganzzahltypen wurden die Methoden checked_pow, saturating_pow, wrapping_pow und overflowing_pow implementiert.
  • Es wurde die Möglichkeit hinzugefügt, Optimierungen während des Linkens durch Angabe der Build-Option «-C linker-plugin-lto» zu aktivieren (rustc kompiliert Rust-Code in LLVM-Bitcode, was die Anwendung von LTO-Optimierungen ermöglicht).

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