À quoi sert Haskell dans le monde réel? [fermé]


475

Il y a beaucoup de battage médiatique autour de Haskell, cependant, il est difficile d'obtenir des informations sur la façon dont il est utilisé 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?


56
Non, je ne le ferai pas car c'est une réponse claire. Pas de marge de manœuvre pour les opinions et autres. Je veux juste savoir pour quoi le langage a été créé.
Sergio Tapia


12
@ Papuccino1, attendez, ne voulez - vous savoir ce qu'il est utile pour, ou ce qu'il a été créé pour? Le premier est ce que la question pose, et il y a beaucoup de place pour l'opinion là-bas ...
bdonlan

3
@ Papuccino1 - Quel avantage les mots supplémentaires de votre titre apportent-ils à la question? En outre, je pense que vous comprenez mal l'utilisation du terme "fonctionnel" dans ce contexte, mais c'est difficile à dire.
Chris Lutz

2
Selon leur propre site Web, de nombreuses entreprises l'utilisent à différentes fins ... haskell.org/haskellwiki/Haskell_in_industry
Julian

Réponses:


309

Quelles sont les utilisations courantes de cette langue?

Développement rapide d'applications.

Si vous voulez savoir «pourquoi Haskell?», Alors vous devez considérer les avantages des langages de programmation fonctionnels (extraits de https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Les programmes fonctionnels ont tendance à être beaucoup plus concis que leurs homologues 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 de logiciels pour ExtremeProgrammers ... mais que sais-je?

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

  • La possibilité d'avoir votre gâteau et de le manger. Imaginez que vous ayez un système OO complexe qui traite les messages - chaque composant peut faire des changements d'état en fonction du message, puis transmettre le message à certains objets auxquels il est lié. Ne serait-il pas trop cool de pouvoir annuler facilement chaque modification si un objet au plus profond de 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 de gestion interne faites pour vous: déconstruire les structures de données (PatternMatching), stocker des liaisons variables (LexicalScope avec fermetures), une frappe forte (TypeInference), GarbageCollection, l'allocation de stockage, si vous souhaitez utiliser en boîte (pointeur vers valeur) ou non en boîte (valeur directement ) représentation...

  • Multithreading sûr! Les structures de données immuables ne sont pas soumises à des conditions de concurrence entre les données et ne doivent donc pas être protégées par des verrous. Si vous allouez toujours de nouveaux objets, plutôt que de manipuler de manière destructive des objets 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.
  • Liste des compréhensions pour créer une liste basée sur des listes existantes.
  • Expressions lambda: créez 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 encourage à séparer le code avec des effets secondaires (par exemple, mettre du texte à l'écran) du code sans (calculs).
  • L'évaluation paresseuse est une fonctionnalité vraiment intéressante:
    • Même si quelque chose provoque généralement une erreur, cela fonctionnera aussi longtemps que vous n'utiliserez pas le résultat. Par exemple, vous pouvez mettre 1 / 0le premier élément d'une liste et cela fonctionnera toujours si vous n'utilisez que le deuxième élément.
    • Il est plus facile d'écrire des programmes de recherche tels que ce solveur sudoku car il ne charge pas toutes les combinaisons à la fois - il les génère simplement 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:


20
La pensée suivante me vient souvent à l'esprit: dans un langage pur, une fonction renvoie toujours le même résultat lorsqu'elle passe les mêmes paramètres. Ceci est une garantie. Les langages impératifs, en revanche, construisent tout au-dessus des «déclarations». Une déclaration ne comporte aucune garantie (sauf que son exécution consomme du temps et produit de la chaleur). Ainsi, la fondation est déjà fragile et tout ce qui se trouve dessus reste fragile. Pour moi, c'était l'une des raisons d'apprendre le haskell.
Martin Drautzburg

8
Cela fait 6 ans que cette question a été posée et depuis le début du langage de programmation Go. Malgré un système de type plus faible et généralement "objectivement inférieur" (selon les fans fonctionnels / ML), il a réussi à expédier plus de logiciels (et plus important) au cours de ces 6 années que Haskell en 26 ans. Je veux dire ceci comme une étude de cas; il y a clairement des choses qui freinent les langages fonctionnels, et ils ne peuvent pas tous être attribués au battage médiatique.
weberc2

3
Vous avez oublié un point - le codage dans haskell est une explosion absolue;) Je me suis tellement amusé à m'essayer à certains problèmes dans haskell.
J Atkin

8
@MartinDrautzburg Bien sûr, les déclarations sont assorties de garanties. Quel genre de langage utile aurait des déclarations sans garanties? Par exemple, en C x = 5;garantit qu'après son exécution, xcontient la valeur 5.
user253751

5
@ E4z9 Ouais mais en C ++ ça garantit que ça operator =s'appelle. Et il garantit ce qui se passe si vous ne définissez pas unoperator =
user253751

234

Je pense que les gens dans ce post manquent le point le plus important pour quiconque n'a jamais utilisé un langage de programmation fonctionnel: élargir votre esprit. Si vous êtes nouveau dans la programmation fonctionnelle, Haskell vous fera penser d'une manière que vous n'avez jamais pensée auparavant. En conséquence, votre programmation dans d'autres domaines et d'autres langues s'améliorera. Combien? Difficile à quantifier.


2
J'utilise un iPhone, un Mac. Où Haskell est-il utilisé? Je veux dire que pour les applications que j'ai utilisées, elles sont écrites en Objective-C ou Swift + quelque chose pour la base de données et les serveurs. Swift peut également être fonctionnel. Encore une fois, je suis confus quant à son utilisation
Honey

2
Facebook fait la détection de SPAM avec lui: code.facebook.com/posts/745068642270222/…
Alex

25
Cette réponse, écrite sur un ton différent, dit que Haskell est un excellent exercice pour un programmeur, que l'OMI ne fait pas un excellent langage à usage général
Passer par le

5
Chez Keera Studios, nous écrivons des jeux et applications iOS et Android en utilisant Haskell.
Ivan Perez

1
Je suis complètement d'accord avec ça. J'ai écrit beaucoup de code au cours des décennies dans des langages impératifs. J'explore Haskell depuis quelques mois et cela m'a ouvert l'esprit à des choses auxquelles je n'avais pas pensé auparavant.
Adahus

87

Il y a une bonne réponse pour ce qu'est un langage à usage général comme Haskell: l'écriture de programmes en général.

Pour ce à quoi il est utilisé dans la pratique, j'ai trois approches pour établir cela:

Indique qu'il est bon pour les graphiques, la mise en réseau, la programmation de systèmes, les structures de données, les bases de données, le développement, le traitement de texte ...

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

J'espère que cela vous donne une idée de l'ampleur de votre question, si elle doit être répondue avec précision.


15
Le nuage de tags est cassé
Elliot Cameron

le nuage de tags a-t-il été généré à l'aide de wordcloud ?
Janus Troelsen du

29

Un exemple de Haskell en action est xmonad , un "gestionnaire de fenêtres complet en moins de 1 200 lignes de code".


18

Du wiki Haskell :

Haskell a une gamme variée d'utilisation commerciale, de l'aérospatiale et de la défense, à la finance, aux startups Web, aux entreprises de conception de matériel et aux fabricants de tondeuses à gazon. Cette page recueille des ressources sur l'utilisation industrielle de Haskell.

Selon Wikipedia, le langage Haskell a été créé par la nécessité de consolider les langages fonctionnels existants en un langage commun qui pourrait être utilisé pour de futures recherches sur la conception de langage fonctionnel.

Il est évident, sur la base des informations disponibles, qu'il a dépassé son objectif d'origine et est utilisé pour bien plus 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?", Alors lisez Pourquoi l'utiliser? section de l'introduction du wiki de Haskell.


13

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é par rien d'autre que votre propre imagination. Quant à quoi il convient? Eh bien, à peu près tout. Il existe peu de tâches dans lesquelles un langage fonctionnel n’excelle pas.

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

Je voudrais également mentionner que, si vous n'avez pas lu la page Wikipedia, la programmation fonctionnelle est un paradigme 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ù il fonctionne; cela fonctionne plutôt bien.

Ce n'est pas parce qu'un langage n'est pas un langage orienté objet que le langage est limité par quoi que ce soit. Haskell est un langage de programmation à usage général et est tout aussi polyvalent que Java.


9

J'en ai un cool, Facebook a créé un outil automatisé pour réécrire le code PHP. Ils analysent la source dans un arbre de syntaxe abstraite, 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 assez.

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

Nous utilisons haskell pour créer des langages spécifiques aux petits domaines. D'énormes quantités de traitement de données. Développement web. Araignées Web. Tester les applications. Écriture de scripts d'administration système. Scripts backend, qui communiquent avec d'autres parties. Scripts de surveillance (nous avons une DSL qui fonctionne bien avec munin, il est beaucoup plus facile d'écrire le code de moniteur correct pour vos applications.)

Toutes sortes de choses en fait. C'est juste un langage d'usage général avec des fonctionnalités très puissantes et utiles, si vous êtes quelque peu incliné mathématiquement.


6
Re: le style FB, mettre le faux avant le == signifie que si vous oubliez et n'écrivez qu'un seul = alors le comportement résultant sera plus manifestement erroné au lieu d'effectuer silencieusement une opération d'affectation involontaire et de continuer normalement
Magnus

Un qui est intelligent, votre force qui a particulièrement l'erreur d'être connue alors compiler le temps.
Edgar Klerks

@EdgarKlerks, PHP n'a pas de temps de compilation. Cela oblige à lever l'exception là où se trouvait l'erreur, plutôt que de conduire à un comportement bizarre ou à des erreurs dans le code distant.
dfeuer

Bien que je vois l'avantage d'écrire falsesur la gauche, je ne vois pas l'intérêt d'utiliser un outil pour le faire automatiquement: si vous avez déjà un ==opérateur, vous savez déjà que vous n'avez pas le bogue dont cette partie lex-pass est censé attraper, et si vous en avez un, =il n'y a aucun moyen sûr de dire si c'est comme ça délibérément.
Jeremy List

1
@JeremyList Peut-être qu'ils sont vraiment stricts sur le style de codage. Je peux voir que le code correctement formaté invite à écrire du code plus correctement formaté. Juste une supposition folle.
Edgar Klerks

6

De Haskell :

Haskell est un langage de programmation purement fonctionnel normalisé, à usage général , avec une sémantique non stricte et un typage statique fort. Il est nommé d'après le logicien Haskell Curry.

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


5

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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.