Page Moodle du cours pour A2024.
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
- Graham Hutton, Programming in Haskell, Cambridge University Press.
- Simon Thompson, Haskell: The Craft of Functional Programming, Addison-Wesley.
- Paul Hudak, The Haskell School of Expression, Cambridge University Press.
- Harold Abelson and Gerald Sussman, Structure and Interpretation of Computer Programs, MIT Press. Aussi disponible en version libre en ligne.
Autres livres (pas directement utiles pour le cours)
- Benjamin C. Pierce, Types and Programming Languages, MIT Press.
- Chris Okasaki, Purely Functional Data Structures, Cambridge Univ Press.
- Douglas Hofstadter, Gödel, Escher, Bach.
- Alexis Roussel et Grégoire Barbey, Notre si précieuse intégrité numérique.
Horaire
Jour | Heure | Lieu | Type |
---|---|---|---|
Mardi | 15h30-15h00 | AA-1140 | Cours |
Mercredi | 09h00-10h30 | AA-1140 | Cours |
Mercredi | 10h30-12h30 | AA-1140 | Démonstration |
30 oct | 09h30-11h30 | AA-1177 / P-310 | Examen Intra |
18 dec | 08h30-11h30 | Z-110 | 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.
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 4 sep.Exercices 2, à faire à la démo du 11 sep.
Exercices 2½, à rendre avant le 18 sep.
Exercices 3, à faire à la démo du 18 sep.
Exercices 3½, à rendre avant le 25 sep.
Exercices 4, à faire à la démo du 25 sep.
Exercices 4½, à rendre avant le 2 oct.
Exercices 5, à faire à la démo du 2 oct.
Exercices 6, à faire à la démo du 9 oct.
Révision d'intra, à faire à la démo du 16 oct.
Exercices 7, à faire à la démo du 6 nov.
Exercices 7½, à rendre avant le 13 nov.
Exercices 8, à faire à la démo du 13 nov.
Exercices 8½, à rendre avant le 22 nov.
Exercices 9, à faire à la démo du 20 nov.
Exercices 10, à faire à la démo du 27 nov.
Exercices 11, à faire à la démo du 4 déc.
Révision de final, à faire de préférence avant l'examen.
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.
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 avecM-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
- La définition officielle de Haskell
- A history of Haskell.
- Liens vers divers livres et tutoriels.
- Une foule d'autres renseignements sont disponibles sur http://www.haskell.org/.
L'implantation de Haskell utilisée pour ce cours est GHC.
Pour éditer Haskell confortablement dans Emacs haskell-mode ainsi que Dante et GhcIDE.
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
- GNU Prolog.
- SWI Prolog.
- GNU Prolog online documentation
- SWI Prolog online documentation
- ISO Prolog documentation.
- Livres sur Prolog:
- Pour utiliser GNU Prolog avec l'interface Prolog d'Emacs, vous pouvez
faire
M-x run-prolog RET
pour démarrer Prolog ouC-c C-l
pour passer le fichier courant au système Prolog. - Pour charger un fichier dans le système GNU Prolog, donner la
commande
['monnomdefichier'].
qui se termine par un point.