Haskell est le plus étroitement lié à la famille de langues ML. Cela inclut des choses comme OCaml , bien sûr, mais aussi F # sur la plate-forme .NET. Ces langages partagent avec Haskell les fondements du système de types et la façon dont les données sont utilisées - types de données algébriques, correspondance de modèles, inférence de types, etc. , pour commencer, et la popularité de Haskell comme véhicule de recherche dans les systèmes de types et la conception de langage signifie que la plupart des langages de style ML ont tendance à avoir des systèmes de type moins puissants (mais potentiellement plus faciles à comprendre). Il est probablement prudent de dire que même si vous pouvez manquercertaines choses à propos de Haskell, en particulier au début, la plupart des programmeurs Haskell se sentiraient probablement à l'aise dans un ML assez rapidement, à un niveau de base. Si vous voulez un langage avec la même structure globale que Haskell, un ML est votre meilleur pari.
Le côté fonctionnel de Scalas'inspire également fortement de la tradition ML, et intègre également des fonctionnalités de système de type avancées familières à Haskell, ainsi qu'un système OOP plus standard intégré à ce qui précède. Alors que OO dans les langages de style ML a tendance à être considéré comme davantage un "modèle OO avec des outils fonctionnels de base", Scala vit et respire OO de style Java. Cela présente des avantages pour Java Interop, comme vous pouvez l'imaginer, et présente un environnement de travail plus familier pour les programmeurs OO. Cependant, venant d'un arrière-plan Haskell, vous êtes plus susceptible d'être ennuyé par les façons dont le mélange des choses dans Scala rend les idiomes fonctionnels plus maladroits et trouve la plupart des API Java mal conçues et inutilement difficiles à utiliser.
Enfin, même si cela peut sembler étrange à considérer, Clojure a en fait beaucoup de choses en commun avec Haskell à un niveau plus philosophique. La plupart de ce que vous trouverez dans l'approche de Clojure de l' état et des valeurs par rapport aux identités est très proche de ce que Haskell formalise à travers le système de type. En conséquence, Clojure met l'accent sur l'interopérabilité Java dans une moindre mesure et ne se soucie pas autant de glisser dans la POO, donc à certains égards, l'approche de Clojure de la programmation fonctionnelle elle - même peut être la plus proche de ce que vous connaissez déjà. Je pense qu'il est révélateur à cet égard que, à ma connaissance, Clojure est la seule langue en plus de Haskell qui a une implémentation de STMc'est simple, efficace et ça marche. D'un autre côté, Clojure est issu de la tradition Lisp et n'a donc pas le système de type statique et l'accent sur les types de données algébriques et la correspondance de motifs trouvés dans les langages influencés par ML. Et bien sûr, c'est un Lisp, qui est en soi un point négatif pour certaines personnes (même si je ne sais vraiment pas pourquoi).
Pour ma part, avec l'avertissement que ma première expérience avec la programmation fonctionnelle était dans Scheme, je pencherais probablement vers Clojure, avec OCaml un deuxième choix probable.
Je ne l'ai jamais utilisé moi-même, mais je vois parfois Scala apparaître dans des blogs ou des descriptions de projets et je crois que cela a pris des concepts majeurs de Haskell. Scala se compile sur la JVM et peut interagir avec Java.
la source
Une alternative fonctionnelle est Erlang . Bien qu'il s'agisse d'un langage très simultané, le sous-ensemble séquentiel est un langage fonctionnel pur avec de nombreuses propriétés des langages fonctionnels, par exemple les fermetures, les données immuables et la correspondance de modèles. Il fonctionne sur de nombreuses plates-formes, y compris linux, divers unix, windows et macosx. Il y a même maintenant une implémentation sur la JVM, erjang . Il peut facilement communiquer et coexister avec d'autres langues, c'est ainsi qu'il est souvent utilisé.
Consultez le site principal .
la source
Clojure est de plus en plus largement utilisé, et bien qu'il ne ressemble pas à Haskell à un niveau superficiel, si vous regardez un peu plus en profondeur, il est clairement très inspiré par Haskell et encourage un style fonctionnel très similaire.
Fonctionnalités clés de Clojure que les utilisateurs de Haskell peuvent trouver familières et convaincantes:
Différences clés (peuvent être positives ou négatives selon votre point de vue):
Point de vue personnel: j'ai appris Haskell avant Clojure et j'ai adoré Haskell pour son élégance et sa pureté mathématique. Clojure tire beaucoup d'inspiration et emprunte beaucoup de bonnes fonctionnalités à Haskell, mais est une langue beaucoup plus pragmatique / pratique. Surtout lorsque vous comptez l'énorme valeur de pouvoir tirer parti de l'écosystème de la bibliothèque Java, c'est un excellent langage pour "faire avancer les choses".
la source
Si vous aimez Haskell, mais devez faire du code pour la JVM, frege peut vous intéresser. Il est conçu pour être aussi proche que possible de Haskell 2010, tout en générant du code Java.
Bien sûr, frege lui-même n'a rien à voir avec le «langage de production largement utilisé» (il vient d'être publié récemment), mais Java l'est certainement.
la source