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.
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, ...
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.
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.
Leurs heures de disponibilité s(er)ont sur la page des démonstrations.
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é.
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.
Ces notes sont inspirées de celles de Marc Feeley, sauf les erreurs bien sûr.
Intro et syntaxeLes 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.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.
La donnée du travail. Le code source correspondant.
À rendre le mercredi 25 novembre à 8h30.
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.
/usr/share/emacs/23.1/etc/refcard.ps.
L'implantation de Haskell utilisée pour ce cours est Hugs.
Sur les machines GNU/Linux du DIRO, Hugs installé
dans ~dift2030/bin/hugs. Pour l'utiliser, le plus simple
est d'ajouter ~dift2030/bin dans votre PATH. Bien sûr
vous pouvez aussi l'installer chez vous.
Vous pouvez cependant aussi utiliser GHC (et sa boucle interactive ghci). Qui est plus lourd mais beaucoup plus à jour, et renvoie parfois des messages d'erreurs plus descriptifs
Pour éditer Haskell confortablement dans Emacs (avec highlighting et indentation automatique), il faut haskell-mode.
Sur les machines GNU/Linux du DIRO, haskell-mode est installé
dans ~dift2030/pkg/haskell-mode. Le plus simple pour
l'utiliser est d'ajouter (load "~dift2030/etc/emacs.el")
dans votre fichier ~/.emacs.
Depuis un buffer Haskell dans Emacs, vous pouvez envoyez le fichier
à Hugs avec C-c C-l. Vous pouvez aussi faire C-c
C-b pour sauter au prompt interactif de Hugs.
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.
~dift3060/g4/bin/gsi.
gambit.el
dans votre ``home''
emacs &''
Esc'', puis ``xload-file'', puis
``Enter'', et finalement ``gambit.el'', puis
``Enter''.
,q''
pour quitter). La commande ``,?'' donne une liste des
commandes disponibles.
Voir cette
section de la documentation de Gambit pour les détails.
~/.emacs les 2 lignes
suivantes:
(setq scheme-program-name "~dift3060/g4/bin/gsi -:t")
(require 'gambit "~dift3060/g4/share/emacs/site-lisp/gambit.el")
emacs &''
~dift2030/gprolog/bin. Il faut ajouter cela dans
votre PATH plutôt que l'appeler directement car il utilise
d'autres programmes de manière interne.
~/.emacs la ligne
(setq prolog-program-name "gprolog"). Vous pouvez ensuite
faire M-x run-prolog RET pour démarrer Prolog ou C-c
C-l pour passer le fichier courant au système Prolog.
Mais vous verrez que ce n'est pas très sophistiqué.
['monnomdefichier']. qui se termine par un point.