Beaucoup de programmes implémentent des « systèmes réactifs », dont les transitions sont dictées par l'environnement plutôt que déterminées par des données initiales. Les exemples typiques de tels systèmes sont les interfaces graphiques et les serveurs réseau.
Il existe deux techniques classiques pour développer les systèmes réactifs. L'utilisation de processus (threads) multiples permet l'écriture de code relativement naturel, mais se traduit par un coût non négligeable à l'exécution, notamment en mémoire. L'utilisation d'une « boucle à évènements » et de primitives non-bloquantes d'entrées/sorties permet d'obtenir des programmes plus efficaces, au prix d'un exercice de programmation assez pénible.
Dans cet exposé, je montrerai comment un programme à processus (coopératifs) multiples peut être transformé en un programme séquentiel avec boucle à évènements de manière complètement automatique. Plus précisément, je décrirai une série de transformations (incluant la transformation CPS) qui transforment un programme écrit dans une extension concurrente de « C » en un programme « C » complètement séquentiel.