Résumé
Le quatrième cours a introduit la notion de continuation d'un point de programme dans un programme impératif, ou d'une sous-expression dans un programme fonctionnel. Il s'agit de la suite des calculs restant à effectuer pour atteindre la fin du programme, représentée soit par un objet du langage de programmation (commande, fonction...), soit par un objet mathématique. Dans les travaux de recherche des années 1965–1975 sur la sémantique dénotationnelle, les continuations apparaissent comme moyen de donner une sémantique mathématiquement précise aux branchements « goto » non locaux du langage Algol.
Mais c'est dans le cadre des langages de programmation fonctionnelle que les continuations montrent tout leur intérêt : tout d'abord, pour spécifier complètement les stratégies de réductions (comme l'appel par valeur et l'appel par nom) par transformation systématique des programmes, pour les mettre en style à passage de continuations (CPS, Continuation-Passing Style) ; ensuite, pour programmer manuellement dans ce style à passage de continuations, ce qui permet de définir de nombreuses structures de contrôle avancées (itérateurs, générateurs, coroutines, threads coopératifs) dans le langage même, sous forme de bibliothèques. Enfin, l'ajout d'opérateurs de contrôle à un langage fonctionnel, comme le call/cc du langage Scheme, donne aux programmes de nouveaux moyens pour capturer, réifier et relancer leurs propres continuations, permettant ainsi de définir des structures de contrôle avancées dans le langage tout en gardant le programme en « style direct », sans mise en forme CPS manuelle.