Cours de Programmation Fonctionnelle Avancée 2013/2014
Master d'Informatique, 1ère annéeLaboratoire Preuves, Programmes, Systèmes (PPS)
Université de Paris Diderot Paris 7
e-mail: roberto@dicosmo.org
WWW: http://www.dicosmo.org
- Salle et Horaires
- Public
- Contenu du cours
- Planning
- Contrôle de connaissances
- Le projet
- Ressources et Bibliographie
Salle et Horaires
Mercredi, 14h à 16h, salle 247E. Premier cours: mercredi 18 Septembre.Le TD/TP a lieu les mrecredis de 16h à 18h en salle 2031. Premier TD/TP: le mercredi 18 Septembre.
Public
Ce cours est ouvert à tous les étudiants de la première année du Master Informatique, et il est obligatoire pour suivre la filière Langages de Programmation en deuxième année.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, programmations concurrente et parallèle seront abordés systématiquement dans le cours.
Planning du cours
Le planning sur cette page est indicatif et évoluera pendant le cours: revenez donc ici régulièrement. La date indiquée est celle de la dernière mise à jour des notes.
N'oubliez pas de noter les jours feriés prévus par le Calendrier de l'université.
- Introduction, rappels et plan (PDF) (19/09/2013)
- Le système de modules : structures, signatures et foncteurs (PDF) (25/09/2013 et 02/10/2013)
- Usages avancés du système de type: types phantomes, variants polymorphes, GADT (PDF, et le code OCaml) (09/10/2013 et 16/10/2013)
- Programmation avec des combinateurs, map/reduce, optimisations (PDF, le code OCaml de MSS et le code OCaml pour les combinateurs) (23/10/2013)
- Programmer avec la comprehension (PDF et le code OCaml) (30/10/2013)
- Monades avec somme (PDF et le code OCaml) (06/11/2013)
- Structures fonctionnelles efficaces: les Zippers (PDF et le code OCaml) (13/11/2013)
- Structures fonctionnelles efficaces: files et arbres red-black, analyse de côut amorti (PDF et le code OCaml) (27/11/2013)
- Evaluation paresseuse et structure fonctionnelles persistantes efficaces (PDF, et le code OCaml) (04/12/2013 et 11/12/2013)
- Introduction à la programmation monadique: les interpreteurs (PDF, et le code OCaml) (11/12/2013)
- Transformation de monades
- La modade Lwt pour la programmation concurrente collaborative
- La programmation avec les continuations
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.Le projet
Le sujet du projet sera mis en ligne- sur la page dédiée au cours de Gabriel Scherer
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
- Mise à niveau OCaml, Jean-Christophe Filliatre, 2005
- OCaml from the very beginning, John Whitington, 2013
- Développement d'applications avec Objective Caml, Emmanuel Chailloux, Pascal Manoury, Bruno Pagano
- Purely Functional Data Structures, Chris Okasaki, 1999
- Le chapitre 10 du livre OCaml for Scientists contient des exemples complets de solutions fonctionnelles élégantes
- Une liste assez complète de livres sur la programmation fonctionnelle est maintenue par Alex Ott.
Équipe pédagogique
Roberto Di Cosmo (Cours)Gabriel Scherer (TD/TP,
gabriel dot scherer at gmail
)
http://listes.sc.univ-paris-diderot.fr/sympa/info/m1-13-14-pfav
inscrivez-vous de suite.