Programmiersprache: async/await-Feature landet in Rust

Das in einigen anderen Programmiersprachen bereits umgesetzte Konzept nebenläufiger Programmierung landet nun bald auch in Rust.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Programmiersprache: async/await-Feature landet in Rust
Lesezeit: 2 Min.
Von
  • Alexander Neumann

Die für den 7. November angekündigte Version 1.39 der Programmiersprache Rust wird aller Voraussicht nach das async/await-Pattern syntaktisch unterstützen. Mit diesem Programmiersprachen-Feature ist es möglich, asynchrone, nichtblockende Funktionen zu verwenden, und zwar so, als seien sie ganz gewöhnliche synchrone Funktionen. Es soll Programmen die Möglichkeit bieten, Code auszuführen, während anderer Code auf das Beenden einer laufenden Aufgabe wartet. In Sprachen wie C#, Python, Dart, Kotlin oder JavaScript ist dieses Konzept nebenläufiger Programmierung bereits umgesetzt. Arbeiten in diese Richtung finden sich aber auch bei Scala und C++.

Bei Rust wird der Umsetzung nun Beta-Qualität zugestanden. Damit verbunden scheint es nun die richtige Zeit zu sein, sich mit asynchronem I/O in Rust auseinanderzusetzen. Mit der im November wohl stabilen Syntax des Sprach-Features soll es dann einfacher als bisher werden, Futures zu schreiben. Hilfreich können hier auch schon bestehende Laufzeitumgebungen und Bibliotheken des Rust-Ökosytems sein, die sich des Themas bereits angenommen haben. Genannt werden hier unter anderem Tokio, async-std, wasm-bindgen-futures und hyper. Auch beschäftigen sich wohl auch einige Rust-Webframeworks mit der Umsetzung.

Entwickler, die das async/await-Konzept aus anderen Programmiersprachen wie JavaScript oder C# kennen, werden Vertrautes bei der Umsetzung in Rust erkennen, doch gibt es auch Unterschiede. So schreibt man future.await statt await future. Das passe besser zum ?-Operator von Rust für die Weitergabe von Fehlern. Man kann wohl auch future.await? schreiben, um auf das Ergebnis einer Future zu warten. Dieses Vorgehen scheint auch das Verketten von Methoden zu vereinfachen.

Ein weiterer Unterschied zwischen den Futures in Rust und denen in anderen Sprachen besteht darin, dass sie bei Rust auf einem sogenannten "Poll"-Modell basieren. In anderen Sprachen wird durch das Aufrufen einer asynchronen Funktion sofort eine Future erstellt und für die Ausführung geplant: Das Warten auf die Future sei jedoch für die Ausführung nicht unbedingt erforderlich, und es bedeute einen gewissen Aufwand für jede Future. Im Gegensatz dazu führt der Aufruf einer asynchronen Funktion in Rust nicht zu einer eigenständigen Planung. Dies bedeutet, dass man sogar eine komplexe Zusammenstellung von Futures definieren kann, ohne dass ein großer Aufwand pro Future anfällt.

Siehe dazu auf heise Developer:

(ane)