Programmiersprache: Rust 1.57 – Don't Panic!

Das zweite Release der neuen Edition 2021 ist da. Rust 1.57 unterstützt nutzerdefinierte Profile in Cargo, es stabilisiert einige APIs und die panic!-Makros.

In Pocket speichern vorlesen Druckansicht 48 Kommentare lesen

(Bild: Callum Bainbridge / Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Silke Hahn

Das Rust-Team hat planmäßig Version 1.57 der Programmiersprache veröffentlicht, das zweite Release nach dem Startschuss der neuen Rust-Edition 2021 von Ende Oktober. Die wichtigsten Neuerungen betreffen die Paketverwaltung Cargo und die erstmalige Stabilisierung des panic!-Makros sowie unter anderem auch die Stabilisierung etlicher APIs – hier insbesondere der Schnittstelle, die für das Reservieren von Hintergrundspeicher zuständig ist.

Die API try_reserve soll es Aufrufern ermöglichen, den Hintergrundspeicher für die Typen Vec, String, HashMap, HashSetv und VecDeque fehlbar (fallible) zuzuweisen. Das bedeutet, dass Rust den Prozess nicht abbricht, wenn der gobale Allocator versagt. Allerdings garantiert Rust laut Blogeintrag nicht, dass der Kernel den zurückgegebenen Speicher auch tatsächlich alloziert.

Eine weitere Neuerung betrifft die Rust-Paketverwaltung Cargo, die bislang nur die vier Profile dev, release, test und bench kannte. Ab sofort unterstützt Cargo auch jegliches beliebig bezeichnete Profil. Benutzerdefinierte Profile müssen beim Anlegen ein Profil angeben, dessen Standardeinstellungen sie dann erben. Mit ihnen erstellte Artefakte landen in separaten Verzeichnissen.

Das panic!-Makro ließ sich in den bisherigen Rust-Versionen nicht in Compilezeit-Kontexten wie const fn nutzen. Ab Rust 1.57 gilt es nun als stabil, und gleichzeitig lassen sich auch andere APIs der Standard-Library (wie beispielsweise assert!) nun in const nutzen. Noch ist allerdings nicht die gesamte Formatierungsinfrastruktur so weit, wie der Blogeintrag einschränkend anmerkt.

Konkret bedeutet das, dass Entwicklerinnen und Entwickler das Makro panic! entweder mit einem statischen String oder mit einem einzelnen interpolierten &strg-Wert aufrufen müssen, der zwingend mit geschweiften Klammern {} zu verwenden ist: panic!("...") beziehungsweise panic!"{}", a. Die Herausgeber bezeichnen die Stabilisierung des Makros als "minimal", stellen aber in Aussicht, diese Form der Unterstützung künftig weiter auszubauen.

Als gesetzt gilt, dass die nun vorgenommene Stabilisierung schon Assertions zur Kompilierzeit möglich macht, um beispielsweise die Größe eines Typs zu prüfen:

const _: () = assert!(std::mem::size_of::<u64>() == 8);
const _: () = assert!(std::mem::size_of::<u8>() == 1);

Da die Änderungen von einer Edition zur nächsten eher moderat sind, hatte sich das Rust-Team bereits beim ersten Editionssprung 2018 gegen den Sprung auf eine neue Hauptversion ausgesprochen. Die Unterschiede von Editionen im Vergleich zu Hauptversionen erklärt ein Artikel auf Mozilla Hacks von 2018.

Weitere Änderungen sowie eine Auflistung aller stabilisierten APIs stehen im Blogbeitrag zur Veröffentlichung der aktuellen Version, sämtliche Neuerungen lassen sich den Release Notes zu Rust 1.57 entnehmen. Wie üblich können Entwicklerinnen und Entwickler, die Rust bereits installiert hatten, das aktuelle Release über rustup update stable herunterladen. Für Neulinge ist das rustup-Tool auf der Download-Seite separat verfügbar.

Siehe auch:

  • Rust: Download schnell und sicher von heise.de

(sih)