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.
(Bild: Paweł Kuźniar (unter der GFDL))
- 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.
Kommt Zeit, kommt Datenfluss
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)
In den Kinderschuhen
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)