Pour vous donner une idée de ce que permet de faire Haskell, la fonction quicksort s'écrit en deux lignes :
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
Bien sûr, ça n'est pas aussi rapide que du C, mais c'est plus rapide que beaucoup d'autres langages populaires comme Python et au coude-à-coude avec C# [1]
Voici une comparaison avec Python par exemple.
Plusieurs remarques : d'abord ce langage a beaucoup inspiré Python (y compris dans des aspects triviaux comme l'indentation !). Ensuite Haskell peut être interprété et compilé. Il est particulièrement utile pour la programmation en IA. Son principal inconvénient c'est qu'il est assez difficile à apprendre, des concepts comme les monades sont assez peu intuitifs et la documentation est quasi-inexistante.
Du moins jusqu'à maintenant...
Car je me suis aperçu en faisant quelques recherches sur le Net qu'un livre d'introduction (700 pages tout de même) vient de va bientôt sortir chez O'Reilly, et il est lisible en ligne gratuitement (avec possibilité de commenter chaque paragraphe) sur ce site. Les critiques sont assez élogieuses à propos du livre (qui sortira en anglais début décembre et en français...euh, jamais). Au fait est-ce que quelqu'un sait quel logiciel a été utilisé pour générer les pages Web de ce site ? C'est quand même vachement plus beau que du latex2html.
Sinon il y a quelques tutoriaux qui traînent sur le Net et qui répertoriés sur la page Haskell.org, mais ils sont en général destinés aux (bons) programmeurs C et ni très didactiques, ni exhaustifs.
# Site
Posté par ribwund . Évalué à 7.
Le livre est écrit en docbook, le site est écrit en django. Brian a promis de donner les sources du site quand il a le temps.
# Et par rapport à OCaml ?
Posté par lepoulpe . Évalué à 2.
[^] # Re: Et par rapport à OCaml ?
Posté par ribwund . Évalué à 3.
[^] # Re: Et par rapport à OCaml ?
Posté par パパフラクス . Évalué à 4.
Un point que j'aime bien en Haskell, c'est les classes de types http://www.haskell.org/tutorial/classes.html
Je préfère cette manière de fonctionner que celle d'ocaml.
Sinon, de manière encore plus subjective, je trouve que Haskell est bien plus beau que ocaml,
mais j'ai aussi beaucoup plus de mal a lire du code Haskell que du code Ocaml.
D'autant plus que bien souvent, un programme Haskell manipule des concepts assez abstraits, ce qui aboutit à une solution souvent générale, mais pas forcément super abordable. Surtout que bien des développeurs semblent être adeptes des noms à une ou deux lettres...
[^] # Re: Et par rapport à OCaml ?
Posté par Victor . Évalué à 1.
[^] # Re: Et par rapport à OCaml ?
Posté par Dr BG . Évalué à 2.
[^] # Re: Et par rapport à OCaml ?
Posté par Laurent Vibert . Évalué à 1.
En gros les class-types s'encodent avec les foncteurs et réciproquement.
Maintenant les foncteurs sont assez lourds à utiliser...
(mais les class-types rajoutent du code runtime)
[^] # Re: Et par rapport à OCaml ?
Posté par Victor . Évalué à 2.
Mais plus expressif pourrait bien coller alors ?
Je ne suis pas du tout un pro de ces langages, mais ce que je raconte là est ce que j'ai cru comprendre de ce que j'ai pu lire sur le sujet.
C'est un peu flemmard de ma part, mais au lieu de résumer les différences et de dire des bétises, voici une petite liste de pointeurs qui disent que le système de typage de Haskell est plus expressif que celui de caml :
http://www.oreillynet.com/mac/blog/2006/03/haskell_vs_ocamlw(...)
http://www.haskell.org/pipermail/haskell-cafe/2005-May/00985(...)
http://www.reddit.com/r/programming/comments/l434/ask_reddit(...)
# une interview de l'auteur du langage
Posté par Gniarf . Évalué à 5.
http://www.computerworld.com.au/index.php?id=1974033854
# Un bon complément
Posté par Ummon . Évalué à 3.
C'est très bien fait et plutôt plaisant à lire.
# contradictions
Posté par Laurent J (site web personnel, Mastodon) . Évalué à 2.
versus
>Son principal inconvénient c'est qu'il est assez difficile à apprendre, des concepts comme les monades sont assez peu intuitifs et la documentation est quasi-inexistante.
Tes propos ne sont pas en contradictions là ? ;-) Sauf peut-être pour les masochistes, effectivement :-)
attention, je n'ai rien contre haskell, je n'ai pratiquement jamais utilisé, bien qu'essayé une fois en me cassant les dents dessus parce que justement, c'est totalement à l'opposé des langages classiques, peu intuitifs et difficile à apprendre, sachant qu'à l'époque, il y a 3-4 ans, il n'y avait quasiment pas de doc. Le fait qu'il y ait un livre est donc une bonne nouvelle :-)
[^] # Re: contradictions
Posté par CrEv (site web personnel) . Évalué à 5.
il y a très peu de langages faciles, mais la plupart sont faciles à utiliser car on a tous (ou presque) une connaissance de base orientée c/c++/java/c#/...
et donc les langages proches nous sembles faciles.
Mais c'est oublier qu'on a appris (parfois difficilement ;-) ) ces langages précédemment
[^] # Re: contradictions
Posté par arronax . Évalué à 2.
Je pense que l'accès à la documentation joue un grand rôle dans la difficulté d'un langage de programmation. Il y a quelques années quand j'en ai fait pour la première fois, la documentation d'haskell était aussi aguichante que le code pénal...
Mais si on a les bons profs, c'est très agréable de programmer en Haskell, notamment à cause du typage fort qui permet de détecter beaucoup d'erreurs à la compilation, de l'interpréteur qui permet de tester rapidement des fonctions (en C, créer un fichier, le sauvegarder, le compiler, le lancer...) et du côté fonctionnel (évaluation paresseuse, lambda-fonctions, compréhension de listes, définition récursive des fonctions - c'est la définition qui est récursive et pas seulement la fonction).
[^] # Re: contradictions
Posté par Octabrain . Évalué à 2.
# Et...
Posté par Ilias Belaidi . Évalué à 1.
http://www.scala-lang.org/
/* un petit coucou à toi Victor :} */
[^] # Re: Et...Pour
Posté par Ummon . Évalué à 1.
Sortie fin novembre, disponible sur papier électronique.
[^] # Re: Et...
Posté par Victor . Évalué à 3.
Allez donc faire un saut sur le "Tour of Scala" ( http://www.scala-lang.org/node/104 ) qui présente les grand concepts.
/* Un petit bisou à toi Ilias :D */
[^] # Re: Et...
Posté par hsyl20 (site web personnel) . Évalué à 1.
[^] # Re: Et...
Posté par benoar . Évalué à 2.
# Troll...
Posté par Octabrain . Évalué à 4.
Mais oui, comparer les vitesses d'un langage compilé et d'un langage de script, quelle bonne idée ! (oui, je sais que Haskell peut être interprété, mais le benchmark shootout debian dont tu te sers de preuve utilise GHC, un compilateur Haskell)
[^] # Re: Troll...
Posté par arronax . Évalué à 1.
Cela dit mon but était juste de présenter un langage que je trouve intéressant mais qui peut en rebuter pas mal, la mauvaise qualité de la doc et l'impossibilité de programmer en impératif sans utiliser de monades y étant pour quelque chose. Alors Python c'est très bien pour les scripts mais quand on veut faire de la programmation haut niveau ou du prototypage, il y a plus rapide.
# Il était une fois les langages fonctionnels ...
Posté par Miguel Moquillon (site web personnel) . Évalué à 4.
- les vieux langages reprennent du poil de la bête (Haskell, Erlang, ...)
- les langages impératifs introduisent des concepts fonctionnels,
- de nv langages fonctionnels apparaissent (Scala par exemple).
Et je pense que ceci est en grande partie dû à deux aspects :
- ce sont des langages d'assez haut niveaux qui permettent de répondre à des problématiques bcp plus complexes et de façon plus élégante que ne le peuvent actuellement les langages dîts impératifs,
- les architectures multi-corps et la progression de la programmation parallèle sur le marché ont mis en lumière les limites des outils actuels utilisés et basé sur une structure impérative et les facultés des langages fonctionnels dans le domaine.
Le tout évidemment combiné avec la monté en puissance des machines qui permettent de palier aux pb de perfs inhérents aux programmes fonctionnels (quoique lorsque l'on regarde un programme en Caml ...)
Ce qui est intéressant dans Haskell, c'est l'innovation que gravite autour. Il supporte ainsi non seulement le fonctionnel de second ordre, mais aussi, en quelque part, le typage du second ordre avec ses classes de type (un clin d'œil à la théorie F-Bound de Cook).
A côté de ceci, pour ceux qui veulent s'y exercer, il existe xmonad, un gestionnaire de fenêtres X en Haskell ; vous pouvez y lire un peu son code, jouer avec. Au début, je recommande de jouer d'abord avec la conf qui est écrite en Haskell et qui est compilée à la volé dès le démarrage ou le redémarrage du gestionnaire.
Sinon, je me suis acheté le bouquin sur Erlang de Joe Armstrong (Programming Erlang: Software for a Concurrent World) afin de m'amuser un peu plus avec ce langage (enfin, qd j'ai le temps, ce qui est de plus en plus rare ces temps-ci)
[^] # Re: Il était une fois les langages fonctionnels ...
Posté par Ummon . Évalué à 2.
Le résultat se trouve ici (serveur de préprod, donc on peut y faire ce que l'on veut) : http://www.euphorik.ch:8090
Et le code est libre et disponible ici : http://dev.euphorik.ch/repositories/browse/euk/tags/1.1.4
Ce qui est marrant c'est que le paradigme fonctionnel existe depuis bientôt 50 ans avec des langage tel que Lisp. Il a beaucoup et est toujours utilisé dans le domaine de la recherche mais peu connu par le grand public. A mon avis c'est dû au grand succès de C puis de l'orienté objet façon C++ qui ont donné naissance à des langages, pas forcément des plus joyeux, comme Java et C# qui représentent actuellement une très grande partie du marché.
On redécouvre actuellement le fonctionnel grâce à des langages de plus en plus accessibles et documentés tels que Clojure, Erlang, Scala, OCaml, Haskell, etc. Il est clair que la programmation fonctionnelle apporte des concepts plus abstraits comme la currification, les fonctions de premier ordre, les fonctions d'ordre supérieur, l'immutabilité, etc. alors que l'orienté objet se veut une approche de modélisation du monde réel par décomposition en objets.
Également quelques langages, à la base très orienté objet, se rapprochent du monde fonctionnel, je pense notamment à Ruby, Python et C# (peut être Java dans quelques dizaines d'années :P).
Bref, j'encourage tout le monde, du moins les programmeurs, à s'intéresser de plus près à ces langages. J'avais mis un lien précédemment qui je pense peut être une bonne introduction, je le remets ici : http://learnyouahaskell.com/chapters
Bonne lecture !
[^] # Re: Il était une fois les langages fonctionnels ...
Posté par Guillaume Knispel . Évalué à 3.
[^] # Re: Il était une fois les langages fonctionnels ...
Posté par Sylvain Sauvage . Évalué à 4.
Il a p.ex. fallu pas mal de temps pour que l’orienté objet soit réellement utilisé : des concepts en 1965-1980 à nos jours où quasiment aucun langage ne les possède pas.
J’ai une idée sur l’évolution de cette culture de fond (et je parle bien de l’évolution de la culture commune de la masse, pas de l’évolution des langages eux-mêmes, hein).
Au début était le verbe ; mais seulement à l’impératif. L’impératif semble le plus facile à concevoir (façon recette de cuisine, liste de tâches à faire). Ensuite, on ajoute l’objet ; il s’intègre bien dans un langage impératif. Ça ne demande que quelques concepts en plus (encapsulation, classe, héritage…), et pas forcément tous en même temps. Il y a mis le temps mais l’objet est devenu une connaissance de base. Et, depuis 14 ans, les motifs de conception ont fait leur apparition. Et si on regarde bien, qu’ajoutent-ils ? Des concepts fonctionnels à la POO. La plupart des motifs du GoF95 expliquent comment faire en OO ce que l’on ferait si simplement en fonctionnel, comme passer des comportements (donc des fonctions) par des objets (Command, Iterator, Visitor…).
De ce fait, des notions de programmation fonctionnelle entrent dans le pot commun et, donc, les langages fonctionnels commencent à reprendre la cote. Ils ne sont plus si étranges puisque l’on en connaît quelques notions, par leur utilisation.
[^] # Re: Il était une fois les langages fonctionnels ...
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 2.
Non seulement les concepts etaient la, mais ils etaient prouve's mathematiquement...
La prog fonc, c'est la fete a la maison. Du code de haut niveau, une super modularite', et des principes supers evidents, contrairement a ce qu'on lit/entend souvent... La recursivite' *est* naturelle pour l'homme. Un exemple (lu hier) simple, celui de l'historien :
1/ Un historien lit un livre, puis liste les references citees et ecrit ses notes
2/ Pour chaque reference, il lit le livre et continue ainsi de suite.
*hooo* la recursivite, c'est juste ca ?
Ben oui. Vachement dur hein ? C'est super naturel, mais pas imperatif du tout.
Apres, l'abstraction fonctionelle elle meme, c'est les outils de tout les jours, y compris l'homme lui meme.
Tu prends un gars G, tu lui donnes un petit marteau M, et tu obtiens MG qui attend juste un petit clou pour l'enfoncer. Application partielle et typage d'un coup. Franchement, c'est ultra simple a concevoir le fonctionnel... et tellement naturel...
Enfin, j'ai bosse' dans deux boites, j'ai fait du Scheme, du Erlang et du Common Lisp... Je ne travaille que dans des boites qui utilisent des langages fonctionnels, et c'est toujours des boites qui veulent du bon code robuste, propre, efficace, et facile a maintenir, et des devs doue's. Ets elles l'ont.
La cote des langages fonctionelle sera limitee tant que la qualite des logiciels ne sera pas un facteur determinant, et tant qu'on aura des chefs de projet sans qualifications adequates. Autant dire longtemps... (le pro des prog fonc qui me dit "on va faire ca en PHP", je lui fait confiance. Le gars qui n'y connais rien en prog fonc et qui me dit "on va faire ca en PHP", je lui rigole au nez et je me casse)
[^] # Re: Il était une fois les langages fonctionnels ...
Posté par freeze . Évalué à 1.
Alors je suis d'accord, une fois que t'es à l'aise avec la récursivité tu peux la voir partout ... mais c'est un peu réducteur de dire que la récursivité est évidente pour tous. Ton historien, s'il l'utilise sans en être conscient, ne va pas nécessairement la trouver évidente ta récursivité ...
[^] # Re: Il était une fois les langages fonctionnels ...
Posté par Sylvain Sauvage . Évalué à 4.
Non seulement les concepts etaient la, mais ils etaient prouve's mathematiquement...
J’avais pourtant bien écrit :
(et je parle bien de l’évolution de la culture commune de la masse, pas de l’évolution des langages eux-mêmes, hein)
parce que ce dont on parle, c’est bien de la popularité des concepts parmi ceux qui programment.
[…] Ben oui. Vachement dur hein ? C'est super naturel, mais pas imperatif du tout.
Ben si, ta présentation de la récursivité, elle est impérative-procédurale pour moi, avec des effets de bord en plus.
Et le passage de la récursivité itérative/impérative à la programmation fonctionnelle, il n’est pas si facile que cela.
La cote des langages fonctionelle sera limitee tant que la qualite des logiciels ne sera pas un facteur determinant, et tant qu'on aura des chefs de projet sans qualifications adequates. Autant dire longtemps...
C’est pas faux.
(le pro des prog fonc qui me dit "on va faire ca en PHP", je lui fait confiance. Le gars qui n'y connais rien en prog fonc et qui me dit "on va faire ca en PHP", je lui rigole au nez et je me casse)
Oh, ben moi, dès qu’il dit « PHP », qu’il soit pro de la programmation fonctionnelle ou pas, je me casse… :oP
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.