Concurrent ML

Un article de Wikipédia, l'encyclopédie libre.

Concurrent ML
Paradigme fonctionnel, concurrent
Auteur John Reppy
Dernière version 110.79 ()[1]Voir et modifier les données sur Wikidata
Typage fort
Influencé par Standard ML
A influencé Manticore
Site web http://cml.cs.uchicago.edu/

Concurrent ML (CML) est une version concurrente du langage Standard ML.

C'est un langage de haut niveau, qui intègre des abstractions de communications synchrones en tant qu'objets de première classe.

Il sert de base pour la programmation concurrente dans SML/NJ.

Concepts[modifier | modifier le code]

De nombreux langages de programmation qui prennent en charge la concurrence offrent des canaux de communication permettant l'échange de valeurs entre des processus ou des fils d'exécution fonctionnant simultanément dans un système. Les communications établies entre les processus peuvent suivre un protocole spécifique, nécessitant que le programmeur écrive des fonctions pour établir le modèle de communication requis. Pendant ce temps, un système de communication nécessite souvent l'établissement de plusieurs canaux, tels que vers plusieurs serveurs, puis le choix entre les canaux disponibles lorsque de nouvelles données sont disponibles. Cela peut être accompli en utilisant l'attente active, comme avec l'opération select sur les systèmes Unix.

Combiner à la fois des protocoles spécifiques à l'application et une communication multiparte peut être compliqué en raison de la nécessité d'introduire des interrogations et des vérifications de blocage dans un protocole préexistant. Concurrent ML résout ce problème en réduisant ce couplage de concepts de programmation en introduisant des événements synchronisables. Les événements sont une abstraction de première classe qui peut être utilisée avec une opération de synchronisation (appelée sync dans CML et Racket) afin de potentiellement bloquer et ensuite produire une valeur résultant de la communication (par exemple, des données transmises sur un canal). Dans CML, les événements peuvent être combinés ou manipulés à l'aide d'un certain nombre d'opérations primitives. Chaque opération primitive construit un nouvel événement plutôt que de modifier l'événement en place, permettant la construction d'événements composés qui représentent le modèle de communication souhaité. Par exemple, CML permet au programmeur de combiner plusieurs sous-événements afin de créer un événement composé qui peut ensuite faire un choix non déterministe de l'un des sous-événements. Une autre primitive crée un nouvel événement qui modifiera la valeur résultant de la synchronisation à l'événement original. Ces événements incarnent des modèles de communication qui, dans un langage non CML, seraient généralement gérés en utilisant une boucle d'interrogation ou une fonction avec des gestionnaires pour chaque type d'événement.

Notes et références[modifier | modifier le code]

  1. a et b (en) « 110.79 Distribution Files »

Annexes[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Lien externe[modifier | modifier le code]