Xavier Rival – 2ème année, École Polytechnique
Le Cours
Dans le monde industriel comme dans le monde du logiciel libre, nombreux sont les logiciels de grande envergure, que ce soit de par leur taille, de par le nombre de leurs auteurs, ou de par leur durée de vie. De telles réalisations ne sont possibles que grâce à une architecture modulaire, qui idéalement doit permettre à chaque composant d’être conçu, réalisé, testé, modifié, ré-utilisé, indépendamment des autres composants du système.
Le principal objectif de ce cours est de présenter les concepts et les mécanismes fondamentaux qui, dans un langage de programmation moderne, permettent cette organisation modulaire. Par exemple, l’encapsulation, c’est-à-dire l’idée que certains détails d’un composant doivent être totalement opaques pour ses clients, peut être obtenue via différents mécanismes (abstraction de types, abstraction procédurale...). De même, la composabilité, c’est-à-dire l’idée que les liens entre composants ne doivent pas être figés à l’avance, peut être réalisée via différents moyens (paramétrisation, définition retardée...). S’il fallait résumer le cours en un concept, ce pourrait être abstraction, un mot dont nous étudions les multiples significations.
Nous présenterons les principes fondamentaux d’abstraction ainsi que leur mise en oeuvre dans le langage OCaml. Ce langage haut niveau est en effet idéal pour illustrer les concepts vus en cours.
Le cours incluera une introduction à OCaml (aucun pré-requis concernant la connaissance de ce langage), et des séances de travaux dirigés permettant d’en maîtriser l’usage.
Amphis
Les transparents des amphis seront mis à jour après chaque séance :
- Amphi 1, 9 avril 2018: Présentation du Cours et Courte Introduction à OCaml
- Amphi 2, 16 avril 2018: Systèmes de Types
- Amphi 3, 30 avril 2018: Fonctions et Programmation Fonctionnelle
Travaux dirigés
Composition des groupes :
- Groupes 1 et 4 : Salle 32, Kaustuv Chaudhuri et Maxime Buron
- Groupes 2 et 5 : Salle 31, Samuel Mimram et Simon Forest
- Groupes 3 et 6 : Salle 34, Pierre-Yves Strub et Hugo Illous
Liens vers les sujets de chacune des séances :
- TD 1, mardi 10 avril 2018: Introduction à la programmation OCaml
- TD 2, mardi 17 avril 2018: Tas binomiaux
- TD 3, mercredi 02 mai 2018: Programmation fonctionnelle
Projets
Le projet est optionnel. Notez toutefois que tout élève candidat à un PA d’info doit avoir complété un projet dans l’un des cours d’informatique en année 2.
Les sujets proposés sont disponibles sur Moodle. Vous pouvez proposer votre propre sujet, mais le travail nécessaire doit être comparable. N’hésitez pas à demander conseil aux enseignants du cours.
Vous devez nous informer avant le 28 avril de votre choix de sujet et de votre binôme éventuel (le projet doit être réalisé seul ou en binôme). Le travail est à rendre avant le 31 mai 2018 et une soutenance orale sera ensuite organisée dans la semaine du 7 juin (date indicative).
Les titres des sujets proposés sont :
- Diagramme de décision binaire et Tetravex (Solving puzzle games using BDDs)
- Interprétation abstraite (abstract interpretation)
- Inégalités linéaires et vérification de programmes (linear inequalities and automatic program verification)
- Preuve automatique de théorèmes (Automatically Proving Predicate Logic Theorems)
Documents et références
Les deux documents suivants permettent de se familiariser rapidement avec OCaml :
- OCaml en trois pages : un résumé parfait des principales constructions du langage
- Comparaison entre OCaml et Java : une introduction utile pour ceux qui ont beaucoup utilisé le langage Java
Les documents suivants fournissent des références plus complètes :
- Le site OCaml officiel avec la distribution du langage, la documentation en ligne, le gestionnaire de paquets et les librairies associées.
- Real World OCaml Éditions O’Reilly.
- Apprendre à programmer avec OCaml Sylvain Conchon et Jean-Christophe Filliâtre. Le code et les exemples peuvent être téléchargé en suivant ce lien.
- Running OCaml