Haskell est utilisé dans plusies domaines, notamment le traitement d'images. Qu'est-ce que Haskell a de plus que les autres langages de programmations?
Haskell est utilisé dans plusies domaines, notamment le traitement d'images. Qu'est-ce que Haskell a de plus que les autres langages de programmations?
Je ne pense pas que l'angle d'approche de la question soit le bon car théoriquement les langages généralistes (C, C++, Java, C#, Python, Perl,...) sont Turing complet, est donc peuvent "tout" exprimer. Dans ce sens, Haskell n'apporte rien de plus.
Par contre ce qui est intéressant, c'est l'approche utilisée par Haskell (ou plus largement la programmation fonctionnelle).
Au lieu d'imposer un ensemble d'instructions à la suite (chacune dépendant de l'autre chronologiquement), on va plutôt "brancher" un résultat à l'entrée d'un autre calcul (composition).
C'est très déclaratif et la conséquence directe est que le code est très expressif (Il y a pas de code de contexte, comme l'instanciation de variables ou d'affectation).
Quand la programmation orientée objet prône l'encapsulation (et donc la possibilité d'avoir des effets de bord cachés), Haskell préfère la transparence référentielle => le résultat du programme ne change pas si on remplace une expression par une expression de valeur égale. Ce qui interdit les mises à jours destructrices ou encore des fonctions qui ne retournent aucune valeur (void).
Cette propriété permet de faciliter grandement la programmation parallèle (on a la garantie que la donnée ne sera pas altérée dans un autre thread).
Le traitement d'image revenant à beaucoup de calculs matriciels. Ces calculs sont extrêmement parallélisables, domaine où Haskell est très efficace.
Une autre particularité d'Haskell est son système de typage (le fameux Hindley-Milner) qui permet en outre d'encoder la complexité dans la signature du type.
Par exemple, il est possible en Haskell de garantir à la compilation que le handle d'accès à la base de données ne sera pas utiliser après avoir été libéré.
Je crois que tu vas l'assommer avec trop de notions inconnues là !
Je ne comprends pas moi-même ce que tu entends par "encoder la complexité dans la signature de type".
EDIT : à vrai dire, c'est vrai qu'on parle du système de types Hindley-Milner. La vérité est dure à trouver... :-)
Je suis d'accord avec toi, mais par abus de langage, il est souvent associé au système de typage.
Pour le second point, je te passe lien du package sur hackage:
Resource (Conduit)
Y'a d'autres exemples d'encodage de la complexité dans le typage très simple. Par exemple si on veut traiter une liste garantit à 100% d'avoir au moins un élément
Code Haskell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 data NonEmptyList a = NonEmptyList { neHead :: a, neTail :: [a] } ... process :: NonEmptyList a -> b -- pas besoin de vérifier si la liste est vide process = ...
Y'a également la monade ST qui te garantie dès la compilation que son état interne n'est pas visible par le reste du programme.
C'était ce genre de chose dont je faisais référence
À noter que cette description n'a rien d'officielle. Je l'ai souvent vu utilisée par certains membres de la communauté Haskell comme Tony Morris ou encore Edward Kmett
Ok. Le mot complexité est également maladroit ici, je pensais que tu parlais de complexité algorithmique.
Pour répondre au post original, je pense également que la question est malvenue.
Haskell favorise une approche fonctionnelle pure, propose diverses approchess plus ou moins efficaces pour le parallélisme et la concurrence, et pousse vers les innovations dans le domaine des langages de programmation.
Il pourra plaire à certains et déplaire à d'autres. Certaines tâches sont facilitées (typiquement, ce qui se prête bien au paradigme fonctionnel), d'autres sont moins évidentes (la gestion de l'empreinte mémoire, l'anticipation des propriétés du code généré, les algorithmes fortement impératifs).
C'est avant tout un compromis, un langage très expressif mais un peu plus abrupt que ses concurrents "mainstream".
Je dirais que c'est un bon langage pour apprendre à penser autrement, à sortir les yeux des ornières de l'impératif pour découvrir d'autres modes de fonctionnement, et s'armer ainsi de nouveaux outils de réflexion pour approcher des problèmes complexes. (une sorte de super design pattern ? :-d)
Vaaaaste débat, mais que tu peux ne pas restreindre à Haskell.
Le principal me semble avoir été dit.
Cela dit, si tu veux continuer à réfléchir, tu trouveras plein de choses sur dvp et via ton moteur de recherche préféré. Je suis tombé sur des articles relativement récents (même si des articles de 10 ans d'âge sont toujours valables).
Dans le premier, Haskell s'invite à partir de réflexions sur le C++. Ce gars a d'ailleurs un blog intéressant, et s'est mis à participer aux groupes de travail C++0x (ce n'est pas un débutant).
Dans le billet que je cite, il y a un renvoi sur un article intéressant qui est plus de l'ordre de impératif / fonctionnel, dans une perspective d'évolution. Avec "évolution" comme dans "Darwin". Intéressant àmha.
poke 1024,0; poke 214,214
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager