🧮 CSP — Communicating Sequential Processes
Algèbre de processus créée par Sir Tony Hoare (1978) · Fondements formels de la concurrence · FDR4, ProB, PAT · Influence sur Go, Erlang, Clojure
🍗 In Memoriam — Sir Charles Antony Richard Hoare
— Tony Hoare, Turing Award Lecture, 1980
Sir Tony Hoare est décédé le 5 mars 2026, à l'âge de 92 ans. Diplômé de Merton College (Classiques & Philosophie, Oxford), il découvrit Quicksort en 1959 à Moscou, développa le premier compilateur ALGOL 60 commercial chez Elliott Brothers, puis devint Professeur à Queen's University Belfast (1968) avant de rejoindre Oxford (1977) où il dirigea le Programming Research Group jusqu'en 2000.
Il rejoignit ensuite Microsoft Research Cambridge comme chercheur principal, poursuivant ses travaux sur la sémantique unifiée de la programmation concurrente. Élu Fellow de la Royal Society en 1982, il fut anobli en 2000, lauréat du Turing Award 1980, du Kyoto Prize 2000, de la médaille John von Neumann IEEE (2011) et de la Royal Medal (2023).
Ses contributions fondatrices : Quicksort (1959), Hoare Logic (1969), le concept de moniteur pour la synchronisation (1974), CSP (1978), et l'aveu célèbre sur la null reference — sa « billion-dollar mistake ».
📐 CSP : définition & modèles sémantiques
CSP (Communicating Sequential Processes) est un langage formel de description des interactions entre processus concurrents, membre de la famille des algèbres de processus. Introduit par Tony Hoare en 1978 (article ACM), reformulé théoriquement avec Stephen Brookes et A.W. Roscoe en 1984–1985. Le modèle est fondé sur la communication synchrone par rendez-vous (canaux sans mémoire intermédiaire).
CSP propose trois modèles sémantiques emboîtés, du plus abstrait au plus complet :
Modèle des Traces
Modèle Stable Failures
Modèle Failures/Divergences
Q ⊑ P signifie que Q raffine P — tout comportement de Q est admis par P. C'est le fondement des vérificateurs comme FDR4 : on vérifie qu'une implémentation raffine sa spécification.
⚙️ Opérateurs algébriques
| Opérateur | Notation | Description |
|---|---|---|
| STOP | STOP | Processus en interblocage immédiat (deadlock). N'accepte aucun événement. |
| SKIP | SKIP | Terminaison réussie. Communique le signal interne ✓ puis s'arrête. |
| Préfixage | a → P | Communiquer l'événement a, puis se comporter comme P. Brique fondamentale. |
| Choix externe | P ☐ Q | L'environnement choisit entre P et Q selon le premier événement offert. Déterministe. |
| Choix interne | P ⊓ Q | Le processus choisit non-déterministement entre P et Q, sans signal à l'environnement. |
| Entrelacement | P ||| Q | P et Q s'exécutent de façon totalement indépendante et entrelacée, sans synchronisation. |
| Parallèle d'interface | P |[X]| Q | P et Q se synchronisent sur les événements de l'ensemble X, s'entrelacent sur les autres. |
| Parallèle total | P || Q | P et Q se synchronisent sur tous les événements communs (|[α P ∩ α Q]|). |
| Masquage (Hiding) | P \ X | Rend les événements de X internes (invisibles à l'observateur). Permet l'abstraction. |
| Renommage | P[[a/b]] | Renomme l'événement b en a dans le comportement de P. Utilisé pour le câblage de composants. |
| Composition séquentielle | P ; Q | Exécute P jusqu'à SKIP, puis enchaîne avec Q. Modélise la séquence dans les systèmes terminants. |
| Interruption | P △ Q | P peut être interrompu par Q à tout moment. Modélise les exceptions et les préemptions. |
| Récursion | μ P . F(P) | Point fixe — définit les processus réactifs infinis. Base des systèmes non-terminants. |
| Réplication | ||| i : S • P(i) | Entrelacement indexé sur un ensemble S. Crée des collections paramétriques de processus. |
🔧 Outils formels
FDR4 CommercialGratuit acad.
ProB Open source
PAT Gratuit
SyncStitch
Circus / CML Académique
Timed CSP / TCSP
🌐 Influence sur les langages modernes
Go (Golang)
Erlang / Elixir
Clojure core.async
core.async de Clojure implémente CSP explicitement : channels bufferisés ou non, go blocks (coroutines légères), alts! (choix externe CSP). Rich Hickey a publié une conférence détaillant pourquoi CSP est supérieur aux callbacks et aux futures pour la composition de systèmes asynchrones.Crystal / occam
PAR, synchronisation par ALT (choix gardé de Dijkstra). Influence directe sur les processeurs parallèles embarqués des années 1980–90. occam-π étend occam avec les π-calcul (mobilité de canaux).Haskell STM & IORef
Control.Concurrent.Chan) pour le passage de messages à la CSP. La bibliothèque Control.Concurrent.CML implémente le Concurrent ML (variant CSP fonctionnel).Kotlin coroutines / Swift actors
🏭 Applications industrielles & académiques
Vérification de processeurs
Systèmes avioniques ISS
Sécurité des smart-cards
Protocoles de sécurité
Systèmes ferroviaires
Recherche académique 2023–2026
📰 Actualités & Ressources
sync et context, sémantiques renforcées pour les channels avec generics (Go 1.21+).Livre fondateur — Hoare 1985
The Theory and Practice of Concurrency
Article original — Hoare 1978
Hoare Logic (1969)
{P} S {Q}. Fondement de la vérification de programmes impératifs, précurseur de la logique de séparation (O'Hearn, Reynolds, Yang — 2001).