Programmiersprache: Rust verkürzt Backtraces und verlängert Arrays mit Traits

Version 1.47 von Rust erweitert den Einsatz von Traits auf Arrays. Kurze Backtraces und Windows Control Flow Guard sollen helfen, Fehler zu vermeiden.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Programmiersprache: Rust bringt Traits für längere Arrays und kürzere Backtraces

(Bild: Shutterstock)

Lesezeit: 3 Min.
Inhaltsverzeichnis

Das Rust-Team hat Version 1.47 der Programmiersprache veröffentlicht. Das Release bringt keine Neuerungen bei der Syntax der Sprache mit, aber Ergänzungen bei der Toolchain, stabilisierte Libraries sowie einige Überführungen zu const-Implementierungen. Außerdem sollen kürzere Backtraces mehr Übersicht bei panic!() bringen. Schließlich erlaubt Rust neuerdings Traits auf größere Arrays.

Bisher war der Einsatz von trait-Konstrukten, die eine Reihe von Methoden für einen unbekannten Typ Self erlauben, im Zusammenspiel mit Arrays schwierig. Grund dafür ist, dass Rust keine Möglichkeit bietet, generisch mit Integer-Werten zu arbeiten. Ein Array benötigt aber stets einen Integer als Länge. Konkret ist es als [T; N] definiert, wobei T den Typ des Arrays und N dessen Länge festlegt.

Als Hilfsmaßnahme erlaubt die Standardbibliothek von Rust bereits Traits für Arrays mit einer Größe kleiner 33. Unter anderem um Traits für größere Arrays zu ermöglichen, hat das Rust-Team sogenannte Const Generics eingeführt, die für Arrays mit beliebigen Werte von N arbeiten. Das Feature ist noch nicht stabil, aber wohl ausreichend funktionstüchtig, dass die Standard-Bibliothek nun Traits für Arrays beliebiger Länge erlaubt.

An anderer Seite bringt Rust 1.47 dafür eine Verkürzung, und zwar konkret bei Backtraces, die rustc, der Compiler für die Programmiersprache, beim Verwenden des panic!()-Makros erzeugt. Bereits in Version 1.18 hatte die Sprache verkürzte Backtraces, die allerdings Regressionen aufwiesen. Nun ist der Fehler behoben, und die Backtraces konzentrieren sich auf die wesentlichen Informationen.

Der Blogbeitrag zum Release von Version 1.47 zeigt ein Beispiel, in dem die Ausgabe von 23 auf drei Zeilen geschrumpft ist. Die Ausgabe eines vollständigen Backtrace ist nach wie vor über RUST_BACKTRACE=full möglich.

Unter Windows kann der Compiler neuerdings den Control Flow Guard (CFG) nutzen. Microsoft hat ihn für sein Betriebssystem zum Schutz vor Schwachstellen durch Speicherzugriffsfehler eingeführt, und Rust ist ohnehin auf hohe Sicherheit im Umgang mit dem Speichermanagement ausgelegt. Der Kommandozeilenparameter -C control-flow-guard für rustc aktiviert CFG unter Windows und hat auf anderen Plattformen keine Auswirkung. Außerdem ist die zugrundeliegende Compilerinfrastruktur nun LLVM 11.

Nennenswert sind zudem noch einige Stabilisierungen bei den Libraries. Konkret gelten in Rust 1.47 folgende neun APIs als stabil: Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from, f32::TAU und f64::TAU.

Darüber hinaus sind nun einige APIs als const gekennzeichnet, darunter die Methode new für alle Integer die NonZero sind.

Weitere Details zu Rust 1.47 lassen sich dem Rust-Blog entnehmen. Die vollständige Liste der Neuerungen steht in den Release Notes. Wer einen detaillierten Blick auf das Zusammenspiel von Traits und Arrays werfen möchte, findet in dem zugehörigen Issue auf GitHub zusätzliche Informationen.

(rme)