Transformation de Programmes

Description

Ce module s'intéresse à diverses phases de remaniement automatique de code qui ont typiquement lieu au coeur d'un compilateur. Ce cours s'est d'ailleurs intitulé “compilation avancée” pendant quelques années. On ne se concentre pas ici sur l'étape amont d'un compilateur (le “parsing”) ni sur l'étape finale (la production d'assembleur) mais plutôt sur les étapes intermédiaires ayant lieu sur l'AST (Abstract Syntax Tree, alias Arbre de Syntaxe).

Syllabus

Sujets centraux

  1. Représentations intermédiaires, manipulations d'AST
  2. Machine à pile, JVM (Java Virtual Machine), Bytecode
  3. Récursivité terminale
  4. Notion de continuations, style par continuation (CPS, Continuation-Passing-Style)
  5. Forme normale “administrative” (ANF)

Sujets potentiellement traités

  1. Notion de trampoline
  2. call-cc (call-with-current-continuation) et les opérateurs de contrôle

Pré-requis

  1. Avoir suivi au préalable un premier cours de compilation est fortement recommandé (par exemple celui de M1 ici-même)
  2. Avoir déjà une bonne pratique de la programmation fonctionnelle (voir par exemple Programmation Fonctionnelle en L3 ou Programmation Fonctionnelle Avancée en M1).