Neuer Milestone von Rust: Version 1.75 mit asynchronen Trait-Funktionen
In Rust gibt es nun in Traits asynchrone Funktionen und "impl Trait" als RĂĽckgabetyp. Das Rust-Team nennt es eine Milestone-Version.
Kurz vor dem Jahreswechsel hat das Rust-Team die Milestone-Version 1.75 veröffentlicht. Wie wenige Tage davor im Blog schon angekündigt, unterstützt die Programmiersprache nun in Traits asynchrone Funktionen, also async fn
, und impl Trait
als RĂĽckgabetyp. Das Team geht davon aus, dass es vielen Anwendern "in den Fingern juckt, dies in ihrem eigenen Code auszuprobieren."
Bereits Version 1.26 von Rust fĂĽhrte impl Traits
als Rückgabetyp von Funktionen ein. Der Typ selbst ist an dieser Stelle unbekannt, implementiert aber einen Trait, was für Closures, Iterators und andere komplexe Typen verwendet wird. Ein Beispiel eines Iterators aus dem erwähnten Blogeintrag:
/// Given a list of players, return an iterator
/// over their names.
fn player_names(
players: &[Player]
) -> impl Iterator<Item = &String> {
players
.iter()
.map(|p| &p.name)
}
Dies ist nun auch in Traits möglich:
trait Container {
fn items(&self) -> impl Iterator<Item = Widget>;
}
impl Container for MyContainer {
fn items(&self) -> impl Iterator<Item = Widget> {
self.items.iter().cloned()
}
}
Und ebenso erlaubt Rust nun die lang erwarteten asynchronen Funktionen async fn
in Traits (hier eine HTTP-Anfrage):
trait HttpService {
async fn fetch(&self, url: Url) -> HtmlBody;
// ^^^^^^^^ desugars to:
// fn fetch(&self, url: Url) -> impl Future<Output = HtmlBody>;
}
Es gibt jedoch noch Einschränkungen in der Verwendung: Beides lässt sich nicht ohne Weiteres in public
Traits einsetzen. Ebenso sind dynamische Bindungen nicht möglich. Details finden sich im genannten Blogbeitrag.
Einfaches Update
Weitere Neuerungen in Version 1.75 betreffen Pointer, den Compiler rustc und neue stabile APIs. Ein Update erfolgt am einfachsten via rustup:
rustup update stable
FĂĽr mutigere Programmiererinnen und Tester gibt es einen Beta- und einen Nigthly-Channel:
rustup default beta
rustup default nightly
Bugs lassen sich im Repository des Projekts melden.
(who)