Dans ce cours, nous étudions plusieurs aspects "de haut-niveau" des langages de programmation. Nous introduisons de nouveaux concepts qui complémentent la formation en programmation (modules, objets, sous-typage, concurrence) ainsi que des techniques qui enrichissent la vision des différents paradigmes de programmation (transformations monadiques pour différents types d'effets). Même si le langage de référence pour l'examen est OCaml, lors du cours nous utiliserons aussi des extraits de code Haskell, Scala, Perl 6, C#, Java, Erlang, Pascal, Python, Basic, CDuce, Xslt, etc. L'idée étant de mettre l'accent sur les concepts de la programmation plus que sur la programmation dans un langage particulier.
Systèmes de modules
1. Introduction à la Modularité.
2. Modules (simples) en ML.
3. Foncteurs.
Classes vs. Modules
4. Modularité dans les langages objets
5. Mixins
6. Dispatch multiple
7. Les classes en OCaml
8. Les Typeclasses d'Haskell
9. Generics
Transformation de programmes
10. A propos de la pureté
11. Rappels de sémantique opérationnelle
12. Closure conversion
13. Défonctionalisation
14. Exception passing style
15. State passing style
16. Continuations, générateurs et co-routines
17. Continuation passing style
Programmation Monadique
18. Votre première monade
19. Exemples de monades
20. Les lois monadiques
21. Transformation de programmes et monades
22. Monades comme technique de programmation
23. Monades et foncteurs
Typage et Sous-typage
24. Sous-typage des types simples
25. Extensions: produits, enregistrements, références
26. Types ensemblistes: unions, intersections et négations
27. Covariance et contra-variance
28. Filtrage par types ensemblistes: XML et CDuce
29. Reconstruction de types : le typage de ML
Concurrence
30. Notions de concurrence
31. Multi-threading préemptif
32. Mutexes, Conditional Variables, Monitors
33. Travailler sans exclusion mutuelle
34. Multi-threading coopératif
35. Communication par canaux
36. Software Transactional Memory