116 lines
5.7 KiB
Org Mode
116 lines
5.7 KiB
Org Mode
#+TITLE: Haskell for Life
|
||
|
||
#+LANGUAGE: fr
|
||
|
||
#+ATTR_HTML: :alt en anglais :class lang-lifted
|
||
[[file:../en/h4life.org][file:../content/imgs/en.png]]
|
||
|
||
#+ATTR_HTML: :alt return home :class home
|
||
[[file:home.org][file:../content/imgs/home.png]]
|
||
|
||
Le but de ce cours de courte durée est de familiariser les étudiants
|
||
avec le modèle de calcul derrière un langage fonctionnel de haut
|
||
niveau et grand public. Le cours se focalise plutôt sur l'acquisition
|
||
de connaissances pratiques. Grâce à ce cours, les étudiants seront
|
||
capables de résoudre des problèmes pratiques de programmation de
|
||
complexité moyenne en écrivant du code Haskell idiomatique et en
|
||
utilisant l'écosystème riche de librairies propre à ce langage.
|
||
|
||
Ce cours vise un public large, le seul prérequis étant une expérience
|
||
de programmation superficielle dans un des langages populaires :
|
||
(C/C++, Java, C#/.NET, Python, etc.).
|
||
|
||
L'activité essentielle pour l'enseignement de ce cours est la
|
||
démonstration de sessions interactives de Haskell. Le processus
|
||
d'enseignement sera donc directement dirigé par le retour de la part
|
||
des étudiants.
|
||
|
||
Le cours consiste en 4 parties, dont les 3 premières définissent
|
||
quelques notions essentielles, alors que la dernière fournit des
|
||
exemples de programmation parallèle et concurrente. Une partie peut
|
||
être enseignée sur plusieurs séances de 2 heures ; c'est notamment le
|
||
cas de la première partie qui devrait probablement être traitée en
|
||
deux temps pour faciliter l'apprentissage. À la fin du cours les
|
||
étudiants peuvent soumettre un projet ; les étudiants ayant réussi à
|
||
soumettre un projet peuvent se voir accorder 2 ECTS.
|
||
|
||
Les dispositifs de ce cours ainsi que les explications dans le code
|
||
source sont en anglais.
|
||
|
||
Ce cours suit approximativement le merveilleux livre [[http://book.realworldhaskell.org/][Real World
|
||
Haskell]].
|
||
|
||
#+ATTR_HTML: :alt image de la licence Creative Commons Attribution Alone :class ccby
|
||
[[https://fr.wikipedia.org/wiki/Licence_Creative_Commons][file:../content/imgs/ccby.png]]
|
||
|
||
Les matériaux de ce cours sont distribués sous la [[https://fr.wikipedia.org/wiki/Licence_Creative_Commons][licence Creative
|
||
Commons Paternité]].
|
||
|
||
|
||
* Introduction
|
||
Cette partie introduit les idées fondamentales derrière la
|
||
programmation fonctionnelle ; il s'agit des fonctions de première
|
||
classe et des fonctions d'ordre supérieur. Le typage strict et
|
||
statique en Haskell est présenté et comparé aux autres stratégies de
|
||
typage que l'on retrouve dans d'autres langages de
|
||
programmation. Quelques éléments essentiels de la syntaxe sont
|
||
expliqués, y compris la syntaxe pour la définition de types de
|
||
données simples.
|
||
|
||
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-01.pdf][ici]]. Les exemples
|
||
présentés sont [[file:../content/courses/h4life/h4life-funcs.hs][ici]].
|
||
|
||
* Classes de types
|
||
Cette partie définit les classes de types en Haskell et les compare
|
||
aux classes et aux types dans d'autres langages de
|
||
programmation. Quelques différences subtiles sont mises en avant
|
||
pour éviter toute confusion.
|
||
|
||
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-02.pdf][ici]]. Les exemples
|
||
présentés se trouvent [[file:../content/courses/h4life/h4life-types.hs][ici]] et encore [[file:../content/courses/h4life/h4life-typeclasses.hs][ici]]. Le premier de ces fichiers
|
||
contient des caractères Unicode ; il faut donc bien choisir
|
||
l'encodage de l'affichage (Unicode ou UTF-8).
|
||
|
||
* Monades
|
||
Dans cette partie les monades sont présentées comme des outils pour
|
||
l'élimination des aspects répétitifs d'un calcul. Dans un premier
|
||
temps, les monades =Maybe= et =List= sont décrites. Ensuite, un
|
||
aperçu des monades =Reader=, =Writer=, et =State= est proposé.
|
||
|
||
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-03.pdf][ici]]. Les exemples
|
||
présentés se trouvent [[file:../content/courses/h4life/h4life-monads.hs][ici]].
|
||
|
||
* Parallel and Concurrent Programming
|
||
Cette partie décrit quelques techniques de base pour la
|
||
programmation parallèle et concurrente en Haskell. Dans un premier
|
||
temps, les annotations pour la programmation parallèle sont
|
||
présentées. Ensuite, une façon de lancer des fils d'exécution
|
||
parallèle est décrite, ainsi que les stratégies de synchronisation
|
||
par des variables partagées en exclusion mutuelle. Un scanner de
|
||
ports rudimentaire est développé pour une démonstration pratique de
|
||
ces techniques.
|
||
|
||
Les diapositives de cette partie se trouvent [[file:../content/courses/h4life/h4life-04.pdf][ici]]. L'implémentation
|
||
du tri rapide présentée dans le cours est [[file:../content/courses/h4life/h4life-sorting.hs][ici]]. Le code du scanner de
|
||
ports se trouve [[file:../content/courses/h4life/h4life-scanner.hs][ici]].
|
||
|
||
[[file:../content/courses/h4life/marlow-tutorial.pdf][Ce tutoriel]] (en anglais) sur la programmation parallèle et
|
||
concurrente en Haskell par Simon Marlow donne (beaucoup) plus de
|
||
détails.
|
||
|
||
* Sites d'enseignements
|
||
J'ai enseigné ce cours à [[http://www.tucs.fi/][Turku Center for Computer Science]] (janvier
|
||
2016), à [[https://www.pentalog.com/locations/chisinau-nearshore-delivery-center/][Pentalog Chișinău]] (décembre 2016), ainsi qu'à la [[http://fcim.utm.md/][faculté
|
||
d'informatique de l'Université technique de Moldavie]] (décembre
|
||
2016).
|
||
|
||
La consigne de l'examen pour la version du cours que j'ai enseignée
|
||
à Turku Center for Computer Science se trouve [[file:../content/courses/h4life/h4life-exam.pdf][ici]].
|
||
|
||
|
||
* Local Variables :noexport:
|
||
# Local Variables:
|
||
# org-link-file-path-type: relative
|
||
# eval: (auto-fill-mode)
|
||
# ispell-local-dictionary: "fr"
|
||
# End:
|