Retour d'expérience sur Haskell

Avec maintenant 5 ans d’expériences sur Haskell, il est maintenant venu pour moi de rendre un verdict sur ce langage et certains de ses aspects.

Typage

La première chose qui est frappante avec Haskell, c’est la force du typage !

Pour avoir utilisé des langages de programmation ou une variable peut posséder différents types suivant le contexte, il est appréciable de pouvoir compter sur un langage possédant des gardes fous de ce coté.

Un autre point appréciable avec Haskell, est la possibilité de pouvoir utiliser des types standards pour gérer des fonctions devant retourner plusieurs types de valeurs.

Créer des types combinés et/ou récursif avec Haskell est un vrai plaisir et sécuriser son code en créant des types est extrêmement simple.

Structuration du code

Un autre point positif d’Haskell, c’est la lisibilité du code et la façon dont il est structuré.

Lorsqu’un langage de programmation (comme le C) est très voir trop permissif sur la syntaxe et la structuration du code on peut arriver rapidement à quelque chose d’illisible et de très dur à reprendre par la suite.

Haskell fonctionne comme Python et c’est l’indentation des lignes qui définit les blocs de code ce qui le rend plus lisible que certains autres langages.

Classes et polymorphisme

Haskell permet d’organiser son code en utilisant des classes comme en C++ et en Python. La différence avec ces langages est que avec Haskell on n’a pas des classes d’objets mais des classes de fonctions.

Un des intérêt des classes est de pouvoir utiliser le polymorphisme, c’est à dire la capacité de pouvoir utiliser une fonction avec plusieurs types de données.

Je trouve personnellement Haskell plus efficace, intuitif et meilleur sur ce point que C++, même si il existe quelques différences..

Il est possible avec Haskell de faire varier le type de sortie d’une fonction, ce qui n’est pas possible en C++ (Enfin, pas à ma connaissance).

Une autre différence avec C++ est qu’une fonction polymorphe possédant le même nom ne peut pas avoir un nombre d’arguments différents (alors que cela est possible en C++). Et personnellement, je trouve cela plus logique (mathématiquement parlant).

Il n’est également pas possible, lorsque l’on dérive une classe avec Haskell, de restreindre l’accès à certaines fonctions comme en C++ avec les mots clefs : public, private, protected. Ces restrictions peuvent avoir de l’intérêt mais pour mon usage, cela n’a pas d’importance.

Fiabilité

Ce que j’apprécie également avec Haskell, c’est sa robustesse et sa fiabilité. Avec Haskell, quand la compilation marche … tout marche ! … ou presque !

Le compilateur GHC repère la grande majorité des erreurs de programmation à la compilation et permet de réduire considérablement le risque d’erreurs. Néanmoins, certaines erreurs ne sont pas détectables à la compilation.

Et évidemment, Lorsque l’on débute, on n’échappe pas à quelques pièges comme:

Mais on apprend vite à se prémunir contre ces erreurs.

Il existe également d’autres pièges qui apparaissent lors d’une utilisation plus poussée ou lorsque l’on travail avec les monades. Mais un programmeur qui arrive a ce niveau a généralement toutes les compétences pour diagnostiquer ces problèmes et les résoudre.

Difficultés

Il est vrai que passer d’un langage impératif à un langage fonctionnel n’est pas si simple. Il y a un véritable saut à faire afin de se plonger dans une logique et un concept très différents de ceux qu’on a connu auparavant.

Il est également vrai que certaines choses qui sont simples et intuitives avec des langages impératifs (accès aux fichiers, gestions des exceptions, interactions, …) le sont moins avec Haskell de par son mode de fonctionnement.

Pourtant la façon d’organiser le code, le sûreté du typage, la programmation par empreintes , la pureté du langage, … permettent de résoudre des problèmes souvent plus simplement qu’avec d’autres langages.

On pourrait même dire que :

Haskell simplifie ce qui est complexe autant qu’il complique ce qui est simple !

ce qui peut apparaître déroutant lors d’une première utilisation.

Néanmoins, ce saut n’est pas insurmontable et une personne motivée qui s’en donne les moyens est tout a fait capable d’apprendre Haskell rapidement, ce qui s’avérera très rentable sur le long terme.

Avis général

Dans l’ensemble, mon retour d’expérience sur Haskell est excellent et Haskell est devenu mon langage principal de développement.

Utiliser un langage fonctionnel comme Haskell pour développer rapidement des programmes comporte un intérêt certain et s’avère plus en terme de développement et de mise au point que d’autres langages.

Comparer Haskell avec d’autres langages fonctionnels n’est malheureusement pas possible pour moi a ce stade. Bien que j’ai déjà fait quelques lignes de code avec OCAML, je n’ai pas l’expérience nécessaire sur ce langage pour rendre un verdict. quand à ERLANG, ma connaissance de ce langage n’a pas dépassé le stade du tutoriel.