work-site/fr/h4life.org
2018-09-30 21:40:27 +02:00

5.7 KiB

Haskell for Life

/scolobb/work-site/media/commit/a0c818474640e1dce35ab851376b020d77978436/content/imgs/en.png /scolobb/work-site/media/commit/a0c818474640e1dce35ab851376b020d77978436/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 Real World Haskell.

/scolobb/work-site/media/commit/a0c818474640e1dce35ab851376b020d77978436/content/imgs/ccby.png

Les matériaux de ce cours sont distribués sous la 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 ici. Les exemples présentés sont 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 ici. Les exemples présentés se trouvent ici et encore 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 ici. Les exemples présentés se trouvent 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 ici. L'implémentation du tri rapide présentée dans le cours est ici. Le code du scanner de ports se trouve ici.

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 à Turku Center for Computer Science (janvier 2016), à Pentalog Chișinău (décembre 2016), ainsi qu'à la 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 ici.