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.
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.
Größen jenseits von 32
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.
In der Kürze liegt die Würze
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.
Kontrollfluss und Compiler
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.
Stabile und konstante Bibliotheken
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)