IFT 2035 -- Concepts des langages de programmation


Professeur: Stefan Monnier


Page Moodle du cours pour A2023.

Logistique

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, John Wiley & Sons.

Ravi Sethi, Programming Languages -- Concepts and Constructs, Addison-Wesley.

Autres manuels suggérés

Autres livres (pas directement utiles pour le cours)

Horaire

Jour Heure Lieu Type
Mardi 15h30-17h00 N-515 Cours
Mercredi 09h00-10h30 Z-310 Cours
Mercredi 10h30-12h30 Z-310 Démonstration
01 nov 09h30-11h30 Z-110 Examen Intra
20 déc 08h30-11h30 AA-1140 Examen Final

Le choix des salles n'est pas sous mon contrôle et est parfois changé sans préavis,
donc dans le doute, faites plutôt confiance au formulaire honteux de Synchro

Évaluation

Il y aura 2 travaux pratiques (de 22½ points chacun) et 2 examens (25 points chacun), plus 5 points répartis sur 5 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.
Les examens se font à livre fermé: vous n'avez droit qu'à une page de notes (recto) écrite à la main, pas de livre ni de calculatrice autorisés.

Rappel

Le plagiat et la copie 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 furent inspirées il y a bien longtemps de celles de Marc Feeley, sauf les erreurs bien sûr.

Intro (source)
Syntaxe (source)
Exemple de spécification
Programmation fonctionnelle (source)
Macros (source)
Programmation logique (source)
Programmation impérative (source)
Gestion mémoire (source)
Programmation orientée objets (source)
Programmation concurrente (source)
Types dépendents (source)

Food for thought

Recommendations peu orthodoxes de style de codage, de John Carmack.

Allergie aux booléens de Bob Harper.

La notion d'expressivité, par Matthias Felleisen.

PL Notation 101, par Jeremy Siek.

Démonstrations

Les données de chaque démonstration seront placées ici. Les exercices sont à faire individuellement, pas en groupe, et ne sont pas notés, sauf ceux labellés "½" et qui sont à rendre par StudiUM, qui comptent chacun pour 1% de la note.

Exercices 1, à faire à la démo du 6 sep.
Exercices 2, à faire à la démo du 13 sep.
Exercices 2½, à rendre avant le 20 sep.
Exercices 3, à faire à la démo du 20 sep.
Exercices 3½, à rendre avant le 27 sep.
Exercices 4, à faire à la démo du 27 sep.
Exercices 4½, à rendre avant le 4 oct.
Exercices 5, à faire à la démo du 4 oct.
Exercices 6, à faire à la démo du 11 oct.
Exercices 6½, à rendre avant le 25 oct.
Révision d'intra, à faire à la démo du 25 oct.
Exercices 7, à faire à la démo du 8 nov.
Exercices 7½, à rendre avant le 15 nov.
Exercices 8, à faire à la démo du 15 nov.
Exercices 9, à faire à la démo du 22 nov.
Exercices 10, à faire à la démo du 29 nov.
Révision de final, à faire à la démo du 6 déc.

Extras

Révision d'intra, à faire entre amis.
Révision de final, à faire sur la terrasse, avec un sorbet.
Autres révisions d'intra et de final, au cas où ceux-là ne vous plaisent pas.

Travaux Pratiques

Les données de chaque travail pratique seront placées ici.

Les travaux pratiques sont à faire en groupe de 2.

TP #1

La donnée du travail (et son source LaTeX). Le code source Haskell correspondant.
Un fichier d'exemples de code Slip.
ATTENTION: veillez à télécharger ces fichiers plutôt que de copy&paste, sinon vous risquez d'avoir des problèmes d'encodage!
Ce TP compte pour 23% de la note finale.

TP #2

La donnée du travail (et son source LaTeX). Le code source Haskell correspondant.
Le fichier d'exemples de code Slip est le même que pour le TP#1.
ATTENTION: veillez à télécharger ces fichiers plutôt que de copy&paste, sinon vous risquez d'avoir des problèmes d'encodage!
Ce TP compte pour 22% de la note finale.

Divers liens pour les langages abordés

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.

Liens pour Elisp (Emacs Lisp)

Dans Emacs, vous pouvez démarrer une boucle interactive Elisp avec M-x ielm RET. Une introduction à Elisp est disponible directement depuis la barre de menu d'Emacs sous Help ⇒ More Manuals ⇒ Introduction to Emacs Lisp et le manuel de référence du langage est similairement disponible sous Help ⇒ More Manuals ⇒ Emacs Lisp Reference.

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 quelles autres valeurs peuvent être utilisées.

Liens pour Prolog

Liens pour Rust

Liens pour LaTeX

LaTeX est le système de préparation de documents utilisé dans ce cours. Il y a beaucoup de matériel en ligne disponible pour LaTeX. Une bonne documentation est disponible par exemple dans le "wikibook" sur LaTeX.