IFT 2035 -- Concepts des langages de programmation


Professeur: Stefan Monnier


Description

Ce cours présente les différents concepts à la base des langages de programmation. Le cours vise à aider les étudiant(e)s à mieux connaître les outils qu'ils utiliseront dans le reste de leur carrière, et à les familiariser avec des méthodes et styles de programmation avancés Plusieurs styles de programmation seront vus, tels la programmation fonctionnelle, la programmation impérative, la programmation logique.

Des langages de programmation représentatifs seront étudiés à tour de rôle pour explorer chaque style de programmation et, lorsque nécessaire pour expliquer certains concepts, des exemples seront tirés d'autres langages. Nous ne cherchons pas à former des spécialistes d'aucun des langages étudiés, mais plutôt à donner une solide formation de base qui permettra à l'étudiant(e) de maîtriser en peu de temps n'importe quel nouveau langage.

Des travaux de programmation permettrons aux étudiant(e)s de confronter dans la pratique les concepts présentés dans le cours. Le cours n'est cependant pas un cours de programmation et il n'entend pas non plus enseigner certains langages: il se concentre sur les concepts théoriques sous-jacents.

Sujets traités

Syntaxe, sémantique, types, interprétation et compilation, structures de contrôle, représentations des données, portée, passage d'arguments, gestion mémoire, procédures, traitement de listes, fonctions d'ordre supérieur, macros, variables et environnements, ...

Manuels recommandés

David A. Watt, Programming Language Design Concepts, 2004, John Wiley & Sons, ISBN 0-470-85320-4.

Ravi Sethi, Programming Languages -- Concepts and Constructs, 1996, 2e édition, Addison-Wesley, ISBN 0-201-59065-4.

Autres manuels recommandés

Horaire

Premier cours: mardi 1 septembre 2009, 13:30-14:30.
Deuxième cours: mercredi 2 septembre, 9:30-10:30.
Dernier cours: lundi 7 décembre.

Jour Heure Lieu Type
Lundi 12h30-14h30 AA-1207 Cours
Mardi 13h30-14h30 AA-1409 Cours
Mercredi 8h30-10h30 AA-1340 Démonstration
27 oct 13h30-15h20 Z-110 Intra
15 déc 13h30-16h20 AA-1355 Final

Voir aussi la page du programme des cours.

Démonstrateurs

Leurs heures de disponibilité s(er)ont sur la page des démonstrations.

Évaluation

Il y aura 3 travaux pratiques de 15 points chacun et deux examens de 25 points chacun, plus 5 points sur les exercices hebdomadaires. La note finale sur 100 sera convertie en note litérale à la fin du cours seulement, selon un barème qui dépendra de la moyenne du groupe et de la répartition des notes des étudiants. Un total aux deux examens inférieur à 25 points (i.e. la moitié des points) est éliminatoire.

Les travaux pratiques sont à faire en groupe de 2 (jamais plus, et très rarement moins). Les exercices sont à faire seuls. Et les examens se font à livre fermé: aucune note ni aucun livre autorisé.

Rappel

Le plagiat et le copiage sont des fautes graves passibles de sanctions disciplinaires. Dans ce cours, nous prendrons toutes les mesures que nous jugeons nécessaires pour dépister et contrer ce genre d'activités.


Notes de cours

Ces notes sont inspirées de celles de Marc Feeley, sauf les erreurs bien sûr.

Intro et syntaxe
Programmation fonctionnelle
Programmation impérative
Macros
Programmation logique
Programmation concurrente

Démonstrations

Les données de chaque démonstration seront placées ici, et les solutions aux démonstrations passées seront sur la page des démonstrations.

Les exercices sont à faire individuellement, pas en groupe.

Exercices 1, à faire à la démo du 9 septembre.
Exercices 2, à faire à la démo du 16 septembre.
Exercices 3, à faire à la démo du 23 septembre.
Exercices 3½, à rendre au début de la démo du 30 septembre.
Exercices 4, à faire à la démo du 30 septembre.
Exercices 5, à faire à la démo du 7 octobre.
Exercices 5½, à rendre au début de la démo du 14 octobre.
Exercices 6, à faire à la démo du 14 octobre.
Vieil examen, à faire quand vous voulez.
Exercices 7, à faire à la démo du 28 octobre.
Exercices 7½, à rendre au début de la démo du 11 novembre.
Exercices 8½, à rendre au début de la démo du 18 novembre.
Exercices 9, à faire à la démo du 18 novembre.
Exercices 10, à faire à la démo du 25 novembre.
Exercices 10½, à rendre au début de la démo du 2 décembre.
Exercices 11, à faire à la démo du 2 décembre.
Vieil examen, à faire quand ça vous chante.

Travaux Pratiques

TP #1

La donnée du travail. Le code source correspondant.

À rendre le mercredi 28 (et non le 29) octobre à 8h30.

Pour vous aider à tester votre code, quelques exemples de code sont fournis dans le fichier exemples.slip.

TP #2

La donnée du travail. Le code source correspondant.

À rendre le mercredi 25 novembre à 8h30.

TP #3

La donnée du travail. Le code source correspondant.

Première partie à rendre le mercredi 9 décembre à 23h59.

Rendu final le dimanche 20 décembre à 23h59.

Liens pour Emacs

GNU Emacs est l'éditeur recommandé dans ce cours pour écrire du code. Parmi les bonnes ressources pour ce qui a trait à Emacs, nous trouvons le manuel online disponible dans le menu Help, la commande 'i' dans ce manuel, le groupe de discussion gnu.emacs.help, le Wiki, et la "refcard" qui est distribuée avec Emacs, dans un fichier nommé quelque chose comme /usr/share/emacs/23.1/etc/refcard.ps.

Liens pour Haskell

Liens pour C

Il y a pléthore de livres sur C. Il y a aussi divers tutoriels sur le web. Une bonne source d'information détaillée est la FAQ de comp.lang.c.

Pour les projets en C, je recommande aussi d'utiliser la documentation en ligne de de make, gdb, et glibc. Elle est accessible depuis Emacs avec M-x info (aussi dans le menu Help => Manuals => Browse Manuals with Info).

Pour débugger des problèmes de gestion mémoire, il peut être utile de faire un export MALLOC_CHECK_=2 pour attraper le problème plus tôt. La documentation en ligne de glibc explique quels autres valeurs peuvent être utilisées.

Liens pour Scheme

Gambit-C est disponible sur les machines unix du DIRO sous ~dift3060/g4/bin/gsi.

Liens pour Prolog