Résumé
Le cinquième cours a débuté par un approfondissement des notions d'exceptions et de gestionnaires d'exceptions introduites au deuxième cours. Nous avons montré comment introduire la gestion d'exceptions dans un langage fonctionnel, dans quels cas elle peut être utile, et comment lui donner une sémantique formelle par des règles de réduction sous contexte. Ensuite, nous avons introduit les effets définis par le programme et leurs gestionnaires d'effet tels qu'ils se présentent dans le langage OCaml version 5 : comme une généralisation des exceptions où le gestionnaire reçoit non seulement la valeur de l'effet, mais aussi une continuation délimitée permettant de reprendre le calcul là où l'exception a été levée. Derrière leur apparente simplicité, les gestionnaires d'effets sont un puissant opérateur de contrôle, comme nous l'avons montré sur plusieurs exemples : inversion de contrôle sur les itérateurs ; transformation d'effets de sortie ; et implémentation de threads coopératifs, incluant la communication par messages synchrones. Enfin, nous avons défini une sémantique par réductions sous contextes pour un petit langage d'effets et de gestionnaires d'effets, et esquissé une transformation CPS pour ce langage.