Paradigmes et interprétation

Ce cours s'intéresse aux concepts qui sont à la base de nombreux langages de programmation. Afin de comprendre ces concepts, on programmera des interpréteurs de petits langages qui les mettent en oeuvre.

Description

Ce cours s’intéresse à la compréhension de différents concepts qui sont à la base de nombreux paradigmes de programmation. Ces concepts sont introduits au fur et à mesure sur des langages de programmation “jouets”, dans lesquels on se focalise sur un aspect essentiel, sans chercher à étudier un vrai langage. Pour bien comprendre en profondeur ces paradigmes, on programme ensuite des interpréteurs pour les langages jouets étudiés en utilisant de vrais langages (Java, Typescript, Racket, Rust, etc).

Compétences développées

Ce cours développe l’abilité à se familiariser rapidement avec de nouveaux langages, à la fois sur le plan théorique, en comprenant les paradigmes de programmation qui les sous-tendent, et en pratique, en travaillant sur des projets à réalisés dans des langages qui n’ont pas forcément été étudiés dans d’autres cours et qu’il faut apprendre “à la volée”.

Modalités de contrôle des connaissances

Le cours est en trois partie, avec trois enseignants différents. Chaque partie donne lieu à une note de contrôle continu spécifiée par l’enseignant (partiel, TP noté, projet, rapport, etc). Chaque

  • note de contrôle continu de partie 1: 1/6
  • note de partie 2: 1/6
  • note de partie 3: 1/6
  • note de contrôle terminal : 1/2

Contenu

Partie 1 : paradigmes logiques et impératifs

  1. Evaluation d’expression arithmétique, notion d’espace de noms
  2. Paradigmes de gestion mémoire: gestion explicite, ramasse-miette, et discipline d’ownership
  3. Paradigme logique: introduction à Prolog. Interpréteur Datalog.
  4. Unification, interpréteur Prolog.

Partie 2 : paradigme fonctionnel

  1. Introduction à Racket.
  2. Expressions arithmétiques et fonctions.
  3. Ordre supérieur
  4. Récursivité et paresse

Partie 3 : paradigme objet, typage

  1. Objets et classes.
  2. Typage
  3. Sous-typage.
  4. Typage et classes

Ressources