Des exemples de programmation concurrente en Swift

Par:
fredericmazue

ven, 26/04/2024 - 14:37

La programmation concurrente en Swift peut être difficile à maîtriser. Disposer de bons exemples peut s'avérer être une grande aide. C'est avec cette intention que Matt Massicotte, développeur Swift, et ancien employé de Crashlytics et Apple à créé un dépôt GitHub pout partager des solutions et mettre en évidence les dangers.

Matt Massicotte ne prétend pas être exhaustif ni que ses solutions sont les meilleures. Au contraire, il invite aux contributions pour continuer d'apprendre. Son dépôt n'en est que plus intéressant.

Les aspects abordés en programmation Swifit concurrente sont pour le moment les suivants :

  • Création d'un contexte asynchrone
  • Utiliser des protocoles
  • Isolement
  • Concurrence structurée
  • SwiftUI
  • Utilisation de bibliothèques non conçues pour la concurrence
  • Interopérabilité

Les dangers rencontrés en programmation Swift concurrente références par ce dépôt sont pour le moment les suivants :

  • Timing : plusieurs options sont disponibles, mais peuvent affecter le moment où les événements se produisent réellement.
  • Commande : les tâches non structurées signifient que la commande dépend de l'appelant. Réfléchissez bien aux dépendances, aux appels multiples et à l’annulation.
  • Absence de contrôle de l'appelant : les définitions contrôlent toujours le contexte de l'acteur. Ceci est différent des autres modèles de thread et vous ne pouvez pas modifier les définitions que vous ne contrôlez pas.
  • Envoyabilité : les types qui traversent les domaines d'isolation doivent être expédiables. Ce n'est pas toujours facile, et pour les types que vous ne contrôlez pas, ce n'est pas possible.
  • Blocage : la concurrence Swift utilise un pool de threads de taille fixe. L'interconnexion des threads d'arrière-plan peut entraîner un décalage, voire une impasse.
  • Disponibilité : la concurrence évolue rapidement et certaines API nécessitent le dernier SDK.
  • Viralité asynchrone : Rendre une fonction asynchrone affecte tous ses sites d'appel. Cela peut entraîner un grand nombre de changements, dont chacun pourrait lui-même affecter les sites d’appel de la sous-séquence.
  • Réentrée d'acteur : plusieurs threads peuvent entrer dans les méthodes asynchrones d'un acteur. L'état d'un acteur peut changer au fil des attentes.

Ces exemples de programmation concurrente en Swift sont des logiciels libres sous licence BSD 3-Clause "New", disponibles sur GitHub.