Programmation I
Cours : Daniel Hirschkoff (Daniel.Hirschkoff)
TD : Romain Demangeon, Aurélien Pardon, Barbara Petit (Romain.Demangeon, Aurelien.Pardon, Barbara.Petit)
Présentation
Ce cours propose une introduction approfondie aux concepts et aux
techniques de la programmation. Il sera structuré essentiellement
autour du langage OCaml, mais on s’attachera ce faisant à illustrer
des principes généraux en programmation. La programmation en langage
C sera également traitée, et des apartés sur d’autres langages
présentant des originalités par rapport à Caml et C seront
présentés.
Tout au long du cours, on tâchera de développer un double point de
vue, en présentant d’une part des techniques importantes dans la
pratique de la programmation, et d’autre part des questions
sous-jacentes à la conception et au développement d’un langage de
programmation.
Pour les étudiants n’ayant pas une formation de base en
Caml, ou en C, quelques heures de rattrapage seront proposées en
début d’année pour assurer une mise à niveau “minimale”.
Le cours est organisé selon le schéma hebdomadaire suivant: 2h de
cours; 2h de travaux pratiques sur machine; des devoirs à la maison
à faire en binôme.
Plan indicatif
- concepts de base
- programmation impérative, programmation fonctionnelle
-
bases de C, bases de Caml
- interprète/compilateur
- questions liées au choix du style (structures de données,
efficacité, modularité, partage, etc.)
- notion de flot de calcul dans les programmes
-
exceptions, saut inconditionnels
- programmation par continuations
- génie logiciel, architecture du code
-
systèmes de modules, compilation séparée
- programmation orientée objet (eventuellement quelques mots sur
les composants logiciels)
- autres styles de programmation: parallèle, logique, ..
- aspects sémantiques
-
typage (approche "souple" à la C, approche forte à la Caml),
théorème de subject reduction, inférence de types
- objets infinis, retarder les calculs (évaluation paresseuse)
- notions de compilation
-
les étapes de la compilation
- analyses lexicale et syntaxique, les outils lex et yacc
- mémoire à l’exécution
-
allocation dynamique explicite, malloc/free
- glanage de cellules: algorithmes classiques
- autres: s’il reste du temps, d’autres sujets seront abordés, en
particulier en rapport avec des domaines actifs dans le cadre de la
recherche autour des langages de programmation
Bibliographie
- the OCaml programming language: caml.inria.fr
- Brian W. Kernighan et Dennis M. Ritchie. Le langage C, norme
ANSI (english title: "The C programming language"). Dunod, 2000
(1992). Traduit de l’américain.
- Emmanuel Chailloux, Pascal Manoury, et Bruno Pagano.
Développement d’applications avec Objective Caml. Éditions
O’Reilly, Paris, avril 2000.
- Guy Cousineau et Michel Mauny. Approche fonctionnelle de la
programmation. Ediscience international, 1995. Site à consulter:
- AV Aho, R. Sethi, and JD Ullman, Compilateurs: principes,
techniques et outils, InterEditions, 1989
- Harold Abelson and Gerald Jay Sussman. Structure and
interpretation of computer programs. The MIT Press, McGraw-Hill,
1995. Existe aussi en français. Site à consulter:
- une page web liée au cours sera disponible à partir de
l’adresse http://perso.ens-lyon.fr/daniel.hirschkoff