Mehr Power in Rust 1.46 durch erweiterten Einsatz konstanter Funktionen
Mit dem neuen Release der Programmiersprache lassen sich mehr Features in Verbindung mit const fn nutzen.
![Mehr Power in Rust 1.46 durch erweiterten Einsatz konstanter Funktionen](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/9/5/8/3/2/9/rust-f35dbded912fe60d.jpeg)
- Alexander Neumann
Das neue Rust-Release unter der Version 1.46 umfasst zwei neue Standard-Bibliotheken-APIs und eine für Autoren von Bibliotheken nützliche Funktion. Außerdem ermöglicht die neue Version der Programmiersprache, mehr Kernfunktionen und -Anweisungen mit const fn
-Funktionen zu nutzen. Das in Rust 1.31 eingeführte const fn
dient zum Definieren konstanter Funktionen, die sich wie herkömmliche Funktionen verwenden lassen.
Von const fn profitieren
Zu den neuen Features der Kernsprache, die sich nun mit const fn
verwenden lassen, gehören if
, if let
und match
, while
, while let
und loop
sowie die Operatoren &&
und |||
.
Außerdem lässt sich ein Slice casten, wie an dem Beispiel in der Ankündigung zu sehen ist:
const fn foo() {
let x = [1, 2, 3, 4, 5];
// cast the array to a slice
let y: &[_] = &x;
}
Diese Komponenten ließen sich schon vorher nutzen, in Verbindung mit const fn
versprechen sich die Entwickler mehr Performance bei Berechnungen zur Kompilier-Zeit. Beispielsweise lassen sich SHA-1-Hashes zur Kompilierzeit mit dem Crate const-sha1
berechnen, und das wohl mit einer 40fachen Leistungssteigerung bei Microsofts WinRT-Bindings für Rust.
Das Thema tangiert auch, dass nun die Funktion std::mem::forget
ebenfalls eine const fn
-Funktion ist. Zusätzlich gelten in Rust 1.46 nun zwei APIs als stabil, und zwar die Methode Option::zip
und das Struct vec::Drain::as_slice
. Eine Stabilisierung hat schließlich die Fehlermeldung für den Fall erfahren, dass unpack
und damit verbundene Funktionen "in Panik geraten".
Einen guten Ausgangspunkt zur Vertiefung in die Neuerungen des neuen Release bietet die Blog-Ankündigung der Entwickler.
(ane)