Apples Programmiersprache Swift bekommt ein Paket für asynchrone Algorithmen

Das Paket Swift Async Algorithms baut auf den Erfahrungen vom Combine-Framework auf und setzt Algorithmen mit async/await um.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen

(Bild: Paweł Kuźniar (unter der GFDL))

Lesezeit: 2 Min.
Von
  • Rainald Menge-Sonnentag

Das Team hinter Swift hat eine Library veröffentlicht, die einige Algorithmen mit den in Version 5.5 der Programmiersprache eingeführten Methoden für die nebenläufige Programmierung umsetzt. Die Bibliothek implementiert Algorithmen wie buffer, debounce und merge, die Werte asynchron über einen Zeitraum verarbeiten oder kombinieren.

Das im September 2021 veröffentlichte Swift 5.5 hat das Async/Await-Pattern eingeführt, das die nun veröffentlichte Open-Source-Library für zeitbasierte Algorithmen umsetzt. Die Entwicklung erfolgt bewusst in einem separaten Paket, um flexible Anpassungen im API-Design und der plattformspezifischen Umsetzung zu ermöglichen.

In die Implementierung sind die Erfahrungen aus dem Combine-Framework eingeflossen, das auf die Verarbeitung asynchroner Events zielt. Es verbindet die Interfaces Publisher und Subscriber und bietet Operatoren zum Transformieren der Daten auf dem Weg von der Quelle zum Ziel.

Das nun veröffentlichte Paket AsyncAlgorithms bietet Algorithmen zum Kombinieren asynchroner Sequenzen wie combineLatest() oder merge(). Sie setzen auf die in Swift 5.5 eingeführte AsyncSequence, die auf asynchrone Verarbeitung ausgelegt ist und im Gegensatz zur regulären Sequence die Variable time kennt. Daneben gibt es Methoden zum Erstellen asynchroner Sequenzen aus synchronen Sequenzen.

Das Paket führt zudem Algorithmen zum Regulieren des Datendurchsatzes wie throttle() oder debounce() ein. Der ebenfalls neue Iterator AsyncBufferedByteIterator soll besonders effizient mit Byte-Sequenzen aus asynchronen Lesefunktionen arbeiten. Für eine endliche asynchrone Sequenz bietet das Paket eine einfache Umsetzung mit await, um darauf zu warten, dass alle Werte vorhanden sind:

let result = await Array(input)

Bei dem nun auf GitHub veröffentlichten Paket handelt es sich zunächst um einen Prototyp. Die Diskussion zum Design und der API finden im Repository und in den zugehörigen Swift-Foren statt. Weitere Details finden sich in einem Beitrag auf dem Swift-Blog.

Swift Async Algorithms erfordert die aktuelle Trunk-Development-Toolchain. Hinweise zum Erstellen und Testen des Pakets finden sich im Readme auf GitHub.

(rme)