Haskell

Haskell
Haskell
Logo du site www.haskell.org

Auteur le comité Haskell
Développeurs la communauté Haskell
Paradigmes fonctionnel
Typage Fort, statique
Dialectes Helium, O'Haskell, Template Haskell, PolyP
Influencé par Lisp et Scheme, ISWIM, FP, APL, Hope, SISAL, Miranda, ML, Lazy ML, Orwell, Alfl, Id, Ponder
Implémentations GHC, Hugs, Yhc,
Système d'exploitation Multiplate-forme
Site web http://www.haskell.org

Haskell est un langage de programmation fonctionnel. Il est fondé sur le lambda-calcul et la logique combinatoire. Son nom vient du mathématicien et logicien Haskell Brooks Curry. Il a été créé en 1985. Le dernier standard semi-officiel est Haskell 98 : c'est une version minimale et portable du langage conçue à des fins pédagogiques et comme base de futures extensions. Le langage continue d'évoluer rapidement, avec Hugs et GHC (voir ci-dessous), constituant ainsi le standard de facto.

Les fonctionnalités les plus intéressantes de Haskell sont le support des fonctions récursives, l'inférence de types, les listes en compréhension et l'évaluation paresseuse. Ces fonctionnalités, surtout si on les combine, facilitent l'écriture des fonctions. Haskell se distingue également par l'utilisation de monades pour les entrées/sorties.

En 2002, c'est probablement le langage fonctionnel sur lequel le plus de recherches ont été entreprises. Plusieurs variantes ont été développées. Des versions parallélisées faites au Laboratory for Computer Science du Massachusetts Institute of Technology (MIT) et à l'Université de Glasgow ont toutes deux été appelées Parallel Haskell. Des versions plus parallélisées et plus distribuées sont appelées Distributed Haskell (anciennement Goffin) et Eden. Une version d'exécution spéculative, Eager Haskell et plusieurs versions orientées objets, Haskell++, O'Haskell et Mondrian ont vu le jour.

Il existe aussi d'autres langages similaires à Haskell :

  • le Concurrent Clean, qui offre un support pour la création de GUI ainsi que CAL (Quarks Framework) qui tourne sur VM Java et est prévu pour s'intégrer comme extension d'API Java.
  • une version éducative de Haskell, appelée Gofer, a été développée par Mark Jones, et a finalement été supplantée par HUGS, le Système Gofer de l'Utilisateur Haskell (Haskell User's Gofer System).

Sommaire

Exemples de code

Fonction factorielle (récursive)

La définition classique de la fonction factorielle :

  1.  fac 0 = 1
    
  2.  fac n = n * fac (n - 1)
    


Fonction factorielle (avec product)

La définition élégante de la fonction factorielle (qui utilise la fonction Haskell product et la notation sur les listes) :

 fac n = product [1..n]


Fonction Fibonacci (naïve)

Une implémentation naïve de la fonction qui retourne le n-ième nombre de la suite de Fibonacci :

  1.  fib 0 = 0
    
  2.  fib 1 = 1
    
  3.  fib n = fib (n - 2) + fib (n - 1)
    

Fonction Fibonacci (seconde version)

Une fonction qui retourne la liste des nombres de Fibonacci :

 fibs = 0 : 1 : (zipWith (+) fibs (tail fibs))


La valeur précédente est une liste infinie, ce qui est tout à fait possible grâce à l'évaluation paresseuse. Grâce à cette liste, on peut implémenter fib de cette manière :

 fib n = fibs !! n


(!! est un opérateur qui retourne le n-ième élément d'une liste).

Comme fibs est évalué de manière paresseuse dans fib, un appel à fib n ne provoque que l'évaluation des n premiers termes de fibs. Cette évaluation se fait en temps linéaire. Finalement, fib retourne le n-ième terme de la suite de Fibonacci en temps linéaire.

Tri rapide (quicksort)

L'algorithme du tri rapide peut être élégamment écrit en Haskell avec l'aide de la manipulation de listes :

  1. qsort [] = []
    
  2. qsort (x:xs) =
    
  3.   qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
    
  4.   where
    
  5.     elts_lt_x = [y | y <- xs, y < x]
    
  6.     elts_greq_x = [y | y <- xs, y >= x]
    

Ou

  1. qsort []     = []
    
  2. qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
    


Notez qu'à cause des nombreuses copies et concaténations de listes, ce code peut être vraiment lent, en fonction de l'implémentation.

Implémentations

Les implémentations suivantes sont toutes compatibles (ou presque compatibles) avec le standard Haskell 98, et sont distribuées sous licences libres. Il n'y a pas d'implémentation commerciales de Haskell à ce jour.

  • GHC. Le Compilateur Haskell de Glasgow (Glasgow Haskell Compiler) compile le code en natif sur nombre d'architectures, et compile aussi en C. GHC est probablement le plus populaire des compilateurs Haskell, et il contient des bibliothèques très utiles (par exemple des bindings pour OpenGL) qui ne marchent qu'avec GHC.
  • Hugs est un interpréteur bytecode. Il offre une compilation rapide et une vitesse d'exécution raisonnable. Il possède aussi une bibliothèque graphique simple. Hugs se prête bien à l'apprentissage de Haskell, mais il ne faut pas en déduire que Hugs est une implémentation simpliste. C'est la plus portable et la plus légère des implémentations de Haskell.
  • nhc98 est un autre interpréteur bytecode, mais le bytecode s'exécute plus vite qu'avec Hugs. Nhc98 se concentre sur un usage minimal de la mémoire, et c'est un choix recommandé pour les vieilles machines.
  • HBC est un autre compilateur natif. Il n'est plus développé depuis quelque temps, mais il reste encore utilisable.

Quelques succès d'Haskell

Parce que non-procédural, Haskell permet de limiter considérablement les besoins de débogage ; il arrive donc que des projets soient réalisés en Haskell avant d'être disponibles dans d'autres langages. Les exemples les plus connus sont :

  • le programme nget, permettant de récolter toutes les images d'un newsgroup Usenet, dont la première version fut codée en Haskell (une version en langage C++ fut ensuite développée pour en faciliter le portage).

Voir aussi

Articles connexes

Liens externes

Sur les autres projets Wikimedia :


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Haskell de Wikipédia en français (auteurs)

Игры ⚽ Поможем написать реферат

Regardez d'autres dictionnaires:

  • Haskell — Класс языка: функциональный, ленивый, модульный Тип исполнения: компилируемый, интерпретируемый Появился в: 1990 …   Википедия

  • Haskell — Información general Paradigma Funcional, no estricto, modular, fuertemente tipificado Apareció en 1990 Diseñado por Universidad de Yale, Universidad de Glasgow …   Wikipedia Español

  • Haskell — may refer to:*Haskell (programming language), a standardized pure functional programming language with non strict semantics * Haskell Indian Nations University, a four year degree granting university in Lawrence, Kansas which offers free tuition… …   Wikipedia

  • Haskell — ist der Familienname folgender Personen: Charles Haskell (1860–1933), US amerikanischer Politiker Colleen Haskell, US amerikanische Jung Schauspielerin Dudley C. Haskell (1843–1883), US amerikanischer Politiker Floyd K. Haskell (1916–1998), US… …   Deutsch Wikipedia

  • Haskell — es un lenguaje de programación funcional e interpretado que obtuvo su nombre del lógico Haskell Curry. Fue creado por un comité en los años 1980 con el objetivo específico de definir dicho lenguaje. El lenguaje evoluciona rápidamente con y (ver… …   Enciclopedia Universal

  • Haskell — Haskell, AR U.S. city in Arkansas Population (2000): 2645 Housing Units (2000): 762 Land area (2000): 4.621199 sq. miles (11.968849 sq. km) Water area (2000): 0.022774 sq. miles (0.058985 sq. km) Total area (2000): 4.643973 sq. miles (12.027834… …   StarDict's U.S. Gazetteer Places

  • Haskell, AR — U.S. city in Arkansas Population (2000): 2645 Housing Units (2000): 762 Land area (2000): 4.621199 sq. miles (11.968849 sq. km) Water area (2000): 0.022774 sq. miles (0.058985 sq. km) Total area (2000): 4.643973 sq. miles (12.027834 sq. km) FIPS… …   StarDict's U.S. Gazetteer Places

  • Haskell, OK — U.S. town in Oklahoma Population (2000): 1765 Housing Units (2000): 763 Land area (2000): 2.173356 sq. miles (5.628965 sq. km) Water area (2000): 0.000000 sq. miles (0.000000 sq. km) Total area (2000): 2.173356 sq. miles (5.628965 sq. km) FIPS… …   StarDict's U.S. Gazetteer Places

  • Haskell, TX — U.S. city in Texas Population (2000): 3106 Housing Units (2000): 1526 Land area (2000): 3.402575 sq. miles (8.812629 sq. km) Water area (2000): 0.000000 sq. miles (0.000000 sq. km) Total area (2000): 3.402575 sq. miles (8.812629 sq. km) FIPS code …   StarDict's U.S. Gazetteer Places

  • Haskell — ● np. m. ►LANG langage fonctionnel (voir aussi langage fonctionnel) polymorphe et typé (paresseux, en plus!), devant son nom à Haskell Brooks Curry (voir Curry, Haskell), mathématicien dont le travail a permis de jeter les bases de la… …   Dictionnaire d'informatique francophone

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”