M1 2019/2020 : Programmation Fonctionnelle Avancée

Université Paris-Diderot, UFR d'Informatique

TP du vendredi 24 janvier annulé

En raison d’un mouvement de grève du personnel en soutien à l’appel à Université morte de l’Université de Paris du 22 janvier, le TP Programmation Fonctionnelle Avancée du vendredi 24 janvier est annulé. En ce qui concerne les autres enseignements de 24 janvier merci de suivre les communications de l'UFR.

Inscriptions

Nous avons actuellement prévu un seul groupe TP avec 30 places. Nous sommes donc obligé de restreindre les inscriptions. Les étudiants du parcours LP sont inscrits d'office à ce cours. Les autres étudiants qui souhaitent s'y s'inscrire doivent remplir ce sondage sur moodle.

Les TP

Les feuilles de TP sont maintenant disponibles sur ce répertoire git.

Contenu du cours

La programmation fonctionnelle est née presque en même temps que la programmation impérative, avec le langage Lisp à la fin des années 1950. Utilisée comme paradigme de programmation privilégié dans les années 1970 à 1990 pour l'Intelligence Artificielle, elle demandait des machines puissantes et chères, et paraissait être réservée à des usages très spécialisés. Depuis les années 1990, on dispose de langages fonctionnels avancés qui sont à la fois puissants, expressifs et efficaces. La famille des langages ML (comme OCaml, Haskell, SML/NJ) dispose en plus de méchanismes de typage puissants et sûrs, et d'abstractions qui permettent une programmation concise, comme la définition par cas, les types algébriques, les modules paramétriques, et, dans le cas d'OCaml, aussi un support complet pour la programmation objet. Avec l'essor du Web, des grandes masses de données et des applications distribuées, la programmation fonctionnelle commence à être reconnue comme un des paradigmes les plus adaptés pour construire de façon concise et simple des applications distribuées dans le Cloud. Il suffit de penser au schèma MapReduce popularisé par Google, qui n'est autre qu'une combinaison de deux primitives fonctionnelles connues depuis longtemps.

Ce cours se propose d'approfondir les connaissances des étudiants sur la programmation fonctionnelle, en utilisant pour cela toutes les fonctionnalités du langage OCaml. Système de modules, structures de données fonctionnelles efficaces, calcul paresseux, programmation monadique, usages avancés du système de type, combinateurs, transformations de programmes seront abordés systématiquement dans le cours.

Planning indicatif du cours

Numéro Date Cours Contenu
1 22/01 Chapitre 0 : Introduction, rappels OCaml [transparents] [examples de code]
2 29/01 Chapitre 1 : Le système de modules : structures, signatures [transparents] [examples de code]
3 05/02 Terminer chapitre 1. Chapitre 2 : Structures fonctionnelles efficaces: Les Zippers [transparents] [examples de code]
4 12/02 Chapitre 3 : Structures fonctionnelles efficaces: files et arbres red-black, analyse de coût amorti [transparents] [examples de code]
5 26/02 Chapitre 4 : Évaluation paresseuse
6 04/03 Chapitre 5 : Structures fonctionnelles efficaces : la paresse maîtrisée
7 11/03 Chapitre 6 : Structures partagées : le hashconsing
8 18/03 Chapitre 7 : Combinateurs
9 25/03 Chapitre 8 : Inférence de types, polymorphie et traits impératifs.
10 01/04 Chapitre 9 : Usages avancés du système de type : variants polymorphes et sous-typage.
Chapitre 10 : Usages avancés du système de type : types phantomes et GADTs
11 22/04 Terminer le chapitre 10 : Usages avancés du système de type : types phantomes et GADTs
Chapitre 11 : Introduction à la programmation monadique

Contrôle de connaissance

La note finale de la première session est composée par un tiers par la note du projet, et deux tiers par la note d'écrit. Lors de la deuxième session, la note est le maximum entre la note d'ecrit et 1/3 de la note du projet plus 2/3 de la note d'écrit.

Ressources et Bibliographie

Référence du langage OCaml

Forums et listes de discussion

Une liste de forums dédiés à OCaml est maintenue sur le site d'Inria.

Livres et polycopiés

Équipe pédagogique

Ralf Treinen(Cours)
Pierre Letouzey (TD/TP)

Valid HTML 4.01 Transitional