Apple a livré Swift Atomics, un pack logiciel open source qui permet aux programmeurs systèmes d’utiliser directement des opérations atomiques de bas niveau dans le code du langage Swift, comme les structures de données concurrentes. La bibliothèque Atomics est disponible sur GitHub depuis le 1er octobre. Les opérations atomiques sont activées sur une variété de types de Swift, dont les nombres entiers et les valeurs de pointeur. Les API pour les opérations atomiques répondent aux principes de design des API Swift. Cependant, Apple a précisé que les opérations sous-jacentes fonctionnaient à un très faible niveau d'abstraction. « Plus encore que les constructions concurrentes de bas niveau, l'atomique est notoirement difficile à utiliser correctement », a déclaré Karoy Larentey, un ingénieur d'Apple qui travaille au sein de l'équipe en charge de la bibliothèque Swift standard.
Exemple d'opérations atomiques publiées sur le site swift.org :
import Atomics
import Dispatch
let counter = ManagedAtomic(0)
DispatchQueue.concurrentPerform(iterations: 10) { _ in
for _ in 0 ..< 1_000_000 {
counter.wrappingIncrement(by: 1, ordering: .relaxed)
}
}
counter.load(ordering: .relaxed) // ⟹ 10_000_000
L'auteur fait remarquer que « ces opérations ne suivent pas les règles normales d'exclusivité pour les variables Swift ». Les opérations atomiques peuvent être effectuées à partir de plusieurs threads d'exécution concurrents, tant que la valeur n'est accessible que par des opérations atomiques.
Les opérations atomiques sont possibles depuis la proposition d'évolution de Swift SE-0282 qui a explicitement adopté un style de mémoire C/C++ pour Swift. Ladite proposition décrit comment le code Swift courant interagit avec les opérations atomiques. La plupart des API du nouveau pack logiciel sont issues de versions précédentes de la proposition d'évolution.
L'ajout de nouveaux types et l'amélioration de la suite de tests actuelle font partie des projets à venir du pack logiciel. Le tag « Atomics » est surveillé de près. L’outil permet de résoudre les problèmes liés aux structures de données concurrentes. Un forum « Atomics » a été mis en place pour discuter de cette technologie. Un support pour les opérations en virgule flottante a également été demandé.
Commentaire