Haskell : portrait d’un langage de programmation fonctionnel
Depuis toujours, en développement logiciel, il existe des angles d’approche très variés : les paradigmes de programmation définissent notamment la manière dont est rédigé un programme, et plus précisément dont est structuré son code. Une des approches les plus appréciées reste la programmation fonctionnelle, elle-même une sous-forme de l’approche déclarative, qui se contente de rédiger uniquement les résultats et non les étapes qui y amènent. Haskell est un représentant incontesté de cette catégorie, un langage de programmation nommé d’après le mathématicien américain Haskell Brooks Curry.
Dans cet article, vous découvrirez à quoi correspond Haskell, comment ce langage se distingue des autres langages de programmation et à quels projets il est destiné.
Dans cet article, vous découvrirez à quoi correspond Haskell, comment ce langage se distingue des autres langages de programmation et à quels projets il est destiné.
Haskell, c’est quoi ?
Haskell est un langage de programmation purement fonctionnel dont la première version est sortie en 1990. Il a été baptisé en hommage au mathématicien Haskell Brooks Curry, dont les travaux sur la logique combinatoire (entre 1920 et 1960) ont posé les bases des langages de programmation fonctionnels. Haskell est basé sur le lambda-calcul (un langage formel pour calculer des fonctions), ce qui explique que son logo officiel ait adopté la lettre grecque lambda.
Les programmes écrits en Haskell sont toujours représentés par des fonctions mathématiques, qui n’ont jamais d’effets de bord ni d’effets secondaires. Pour une même entrée, chaque fonction utilisée retourne toujours le même résultat et ne modifie jamais l’état d’un programme. La valeur de la sortie d’une fonction, et donc son résultat, dépendent ainsi exclusivement des derniers paramètres d’entrée. Dans Haskell, il n’y a pas de constructions impératives pour programmer le déroulé d’une commande.
À sa publication, Haskell est devenu, d’une certaine manière, un langage de programmation fonctionnelle standard. Par la suite, de très nombreux dérivés comme Parallel Haskell, Eager Haskell, Haskell++ ou Eden ont été développés et restent très proches de Haskell. Quelques langages de programmation entièrement nouveaux se sont également orientés vers Haskell. Le langage universel Python, qui fait partie des langages de programmation Internet les plus importants, a par exemple repris la notation lambda et la syntaxe de traitement des listes de Haskell.
Les programmes écrits en Haskell sont toujours représentés par des fonctions mathématiques, qui n’ont jamais d’effets de bord ni d’effets secondaires. Pour une même entrée, chaque fonction utilisée retourne toujours le même résultat et ne modifie jamais l’état d’un programme. La valeur de la sortie d’une fonction, et donc son résultat, dépendent ainsi exclusivement des derniers paramètres d’entrée. Dans Haskell, il n’y a pas de constructions impératives pour programmer le déroulé d’une commande.
À sa publication, Haskell est devenu, d’une certaine manière, un langage de programmation fonctionnelle standard. Par la suite, de très nombreux dérivés comme Parallel Haskell, Eager Haskell, Haskell++ ou Eden ont été développés et restent très proches de Haskell. Quelques langages de programmation entièrement nouveaux se sont également orientés vers Haskell. Le langage universel Python, qui fait partie des langages de programmation Internet les plus importants, a par exemple repris la notation lambda et la syntaxe de traitement des listes de Haskell.
Que peut-on faire avec le langage de programmation Haskell ?
Le développement et la maintenance de grands projets de logiciels demandent du travail, du temps et de l’argent. Les langages de programmation fonctionnels comme Haskell peuvent simplifier le processus. Haskell a notamment fait ses preuves grâce à ses avantages suivants :
C’est surtout dans les branches exigeant l’application précise d’algorithmes mathématiques qu’on opte très souvent pour le langage de programmation Haskell. Exemples caractéristiques : sécurité réseau, frameworks de spécification pour les systèmes embarqués, programmes de modélisation de calculs mathématiques complexes.
- il augmente significativement la productivité des développeurs ;
- le code des logiciels Haskell est court, clair et facile à entretenir ;
- les applications Haskell sont moins susceptibles de rencontrer des erreurs et sont d’une grande fiabilité ;
- la distance « sémantique » entre les programmeurs et le langage est minime.
C’est surtout dans les branches exigeant l’application précise d’algorithmes mathématiques qu’on opte très souvent pour le langage de programmation Haskell. Exemples caractéristiques : sécurité réseau, frameworks de spécification pour les systèmes embarqués, programmes de modélisation de calculs mathématiques complexes.
Haskell n’est pas un choix pertinent pour la programmation de logiciels simples.
Comment Haskell se démarque-t-il des autres langages de programmation ?
Haskell est un langage de programmation purement fonctionnel. En cela, il diffère grandement de beaucoup d’autres langages. Les différences qui le distinguent des langages orientés vers le paradigme impératif sont flagrantes : les programmes rédigés en langages impératifs exécutent le déroulement de commandes. Seulement, pendant l’exécution, le statut de ces commandes peut changer, par exemple en modifiant une variable. Les structures de contrôle des flux veillent cependant à ce que les commandes puissent être exécutées plusieurs fois.
Avec l’approche fonctionnelle, dont Haskell est la base, le logiciel ne donne aucun ordre direct à l’ordinateur sur la manière dont celui-ci doit exécuter une action. À l’inverse, on décrit le problème et sa solution. Les variables sont statiques : avec Haskell et d’autres langages fonctionnels, une variable ayant la valeur « 1 » a toujours la valeur « 1 » et il n’est pas possible de la modifier si facilement. Les fonctions ont uniquement pour but de calculer quelque chose et de retourner le résultat correspondant.
Avec l’approche fonctionnelle, dont Haskell est la base, le logiciel ne donne aucun ordre direct à l’ordinateur sur la manière dont celui-ci doit exécuter une action. À l’inverse, on décrit le problème et sa solution. Les variables sont statiques : avec Haskell et d’autres langages fonctionnels, une variable ayant la valeur « 1 » a toujours la valeur « 1 » et il n’est pas possible de la modifier si facilement. Les fonctions ont uniquement pour but de calculer quelque chose et de retourner le résultat correspondant.
Apprendre le langage Haskell : prérequis, conseils et premier exemple
Apprendre le langage Haskell a des avantages pour plusieurs raisons. D’une part, vous serez en mesure de programmer vos propres solutions logicielles en Haskell, lorsque ce langage est indiqué. D’autre part, vous aurez les compétences nécessaires pour travailler sur une application tierce rédigée en Haskell. Comme ce langage fait figure de standard en matière de programmation fonctionnelle, son apprentissage s’avère utile si vous souhaitez acquérir des connaissances générales sur la programmation fonctionnelle.
Comme c’est souvent le cas avec d’autres langages, vous avez deux options pour rédiger un code en Haskell : option par piles avec un compilateur ou option interactive avec un interpréteur. Un système interactif offre l’avantage d’inclure une interface en ligne de commande adaptée dans laquelle vous pouvez tester directement le code pour en évaluer les résultats. Cette option est à privilégier pour un premier contact simple avec le langage Haskell. Un des interpréteurs les plus connus, qui n’est plus en développement actif, est Hugs. Un autre système, GHC (Glasgow Haskell Compiler), propose un pack complet et pratique avec un interpréteur et un compilateur pour Haskell.
Comme c’est souvent le cas avec d’autres langages, vous avez deux options pour rédiger un code en Haskell : option par piles avec un compilateur ou option interactive avec un interpréteur. Un système interactif offre l’avantage d’inclure une interface en ligne de commande adaptée dans laquelle vous pouvez tester directement le code pour en évaluer les résultats. Cette option est à privilégier pour un premier contact simple avec le langage Haskell. Un des interpréteurs les plus connus, qui n’est plus en développement actif, est Hugs. Un autre système, GHC (Glasgow Haskell Compiler), propose un pack complet et pratique avec un interpréteur et un compilateur pour Haskell.
Notre article « Compilateur et interpréteur : explications et différence » vous présente en détail les différences entre les méthodes de travail et de fonctionnement des interpréteurs et des compilateurs.
Le bout de code suivant offre un exemple simple de la façon dont fonctionne Haskell :
add :: Integer -> Integer -> Integer --function declaration
add x y = x + y --function definition
main = do
putStrLn "La somme des deux nombres est :"
print(add 2 5) --calling a function
Dans la ligne de code 1, on déclare la fonction Haskell, qui doit comporter un integer (nombre entier) en tant que valeur d’entrée et de sortie. Dans la ligne 2, la fonction est définie concrètement : on additionne deux arguments, puis le résultat de l’addition doit être retourné. On indique les valeurs « 2 » et « 5 » en entrées. L’exécution de ce bout de code retourne le résultat suivant :
La somme des deux nombres est : 7
Retrouvez des conseils et astuces plus avancés pour découvrir la syntaxe et le fonctionnement de Haskell dans notre tutoriel Haskell complet.