web-dev-qa-db-fra.com

À quoi sert Haskell dans le monde réel?

Il y a beaucoup de battage publicitaire autour de Haskell, cependant, il est difficile d'obtenir des informations sur son utilisation dans les applications du monde réel. Quels sont les projets/usages les plus populaires de Haskell et pourquoi il excelle dans la résolution de ces problèmes?

456
Sergio Tapia

Quelles sont les utilisations courantes de cette langue?

Développement rapide d'applications.

Si vous voulez savoir "pourquoi Haskell?", Vous devez considérer les avantages des langages de programmation fonctionnels (extrait de http://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Les programmes fonctionnels ont tendance à être beaucoup plus laconiques que leurs homologues de ImperativeLanguage. Cela conduit souvent à une productivité accrue du programmeur

  • FP encourage le prototypage rapide. En tant que tel, je pense que c'est le meilleur paradigme de conception logicielle pour ExtremeProgrammers ... mais que sais-je?

  • FP est modulaire dans la dimension de la fonctionnalité, où ObjectOrientedProgramming est modulaire dans la dimension de différents composants.

  • La possibilité d'avoir votre gâteau et de le manger. Imaginez que vous avez un système complexe OO qui traite les messages - chaque composant peut modifier l’état en fonction du message, puis le transférer à certains objets auxquels il est lié. Ne serait-il pas trop cool de pouvoir annuler facilement chaque modification si un objet situé dans la hiérarchie des appels décidait que le message était défectueux? Que diriez-vous d'avoir une histoire de différents états?

  • De nombreuses tâches ménagères sont faites pour vous: déconstruire les structures de données (PatternMatching), stocker les liaisons de variables (LexicalScope avec des fermetures), typage renforcé (TypeInference), GarbageCollection, allocation de stockage, l'opportunité d'utiliser boxed (pointeur sur valeur) ou unboxed (valeur directement) ) représentation...

  • Multithreading sécurisé! Les structures de données immuables ne sont pas soumises aux conditions de concurrence des données et ne doivent par conséquent pas être protégées par des verrous. Si vous allouez toujours de nouveaux objets, plutôt que de manipuler de manière destructive ceux existants, le verrouillage peut être masqué dans le système d'allocation et GarbageCollection.

En dehors de cela, Haskell a ses propres avantages tels que:

  • Syntaxe claire et intuitive inspirée de la notation mathématique.
  • Comprendre les listes pour créer une liste basée sur des listes existantes.
  • Expressions lambda: créer des fonctions sans leur donner de noms explicites. Il est donc plus facile de gérer de grandes formules.
  • Haskell est complètement référentiellement transparent . Tout code utilisant des E/S doit être marqué comme tel. De cette façon, il vous incite à séparer le code avec les effets secondaires (par exemple, l'affichage de texte à l'écran) du code sans (calculs).
  • L'évaluation paresseuse est une fonctionnalité vraiment intéressante:
    • Même si quelque chose causait généralement une erreur, cela fonctionnerait aussi longtemps que vous n'utilisiez pas le résultat. Par exemple, vous pouvez utiliser 1 / 0 comme premier élément d'une liste et cela fonctionnera toujours si vous n'utilisiez que le deuxième élément.
    • Il est plus facile d'écrire des programmes de recherche comme celui-ci solutionneur de sudok car il ne charge pas toutes les combinaisons à la fois, il les génère au fur et à mesure. Vous pouvez le faire dans d'autres langues, mais seul Haskell le fait par défaut .

Vous pouvez consulter les liens suivants:

297
Xinus

Je pense que les personnes dans ce post manquent le point le plus important pour ceux qui n’ont jamais utilisé de langage de programmation fonctionnel: élargir leur esprit. Si vous êtes nouveau dans le domaine de la programmation fonctionnelle, Haskell vous fera réfléchir d'une manière que vous n'avez jamais envisagée auparavant. En conséquence, votre programmation dans d’autres régions et d’autres langues s’améliorera. Combien? Difficile à quantifier.

225
wheaties

Il existe une bonne réponse à l’utilité d’un langage généraliste comme Haskell: écrire des programmes en général.

Pour ce qui est utilisé en pratique, j'ai trois approches pour établir que:

Indique qu'il convient aux graphiques, aux réseaux, à la programmation système, aux structures de données, aux bases de données, au développement, au traitement de texte, etc.

Et enfin, mon avis sur ce à quoi il est vraiment fort:

J'espère que cela vous donne une idée de la portée de votre question, si vous souhaitez y répondre avec précision.

84
Don Stewart

Un exemple d'utilisation de Haskell est xmonad , un "gestionnaire de fenêtres caractéristique comportant moins de 1200 lignes de code".

29
unutbu

De le wiki de Haskell :

Haskell a un large éventail d'utilisations commerciales, de l'aérospatiale à la défense, en passant par le financement, les startups Web, les entreprises de conception de matériel et les fabricants de tondeuses à gazon. Cette page rassemble des ressources sur l'utilisation industrielle de Haskell.

Selon Wikipedia, le langage Haskell est né de la nécessité de consolider les langages fonctionnels existants en un langage commun pouvant être utilisé pour de futures recherches sur la conception de langages fonctionnels.

Il est évident, d’après les informations disponibles, que son objectif initial est dépassé et qu’il est utilisé à d’autres fins que la recherche. Il est maintenant considéré comme un langage de programmation fonctionnel à usage général.

Si vous vous demandez toujours "Pourquoi devrais-je l'utiliser?", Lisez le Pourquoi l'utiliser? section de l'introduction du wiki Haskell.

18
Robert Groves

Haskell est un langage de programmation à usage général. Il peut être utilisé pour tout ce que vous utilisez dans une autre langue. Vous n'êtes limité que par votre propre imagination. Quant à ce à quoi il convient? Eh bien, à peu près tout. Il existe peu de tâches dans lesquelles un langage fonctionnel ne fonctionne pas avec Excel.

Et oui, je suis le Rayne de Dreamincode. :)

J'aimerais également mentionner que, au cas où vous ne liriez pas la page Wikipedia, la programmation fonctionnelle est un paradigme, tout comme la programmation orientée objet est un paradigme. Juste au cas où vous ne le sauriez pas. Haskell est également fonctionnel dans le sens où cela fonctionne; cela fonctionne très bien à cela.

Ce n’est pas parce qu’une langue n’est pas une langue orientée objet que la langue est limitée par quoi que ce soit. Haskell est un langage de programmation polyvalent, et tout aussi polyvalent que Java.

13
Rayne

J'en ai un bon, facebook a créé un outil automatisé pour réécrire le code PHP. Ils analysent la source dans un arbre de syntaxe abstraite et effectuent quelques transformations:

if ($f == false) -> if (false == $f)

Je ne sais pas pourquoi, mais cela semble être leur style particulier et ensuite ils l’impriment bien.

https://github.com/facebook/Lex-pass

Nous utilisons haskell pour créer des langues spécifiques à de petits domaines. Des quantités énormes de traitement de données. Développement web. Araignées Web. Test des applications. Rédaction de scripts d’administration système. Les scripts de backend, qui communiquent avec les autres parties. Scripts de surveillance (nous avons un DSL qui fonctionne bien avec munin, ce qui facilite beaucoup l'écriture du code de moniteur correct pour vos applications.)

Toutes sortes de choses en fait. Il s’agit d’un langage à usage général de tous les jours, doté de fonctionnalités très puissantes et utiles, si vous êtes plutôt enclin aux mathématiques.

9
Edgar Klerks

De Haskell :

Haskell est un normalisé, langage de programmation purement fonctionnel , avec une sémantique non stricte et un typage statique fort. Il porte le nom du logicien Haskell Curry.

Fondamentalement, Haskell peut être utilisé pour créer à peu près tout ce que vous créeriez normalement à l'aide d'autres langages à usage général (par exemple, C #, Java, C, C++, etc.).

6
Andrew Hare

Par exemple, pour développer des applications Web HTML5 interactives en temps réel. Voir Elm , dont le compilateur est implémenté dans Haskell et dont la syntaxe emprunte beaucoup à Haskell.

5
thSoft

C’est une très bonne source d’informations sur Haskell et ses utilisations:

Libérations et croissance de Haskell Open Source

3
Robert Harvey