La connaissance intime des langages de programmation est cruciale pour pouvoir écrire des programmes fiables, portables, et efficaces. La compréhension des techniques d'implantation des langages de programmation, autant d'interprétation, que de compilation, et donc non seulement indispensable à la réalisation de nouveaux compilateurs et la conception de nouveaux langages, mais est beaucoup plus généralement nécessaire pour écrire du code de qualité. C'est dans cette optique que ce cours traitera des sujets qui touchent à la définition, l'interprétation, et la compilation des langages de programmation. Les sujets suivants sont au menu, quoiqu'il n'y aura pas le temps de tous les couvrir:
| Jour | Heure | Lieu | Type |
|---|---|---|---|
| Mardi | 13h30-15h30 | AA-1411 | Cours |
| Vendredi | 9h30-10h30 | AA-1411 | Cours |
| Vendredi | 10h30-12h30 | AA-1411 | Exercices |
| 23 avr | 9h30-12h30 | AA-1411 | Final |
Il n'y aura pas de cours les 19 et 22 janvier.
Voir aussi la page du programme des cours pour ift-3065 et ift-6232
L'évaluation du cours sera basée principalement sur un travail pratique divisé en 2 étapes: la première consistera en l'implantation d'un interpréteur d'un langage de programmation, et la seconde le transformera en un compilateur. Chaque partie compte pour 25% de la note finale. De plus, 10% de la note sera basée sur une présentation en classe du compilateur.
Le projet est à faire seul ou par groupe de deux. Comme mentionné, il consiste en l'implantation d'un compilateur. Le langage à compiler, ainsi que les fonctionnalités du compilateurs seront à votre choix. Vous devrez présenter un plan de travail au début du trimestre, puis un rapport accompagné du code correspondant pour chacune des deux phases. La travail attendu d'un étudiant inscrit à IFT-6232 est bien sûr plus conséquent, donc il devra inclure un langage plus complexe et/ou des fonctionnalités supplémentaires.
Pour IFT-3065, la note finale sera aussi composée à 40% de l'examen final.
Pour IFT-6232, la note finale sera aussi composée à 20% de l'examen final, et à 20% de 2 présentation d'articles en classe.
Tout au long du cours des exercices non-évalués seront demandés (lecture d'articles, lecture de code source de compilateurs existants et exercices de programmation). Il est important de faire les exercices car les évaluations viendront tester l'acquisition des concepts visés par les exercices.
Il n'y a pas de manuel officiel pour ce cours. Si vous voulez un livre pour accompagner ce cours, je recommande un mélange de Advanced Compiler Design & Implementation de Muchnick, Building an Optimizing Compiler de Morgan, Modern Compiler Implementation in ML de Appel, ainsi que Types and Programming Languages de Benjamin C. Pierce.
Le travail pratique est à faire seul ou en groupe de deux. Il consiste en deux parties: la première consiste en l'implantation d'un interpréteur, et la deuxième y ajoutera un back-end pour en faire un compilateur.
Le langage à compiler est à votre choix. Compiler un langage de programmation réel est une grosse tâche, donc vous allez généralement vouloir vous limiter à un sous-ensemble ou une variante simplifiée; de plus votre compilateur souffrira probablement de diverses limitations.
Le langage dans lequel est écrit le compilateur peut être choisi entre Haskell, SML, et OCaml. D'autres choix peuvent se justifier, mais il vous faudra me convaincre. Votre code doit fonctionner et sera testé sur un système GNU/Linux. Le rapport doit être livré dans le format PDF et le code ne doit pas dépasser 80 colonnes.
La première phase devra normalement contenir les éléments suivants: analyse lexicale, analyse syntaxique, évaluateur, runtime, et ensemble de tests, dont au moins un suffisamment complexe, tel qu'une routine de tri de tableau ou de liste.
La deuxième phase devra générer du code pour l'architecture de votre choix, e.g. AMD64, IA32, ARM, MIPS, ou encore C ou LLVM.
Chaque phase du TP compte pour 25% de la note finale et sera accompagnée d'un rapport (max 6 pages pour le premier, 10 pages pour le dernier). De plus, une présentation en classe de votre travail, à la fin du cours, comptera pour 10% de la note finale.
La phase 1 du TP est à rendre au plus tard le 27 février. La phase 2 du TP sera à rendre au plus tard le 26 avril. Vous devez avant ça présenter un brouillon de votre plan de travail pour la première phase du TP d'ici au 15 janvier. Ce plan (maximum 1 page) devra inclure une description brève du langage que vous voulez implanter, des phases et fonctionnalités supportées, ainsi qu'un calendrier.
Les étudiants inscrit au cours IFT-6232 devront bien sûr viser un langage plus complexe/complet et une implantation plus sophistiquée.
Ressources:
/u/dift6232/bin.
Le travail est à rendre avec la command remise:
% ssh remise.iro.umontreal.ca
% remise ift3065 tp1 rapport.pdf <files> ...
Utiliser ift3065 ou ift6232 selon le cours
auquel vous êtes inscrit (et utiliser tp2 pour la deuxième
partie du travail pratique).
Chaque étudiant de ift-6232 doit présenter 2 articles de la liste ci-dessous (d'autres articles peuvent être proposés, bien sûr). Les présentations dureront un maximum de 30min chacune. Une présentation d'article devrait:
Pour cela, il sera généralement nécessaire d'introduire divers concepts et techniques sans lesquels l'article serait incompréhensible. Aussi il sera souvent utile de remettre l'article dans son contexte: expliquer quels étaient les problèmes importants de l'époque et quels problèmes actuels ne les affectaient pas encore. Une discussion de l'impact/influence de l'article est aussi une bonne idée.
La contrainte principale est le temps: 30min c'est très court pour présenter tout ça. Donc il vous faudra bien planifier votre présentation, en pensant à quels sont les éléments que l'audience doit vraiment comprendre. En général vous devrez pour cela éliminer toutes sortes de "détails" intéressants. Ne vous étonnez pas si vous finissez par passer 20minutes d'introduction et seulement 10min sur l'article en soi (mais assurez-vous que vous aurez le temps d'arriver à ces 10minutes). Aussi pour pouvoir aller plus vite, il vous faudra utiliser des slides, ce qui vous aidera aussi à mieux structurer la présentation.
Note: les présentations se feront avec mon laptop pour réduire les temps de transfert d'une machine à une autre. Donc vous devrez m'envoyer par email vos slides au format PDF au plus tard 2h avant le début du cours.
| Stefan Monnier |
|