Aller au menu - Aller au contenu

Icône Haskell ? C'est quoi ?

Avatar
Mise à jour : 01/08/2010
Difficulté : Facile Facile Creative Commons BY-SA
449 visites depuis 7 jours, dont 50 sur ce chapitre classé 248/786
Ce premier chapitre s'attaque à deux questions importantes.

Dans la première partie, vous verrez pourquoi vous devriez apprendre à programmer en Haskell. Cette partie introduit beaucoup de concepts pas forcément simples à expliquer et que vous ne comprendrez peut-être pas du premier coup. Ce n'est pas grave : ils seront réexpliqués au fur et à mesure du tutoriel. La deuxième partie va vous donner quelques exemples de programmes codés en Haskell.
Ensuite, il vous faut quelques outils pour programmer en Haskell : c'est le sujet de la troisième partie.
Sommaire du chapitre :
Icône du chapitre
Sommaire Chapitre suivant

Pourquoi apprendre Haskell ?

Haskell est un langage différent des autres : voici quelques-unes de ses particularités.

Haskell est un langage statiquement typé : les types sont déterminés à la compilation, et le compilateur détecte les erreurs de type. Si vous additionnez une chaîne de caractères et un entier, le compilateur refusera de continuer. Plutôt que d'avoir à écrire les types de chaque variable, Haskell utilise l'inférence de types : le compilateur détermine tout seul le type des fonctions, variables et arguments. Cela permet de profiter de la sécurité donnée par le typage statique sans avoir à se fatiguer à écrire des types partout (il est quand même conseillé d'en indiquer quelques-uns, puisqu'ils peuvent aider à comprendre le code). Le système de types du langage est plutôt puissant : on peut s'en servir pour garantir certaines propriétés, par exemple qu'un programme ne renverra jamais d'informations secrètes au monde extérieur.

C'est un langage fonctionnel : les fonctions sont des valeurs comme les autres, qu'on peut prendre en arguments, renvoyer ou appliquer partiellement. Plutôt que de penser un programme comme une suite d'instructions à appliquer les unes à la suite des autres, on essaye de l'exprimer comme des transformations à appliquer aux données en entrées. On peut créer des transformations plus complexes en appliquant une fonction à une autre fonction.

Les fonctions sont toutes pures : elles ne peuvent pas modifier l'environnement extérieur à la fonction, et doivent toujours renvoyer le même résultat si on leur donne les mêmes arguments. Les variables ne sont pas modifiables, ce qui fait qu'on ne peut pas programmer de manière impérative, avec des boucles dans lesquelles on modifie des variables. Cela n'empêche pas de faire des programmes utiles, mais force juste à les exprimer différemment. Les fonctions qui interagissent avec le monde extérieur ont un type spécial, ce qui fait qu'on ne peut pas les utiliser à la place d'une fonction pure.

Enfin, c'est un langage paresseux : les calculs ne sont effectués que lorsque leur résultat est nécessaire. Cela permet dans certains cas d'exprimer des programmes de façon beaucoup plus simple, par exemple quand on ne sait pas jusqu'où on devrait normalement évaluer les données. Cela permet aussi de créer des fonctions plus génériques, où on n'a pas à se soucier de calculer des résultats non nécessaires à l'opération qu'on veut réellement effectuer : si la fonction est suffisamment paresseuse, ils ne seront pas calculés du tout. On peut manipuler de cette façon des structures de données infinies de la même façon qu'on manipulerait des structures de données finies.

Tout cela fait de Haskell un langage intéressant et amusant à apprendre : il est différent de ce que vous avez pu voir jusqu'ici, donc vous allez apprendre beaucoup de choses nouvelles, que, même si vous ne programmez pas tous les jours en Haskell, vous pourrez utiliser pour mieux programmer dans votre langage préféré. D'ailleurs, certains langages intègrent maintenant des concepts empruntés à la programmation fonctionnelle.

Qu'est-ce qu'on peut faire en Haskell ?

Vous vous demandez maintenant après cette présentation quel genre de programmes on peut faire en Haskell. En fait, on peut à peu près faire tout ce qu'on peut faire dans un autre langage, mais ce chapitre va vous montrer quelques exemples.

Jeux et interface graphique


Frag, un FPS en 3D


En Haskell, on peut faire des jeux vidéo (même si, comme dans tous les langages, ça peut devenir compliqué) : Frag est un jeu de tir à la première personne en 3D, utilisant OpenGL pour les graphismes, capable de charger des niveaux au format Quake3. Pour plus de détails, vous pouvez lire la page dédiée sur le wiki haskell : Frag. Voilà une capture d'écran :
Image utilisateur

xmonad, un gestionnaire de fenêtres


xmonad est un gestionnaire de fenêtre (ou WM) X11 (donc pour Linux et autres). C'est un programme qui se charge de placer les fenêtres au bon endroit à l'écran. Cependant, xmonad à la particularité d'être un tiling wm : par défaut, il organise les fenêtres de telle façon qu'elles occupent tout l'espace de l'écran et ne se recouvrent pas (cependant, certains modes permettent d'arranger les fenêtres différemment). Il est très léger, mais très configurable : le fichier de configuration est écrit en haskell. Il est aussi extensible, avec de nombreux modes de placement des fenêtres, et gère les écrans multiples.
Image utilisateurImage utilisateurImage utilisateur

Outils pour développeurs


GHC, le principal compilateur Haskell, est écrit en Haskell, mais c'est aussi le cas de la plupart des autres compilateurs pour Haskell. Pugs, un interpréteur et compilateur pour Perl 6, a aussi été codé en Haskell.
darcs, un logiciel de gestion de version distribué, est aussi codé en haskell.


Et plus encore !


Plein d'autres choses


Il aussi possible de faire beaucoup d'autres choses, parmi lesquelles :


De nombreuses bibliothèques


Il y a aussi de nombreuses bibliothèques en Haskell, qui permettent de ne pas avoir à réinventer la roue pour coder quelque chose de simple et de faire beaucoup de choses : des applications web, de la musique, du traitement d'images, manipuler du XML, de la cryptographie, des mathématiques et beaucoup d'autres choses.
Vous pouvez voir une liste de bibliothèques et d'applications disponibles en Haskell sur hackage.

Téléchargez et installez un compilateur

Choix d'un compilateur


Il existe de nombreux interpréteurs et compilateurs pour Haskell. Vous pouvez trouver une liste (pas forcément complète) sur la page Implementations du wiki Haskell.
Ce tutoriel vous apprendra à vous servir de GHC : c'est un compilateur qui produit du code rapide, et qui supporte un grand nombre d'extensions au langage. Si vous souhaitez vous renseigner sur GHC, lire la documentation, voir si de nouvelles versions sont sorties ou comment le compilateur évolue, rendez-vous sur le site officiel de GHC.
Pour permettre d'installer plus facilement GHC et un certain nombre de bibliothèques et d'outils utiles, un paquet unique, appelé Haskell Platform a été créé.

Installation


Sous Windows et Mac OS X


Sous Windows et Mac OS X, l'installation est simple : allez sur le site de Haskell Platform, téléchargez l'installateur pour votre système et lancez-le. Voilà, vous êtes prêts pour la suite de ce tuto.

Sous Linux et autres systèmes Unix


Rendez-vous sur le site de Haskell Platform. Si vous avez de la chance, votre distribution fournit un paquet pour la plateforme. Cliquez donc sur le lien correspondant à votre distribution pour suivre les instructions d'installation.
Si votre distribution ne fournit pas de paquet, vous devrez installer la plateforme vous-même. Pour cela, commencez par installer la dernière version de GHC (le mieux est d'utiliser les paquets de votre distribution, la compilation de GHC est assez longue), puis téléchargez le tarball des sources de Haskell Platform sur la même page et suivez les instructions.
Maintenant que vous avez installé les outils nécessaires pour programmer, on peut commencer. Dans le chapitre suivant, vous allez commencer à écrire du code !
Sommaire Chapitre suivant

Partager

10 commentaires pour "Haskell ? C'est quoi ?"
Note moyenne : 3.61 / 4 (33 votes)
Pseudo Commentaire
Hors ligne gnomnain # Posté le 02/11/2009 à 21:16:17
Blblbl !
Avatar

Avis : Très bon Groupe : Anciens

On peut à peu près tout faire avec n'importe quel langage, et Haskell n'échappe pas à cette règle : tu peux faire du web, de la musique, manipuler des images, créer un compilateur, coder un fps 3D, calculer tout un tas de trucs mathématiques, un bot IRC, de la crypto, des jeux 2d, un correcteur d'orthographe (tous ces exemples sont réels !). J'avais l'intention à un moment de rajouter une sous-partie pour expliquer ça, ce sera pour la prochaine mise à jour.
En tout cas, merci pour ton commentaire, ça va m'être utile.

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 
Hors ligne bluestorm # Posté le 08/11/2009 à 20:27:20
dont ask to ask
Avatar
Groupe : Anciens
Flux RSS

Je suis conscient depuis quelques mois de la présence de ton tutoriel sur Haskell, mais jusqu'à présent je n'ai pas eu le temps de lui consacrer beaucoup de temps. C'est dommage, c'est un langage que j'aime bien, et si je peux ajouter mon grain de sel au tuto à sur ce sujet (chapeau bas, se lancer dans ce genre de tuto ce n'est pas facile), ça me motive assez.


Je trouve ce chapitre un peu confus. La première partie, qui parle de l'ensemble des langages de programmation, mais pas de Haskell, n'a pas vraiment sa place à mon avis dans un tutoriel sur Haskell. Si tu voulais écrire un article/tuto sur les différents choix que peuvent faire un langage de programmation, ou les paradigmes, c'est une excellente idée (et GuilOooo pourrait peut-être te donner un coup de main), mais ici c'est un peu maladroit, fouilli, pâté, et déplacé.

La partie qui parle principalement d'Haskell me paraît aussi peu claire. Il faut dégager quelques idées claires, sans les entrecouper de comparaisons directes. Haskell est un langage :
- fonctionnel d'ordre supérieur
- typé statiquement (typage ML)
- pur
- à évaluation paresseuse

Il faudrait une liste, avec ces items en gras, et une description courte (une ou deux lignes maxi) de chaque concept. Si tu veux rajouter des commentaires ensuite, fais-le, ils sont intéressants, mais avec uniquement les commentaires ce n'est pas assez clair.


Ensuite, je trouve la partie "qu'est-ce qu'on peut faire en Haskell ?" un peu pipeau. Certes, un fou furieux a essayé de coder un FPS en Haskell, mais est-ce que c'est ce qu'il faut mettre en avant pour les zéros ? Je pense que tu leur donnes de faux espoirs et que, tel quel, c'est un peu mensonger comme présentation. C'est le moment où il faut être honnête et dire que Haskell est un langage de recherche, qui se concentre plus sur des expérimentations, mais que c'est aussi un langage généraliste et qu'on peut même, en faisant des efforts, faire des choses comme un FPS. Tu as raison, par contre, de parler de Hackage, c'est vrai qu'il y a pas mal de bibliothèques, par rapport aux autres langages académiques du même registre.


Citation
Il existe de nombreux interpréteurs et compilateurs pour Haskell.

Quel Haskell te proposes-tu d'enseigner ? Haskell98 ou le Haskell d'aujourd'hui ? S'il est vrai qu'il existe quelques compilateurs pour Haskell98, il est discutable de dire qu'il existe "de nombreux" compilos Haskell aujourd'hui : Haskell c'est GHC, un point c'est tout, le reste étant des projets expérimentaux qu'essentiellement seuls leur développeurs utilisent.
Du reste, la précision (rester conforme à la norme Haskell98 ou pas ?) est intéressante en tant que telle pour les gens qui lisent ton tuto en connaissant déjà le langage, et je pense que tu pourrais la mentionner dans tous les cas.
 
Hors ligne gnomnain # Posté le 09/11/2009 à 18:42:52
Blblbl !
Avatar

Avis : Très bon Groupe : Anciens

Merci pour ton commentaire, je savais déjà que ce chapitre n'était pas super, mais ça me donne des pistes pour le retravailler. Pour "apprendre Haskell98" ou "apprendre le Haskell de GHC", c'est une question que je me suis posé dans le chapitre sur les typeclasses. Je l'ai un peu contournée, mais je pense que je vais utiliser quelques extensions en plus.

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 
Hors ligne atoo # Posté le 02/05/2010 à 17:29:53
Avatar

Salut, je partage l'avis de bluestorm: c'est pas en assommant le lecteur que tu l'intéresseras à Haskell. Et puis je crois que dans ton approche tu as commis un faux pas: ton introduction semble s'adresser à ceux qui ont déjà fait de la programmation; il y a certes des zeros en Haskell, mais il y a aussi des zeros en programmation carrément.

Voici un autre tutoriel simple sur la présentation de Haskell

Simplifiez l'informatique sur informatiquesanspeine.net
 
Hors ligne gnomnain # Posté le 02/05/2010 à 19:17:50
Blblbl !
Avatar

Avis : Très bon Groupe : Anciens

Bah comme j'ai oublié de le dire dans mon message précédent, j'ai l'intention de refaire ce chapitre prochainement (ouais, ça prend du retard).
Mais je ne pense pas que Haskell soit un langage particulièrement adapté pour commencer la programmation en général. La plupart des personnes qui s'y intéressent auront probablement écrit quelques lignes dans un autre langage, et cela m'évite un certain nombre de rappels et détails chiants.

Image utilisateur
Haskell - Learn You a Haskell - Real World Haskell - xmonad - OCaml
Apprenez Haskell ! - #ircduzero
<colbseton> Serialk: tu cherches vraiment des liens logiques dans tout ce que je raconte ?
 

Voir tous les commentaires