Dois-je apprendre Haskell ou F# si je connais déjà OCaml? [fermé]

je me demande si je dois continuer à apprendre L'OCaml ou passer à F# ou Haskell.

Voici les critères qui m'intéressent le plus:

  • longévité

    • quelle langue durera le plus longtemps? Je ne veux pas apprendre quelque chose qui pourrait être abandonné dans quelques années par les utilisateurs et les développeurs.
    • Will Inria, Microsoft, Université de Glasgow continuent à soutenir leurs compilateurs respectifs pour le long terme?
  • aspect pratique

    • des Articles comme ce me font craindre D'utiliser Haskell. Une table de hachage est la meilleure structure pour une récupération rapide. Les promoteurs de Haskell là-bas suggèrent d'utiliser les données.La carte qui est un arbre binaire.
    • Je n'aime pas être attaché à un gros. cadre moins que les avantages sont grands.
    • je veux être en mesure de développer plus que des parsers et des programmes de mathématiques.
  • Bien Conçu

    • j'aime que mes langues soient cohérentes.

Veuillez étayer votre opinion avec des arguments logiques et des citations dans les articles. Remercier.

24
demandé sur Unknown 2009-05-05 04:18:20

8 réponses

longévité

  • Haskell est de facto la langue dominante de la fonctionnelle de la programmation de la recherche. Haskell 98 durera encore de nombreuses années sous une forme stable, et quelque chose appelé Haskell peut durer de 10 à 30 ans---bien que la langue continuera d'évoluer. La communauté a un investissement important dans Haskell et même si les principaux développeurs de GHC sont frappés par un bus demain (le célèbre "erreur de bus à Cambridge" problème), il ya beaucoup d'autres qui peuvent monter à la plaque. Il existe aussi d'autres compilateurs moins élaborés.

  • la Caml est contrôlée par un petit groupe à L'INRIA, le laboratoire national français. Ils ont aussi un investissement important, d'Autres sont également investi en Caml, et le code est open source, et le compilateur n'est pas trop compliqué, de sorte qu'il sera maintenue pendant une longue période. Je prédis Caml sera beaucoup plus stable que Haskell, car les gens D'INRIA ne semblent plus l'utiliser comme un véhicule pour explorer de nouvelles idées de langue (ou du moins ils le font à un taux plus faible que dans le passé).

  • qui sait ce qu'une entreprise fera? Si F# est un succès, Microsoft pourrait le supporter pendant 20 ans. Si elle n'est pas réussie, ils pourraient tirer la prise en 2012. Je ne peux pas deviner et je n'essaierai pas.

aspect pratique

Une table de hachage est la meilleure structure pour une récupération rapide. Les promoteurs de Haskell là-bas suggèrent d'utiliser les données.La carte qui est un arbre binaire.

Cela dépend de ce que vous recherchez. Lorsque vos clés sont des chaînes de caractères, les arbres de recherche ternaires sont souvent plus rapides que les tables de hachage. Lorsque vos clés sont des entiers, Okasaki et Gill arbres binaires de Patricia sont en concurrence avec le hachage. Si vous le souhaitez vraiment, vous pouvez construire une table de hachage à Haskell en utilisant le io monad, mais il est rare d'en avoir besoin.

je pense qu'il y aura toujours une pénalité de performance pour l'évaluation paresseuse. Mais "pratique" n'est pas la même chose que "aussi vite que possible". Ce qui suit est vrai au sujet de la performance:

  • il est plus facile de prédire le comportement d'un programme Caml dans le temps et l'espace.

  • F# est dans le milieu (qui sait vraiment ce qu' .NET et de l'équipe?).

  • il est plus difficile de prédire le comportement spatial et temporel des programmes Haskell.

  • Haskell a les meilleurs outils de profilage, et à long terme, c'est ce qui donne la meilleure performance.

je veux pouvoir développer plus que des analyses et des programmes de maths.

pour une idée de la gamme de ce qui est possible à Haskell, consultez le xmonad window manager et le vaste réseau de paquets à hackage.haskell.org .

je n'aime pas être attaché à une encombrants .NET framework à moins que les avantages sont grands.

Je ne peux pas commenter:

Bien Conçu

j'aime que mes langues soient cohérentes.

quelques points sur lesquels évaluer la cohérence:

  • la syntaxe concrète de Haskell est extrêmement bien conçue; je suis continuellement impressionné par le bon travail accompli par le Comité Haskell. La syntaxe OCaml est correcte mais souffre par comparaison. F # commencé à partir de la syntaxe de base de Caml et a beaucoup de similitudes.

  • Haskell et OCaml ont tous deux des histoires très cohérentes sur la surcharge de l'opérateur. Haskell a un mécanisme cohérent et puissant que vous pouvez étendre vous-même. OCaml n'a aucune surcharge d'aucune sorte.

  • OCaml a le système de type le plus simple, surtout si vous n'écrivez pas des objets et des foncteurs (ce que beaucoup de programmeurs Caml ne font pas, bien qu'il me semble fou de ne pas écrire foncteurs si vous écrivez ML). Le système de type de Haskell est ambitieux et puissant, mais il est constamment amélioré, ce qui signifie qu'il y a une certaine incohérence en raison de l'histoire. F # utilise essentiellement le système de type .NET, plus le polymorphisme de type ml Hindley-Milner (voir la question "Qu'est-ce que Hindley-Milner" ").)

  • OCaml n'est pas tout à fait en accord sur le fait qu'elle pense que les variantes doivent être typé statiquement ou dynamiquement typé, il fournit à la fois ("types de données algébriques" et "variantes polymorphes"). Le langage résultant a beaucoup de puissance expressive, ce qui est excellent pour les experts, mais quelle Construction utiliser n'est pas toujours évident pour l'amateur.

  • L'ordre d'évaluation de L'OCaml n'est officiellement pas défini, ce qui est un mauvais choix de conception dans une langue avec des effets secondaires. Pire, les implémentations sont incohérentes: la machine virtuelle bytecoded utilise une commande et la code natif compilateur utilise l'autre.

66
répondu Norman Ramsey 2017-05-23 10:27:52

devriez-vous apprendre F# ou Haskell si vous connaissez OCaml?

je crois que la réponse est certainement Oui, idéalement vous devriez apprendre les trois langues parce que chacun a quelque chose à offrir mais F# est le seul avec un avenir significatif donc, si vous pouvez seulement apprendre une langue, apprendre F# en lisant mon visuel F# 2010 pour le Livre de calcul technique ou en souscrivant à notre le F#.NET Journal .

longévité

Microsoft s'est engagé à supporter F# quand ils l'ont publié dans le cadre de Visual Studio 2010 en avril. Donc F# est la garantie d'un avenir en rose pour au moins quelques années. Avec une combinaison puissante de caractéristiques pratiquement importantes comme un code natif REPL de haute performance, des constructions de haut niveau pour le parallélisme intégré à .NET 4 et un mode IDE de qualité de production, F# est un long en avance sur tout autre langage de programmation fonctionnel en termes d'applicabilité dans le monde réel maintenant. Franchement, personne ne travaille sur quoi que ce soit qui pourrait rivaliser avec F# dans un avenir proche. Mon propre source ouvert HLVM le projet est une tentative de le faire, mais il est loin d'être prêt.

en revanche, OCaml et Haskell se développent dans des directions extrêmement improductives. Cela tue OCaml depuis plusieurs années maintenant et je attendre Haskell à suivre au cours des prochaines années. La plupart des anciens programmeurs professionnels OCaml et Haskell sont déjà passés à F# (par exemple Credit Suisse, Flying Frog Consultancy) et la plupart des autres vont sans doute migrer vers des alternatives plus pratiques comme Clojure et Scala dans un proche avenir.

plus précisément, la licence QPL D'OCaml empêche quiconque de corriger son nombre croissant de défauts de conception fondamentaux (16 Mo de chaîne de caractères et limites des réseaux sur les machines 32 bits, non parallélisme mémoire partagée, types sans valeur, polymorphisme paramétrique via effacement de type, REPL interprété, FFI encombrant etc.) parce qu'ils doivent distribuer des travaux dérivés seulement sous forme de correctifs à l'original et les responsables du paquet Debian refusent de reconnaître une alternative en amont. Les nouvelles fonctionnalités ajoutées au langage, telles que les modules de première classe dans OCaml 3.12, sont loin d'être aussi précieuses que la capacité multicore l'aurait été.

certains projets ont été lancés pour tenter de sauver OCaml, mais ils se sont avérés trop peu trop tard. Le parallel GC est pratiquement inutile et David Teller a quitté le batteries included projet (bien qu'il a été ramassé et libéré sous une forme réduite). Par conséquent, OCaml est passé de le langage fonctionnel le plus populaire en 2007 à un déclin sévère aujourd'hui, avec caml-liste trafic en baisse de plus de 50% depuis 2007 .

Haskell a moins d'utilisateurs industriels Qu'OCaml et, bien qu'il ait un support multicore, il est encore développé dans une direction très improductive. Haskell est développé presque entièrement par deux personnes chez Microsoft Research à Cambridge (UK). Malgré le fait que la programmation purement fonctionnelle est mauvaise pour la performance par la conception, ils continuent à essayer de développer des solutions pour Haskell parallèle visant à multicores lorsque le des quantités massives de copies inutiles qu'il provoque frappent le mur de la mémoire et détruisent tout espoir de parallélisme évolutif sur un multicore.

le seul utilisateur important de Haskell dans l'industrie est Galois avec environ 30 programmeurs à plein temps Haskell. Je doute qu'ils laissent Haskell mourir complètement, mais cela ne signifie pas qu'ils vont le développer en un langage plus généralement utile.

aspect pratique

j'ai écrit l'article que vous avez cité sur les tables de hachage. Ils constituent une bonne structure de données. D'autres personnes ont fait référence à des alternatives purement fonctionnelles Comme les arbres ternaires et les arbres de Patricia, mais celles-ci sont généralement ~10× plus lent que les tables de hachage dans la pratique. La raison en est simplement que les erreurs de cache dominent aujourd'hui les problèmes de performance et que les arbres subissent un pointeur o(log n) supplémentaire de manière indirecte.

Ma préférence personnelle est pour la paresse optionnelle et la pureté optionnelle parce que les deux sont généralement contre-productif dans le monde réel (par exemple, la paresse rend la performance et la consommation de mémoire extrêmement imprévisible, et la pureté dégrade gravement la performance moyenne et fait de l'interopérabilité un cauchemar). Je suis l'une des seules personnes qui gagne entièrement sa vie grâce à la programmation fonctionnelle de ma propre entreprise. Je me contenterai de dire que si je pensais que Haskell était viable, je me serais diversifiée il y a des années, mais je continue de ne pas le faire parce que je ne pense pas que ce soit commercialement viable.

vous avez dit "Je n'aime pas être lié à un cadre .net volumineux à moins que les avantages soient importants". Les avantages sont énormes. Vous obtenez un IDE de qualité production, un compilateur JIT de qualité production qui effectue des optimisations extrêmement efficaces comme des génériques de type spécialisé, des bibliothèques de qualité production pour tout de la programmation GUI (voir jeu de vie dans 32 lignes de F# ) à nombre crunching. Mais le vrai avantage de .NET, au moins pour moi, c'est que vous peut vendre les bibliothèques que vous écrivez en F#, et de gagner beaucoup d'argent. Personne n'a jamais réussi à vendre des bibliothèques à des programmeurs OCaml et Haskell (et je suis l'une des rares personnes à avoir essayé) mais les bibliothèques F# se vendent déjà en quantités importantes. Ainsi, le cadre volumineux .NET en vaut la peine si vous voulez gagner votre vie en écrivant des logiciels.

bien conçu

ces langues sont toutes bien conçues mais but. OCaml est spécifiquement conçu pour l'écriture théorème provers et Haskell est spécifiquement conçu pour la recherche Haskell. F# a été conçu pour répondre à tous les problèmes pratiques les plus graves avec OCaml et Haskell tels que la faible interopérabilité, le manque de collecte simultanée des ordures et le manque de bibliothèques modernes matures comme WPF afin d'apporter un langage moderne productif à un large public.

24
répondu Jon Harrop 2011-01-09 16:52:53

ce n'était pas l'un de vos critères, mais avez-vous considéré disponibilité au travail ? Haskell répertorie actuellement 144 emplois sur indeed, Ocaml list 12 et C# list 26.000. Ces nombres ne sont pas parfaits mais je vous parie qu'une fois F# ships il ne sera pas long avant qu'il souffle après Haskell et Ocaml dans le nombre de listes d'emplois.

jusqu'à présent, chaque langage de programmation inclus dans Visual Studios comporte des milliers de listes d'emplois. Me semble que si vous voulez la meilleure chance d'utiliser un langage de programmation fonctionnel que votre journée de travail, puis F# sera bientôt.

20
répondu gradbot 2009-05-05 23:37:39

longévité

personne Ne peut prédire l'avenir, mais

  • OCaml et Haskell se portent bien depuis plusieurs années, ce qui augure bien de leur avenir
  • lorsque F# navires avec VS2010, les États membres auront l'obligation légale de le soutenir pendant au moins 5 ans

aspect pratique

Perf: je n'ai pas avoir assez d'expérience de première main avec Haskell, mais sur la base de l'information de deuxième et troisième main, je pense OCaml ou F# sont plus pragmatiques, dans le sens où je pense qu'il est peu probable que vous serez en mesure d'obtenir le même perf run-time à Haskell que vous faites en OCaml de F#.

Bibliothèques: un accès facile au Cadre. Net est un énorme avantage de F#. Vous pouvez le visualiser comme étant "liée à ce volumineux chose", si vous voulez, mais n'oubliez pas que "vous avez accès à une énorme encombrants bibliothèque de souvent incroyablement choses utiles". La "connectivité" à .Net est l'un des principaux points de vente de F#. F# est plus jeune et a donc moins de bibliothèques tierces, mais il y a déjà par exemple FsCheck , FParsec , faux , et un tas d'autres, en plus des bibliothèques "dans la boîte" sur .Net.

Tooling: Je n'ai pas assez d'expérience personnelle pour comparer, mais je pense que L'intégration VS avec F# est supérieure pour tout ce que vous trouverez pour OCaml/Haskell aujourd'hui (et F# continuera à s'améliorer un peu plus l'année prochaine).

changement: F# est encore en train de changer alors qu'il s'approche de sa première version supportée dans VS2010, donc il y a quelques changements de rupture dans la langue/bibliothèque que vous pourriez avoir à supporter dans un futur proche.

Bien Conçu

Haskell est certainement belle et cohérente. Je ne sais pas assez OCaml mais mon intuition est qu'il est de même attrayant. Je pense que F# est "plus grand" que l'un ou l'autre, ce qui signifie plus de coins poussiéreux et d'incohérences (en grande partie en raison de la médiation de l'inadéquation impédence entre FP et.net), mais dans l'ensemble F# me semble toujours "propre", et les incohérences qui existent sont au moins bien raisonnées/intentionnées.

Global

à mon avis, vous serez en "bonne forme" en sachant ces trois langues. Si vous connaissez un grand projet à long terme pour lequel vous voulez l'utiliser, l'un d'eux peut se démarquer, mais je pense que beaucoup des compétences seront transférables (plus facilement entre F# et OCaml qu'entre Haskell et/ou à partir de Haskell, mais aussi plus facilement entre ces trois compétences qu'avec, disons, Java).

13
répondu Brian 2009-07-09 04:14:35

il n'y a pas de réponse simple à cette question, Mais voici quelques éléments à considérer:

Haskell et OCaml sont deux langues matures avec de fortes implémentations. En fait, il y a plusieurs bonnes implémentations d'Haskell, mais je ne pense pas que ce soit un point majeur en sa Faveur pour votre but.

F# est beaucoup plus jeune, et qui peut prédire où Microsoft va décider de le prendre? Ce que vous en pensez dépend plus de ce que vous en pensez. Microsoft est ce que tout le monde peut vous dire sur les langages de programmation.

OCaml (ou ML en général), est un bon choix de langue pratique qui soutient faire des choses fonctionnelles cool sans vous forcer à travailler d'une manière qui pourrait être inconfortable. Vous obtenez le plein avantage de choses comme les types de données algébriques, correspondance de modèle, inférence de type, et les trucs préférés de tout le monde. OH, et des objets.

Haskell vous donne tout cela (sauf les objets, joli beaucoup), mais aussi plus ou moins vous oblige à repenser tout ce que vous pensez savoir sur la programmation. Ce pourrait être une très bonne chose, si vous cherchez à apprendre quelque chose de nouveau, mais il pourrait être plus que vous voulez mordre. Je dis cela en tant que quelqu'un qui n'est peut-être qu'à mi-chemin du chemin pour devenir un programmeur productif et heureux Haskell.

OCaml et Haskell sont tous les deux utilisés pour écrire beaucoup de différents types de programmes, pas seulement Compilateurs et AI ou autre. Google est votre ami.

une dernière remarque: OCaml vous donne le hashtable, mais il est à peine raisonnable de l'utiliser en code si vous voulez vraiment embrasser la programmation fonctionnelle. Arbres persistants (comme les données.Carte) sont vraiment la bonne solution pour Haskell, et ont beaucoup de belles propriétés, qui est l'une des choses cool à savoir quand vous ramassez Haskell.

6
répondu Moss Prescott 2009-05-05 01:00:41

F# et OCaml sont très similaires en syntaxe, bien que, évidemment, F# soit meilleur avec .NET.

celui que vous apprenez ou utilisez devrait dépendre de la plate-forme que vous visez.

dans VS2010 F# va être inclus, et puisqu'il compile à .net bytecode, il peut être utilisé sur un système d'exploitation windows qui prend en charge la version .NET que vous avez utilisé pour lui. Cela vous donnera une grande surface, mais il y a des limites, actuellement avec F# que L'OCaml n'a pas, en F# ne semble pas profiter de tous les processeurs sur une machine, mais c'est probablement dû à F# encore en cours de développement, et cela peut être une fonctionnalité qui n'est pas aussi importante encore.

il y a d'autres langues fonctionnelles, Comme L'Erlang, que vous pouvez consulter, mais, fondamentalement, si vous êtes fort dans une langue FP, alors vous devriez être en mesure d'en choisir une autre assez rapidement, donc, il suffit de prendre un que vous aimez et d'essayer de développer des applications intéressantes et stimulantes.

éventuellement, les rédacteurs linguistiques trouveront un moyen D'amener les langues OO à bien fonctionner avec les multi-noyaux et la FP pourrait tomber à nouveau sur le bord de la route, mais, cela ne semble pas se produire de sitôt.

3
répondu James Black 2009-05-05 00:25:52

ce N'est pas directement lié à la question de savoir S'il faut ou non apprendre F#, mais plutôt, un exemple de L'utilisation de L'OCaml dans le monde réel dans le secteur financier: http://ocaml.janestreet.com/?q=node/61

discussion très intéressante.

1
répondu moog 2010-08-13 08:10:55

en termes de longévité, il est très difficile de juger de la popularité des langues, mais juste en faisant un rapide tour d'horizon ici, ce sont les nombres de questions marquées avec la langue (fonctionnelle) appropriée: -

2672 Scala, 1936 Haskell, 1674 F#, 1126 Clojure, 709 régime, 332 OCaml 151910920"

je dirais que c'était une bonne indication des langues que les gens apprennent activement en ce moment et pourrait donc être une bonne indication de celles peut-être populaire dans les prochaines années.

1
répondu Andrew 2010-12-16 13:44:31