Choix dun langage de programmation fonctionnel [fermé]

Clôturé. Cette question est hors sujet . Il naccepte pas les réponses actuellement.

Commentaires

  • Quoi que vous choisissiez, écrivez beaucoup de code que vous utilisez pour quelque chose dedans.
  • Didn ' t réfléchir à Scala ?
  • @ykombinator: I ' ve entendu parler, mais je nai pas cherché plus loin. Je ne ' ne sais pas sil aurait quelque chose à offrir par rapport à ceux que jai énumérés, ou peut-être quil apporterait une combinaison doptions intéressantes de chacun deux … Don ' Je ne sais pas. Cela me semble être un langage plutôt discret, même sil semble gagner en popularité.
  • Je ne ' Je ne sais pas où vous avez entendu dire que le monde Java est " sur le bord " – il ' traverse actuellement une grande renaissance, en grande partie grâce à a) OpenJDK devenant limplémentation standard b) de nouveaux langages JVM comme Scala et Clojure et c) Le fait que les projets big data / cloud se multiplient en choisissant la JVM comme plate-forme cible et d) Android. Début 2012, elle ' est probablement la plate-forme la plus excitante sur laquelle se trouver …..
  • @mikera: Daccord. Cela fait plus dun an, juste après quOracle a acquis Sun Microsystems et il y avait tout ce qui était inquiétant et spéculant sur lavenir de Java compromis par une société plus contrôlant prenant le contrôle … La JVM semble assez sûre pour le moment, heureusement!

Réponse

Puisque vous voulez un pratique   langue:

texte alternatif

Notez que Haskell et Lisp sont plus utilisés que les autres dans lindustrie, bien quil a récemment suscité un intérêt pour Clojure et F #.

Mais regardez ce qui se passe lorsque nous ajoutons Scheme au mix:

alt text

Hmm, ça ne ressemble pas tellement à un langage académique maintenant, nest-ce pas?

En fait, le graphique ci-dessus est probablement un mensonge; le mot « schéma » peut apparaître dans laide recherché des publicités dans dautres contextes que les langages de programmation. 🙂

Voici donc un autre graphe probablement (un peu) plus représentatif:

texte alternatif

Si vous voulez explorer un dialecte vraiment génial de Scheme, jetez un œil à Raquette.

Commentaires

  • Wow, joli message. La raquette est exactement ce que jutilise ' … PLT-Scheme était son nom quand jai commencé à lapprendre. Cette ligne rouge dans le dernier graphique me trouble. Jamais pensé que Scheme pouvait être utilisé autant. Et Clojure semble bien décoller. Hmm …
  • @M. Joanis: Prenez les deux derniers graphiques avec un grain de sel; lapparence de lescalier et la volatilité du dernier graphique suggèrent quil ny a pas beaucoup de points de données dans le graphique, bien que cela indique que quelquun pense que les langues valent la peine dêtre payées.
  • @Robert Harvey, quest-ce que changé du deuxième au troisième graphique?
  • @Geoffrey: Regardez les légendes; Jai ajouté le mot " developer " aux termes de recherche.
  • Notez que Haskell et Lisp sont également des homonymes et que les données de Indeed ' ne se généralisent pas au reste du monde. ITJobsWatch répertorie 79 jobs Scala, 55 F #, 47 Haskell, 30 Lisp et 7 Clojure jobs.

Réponse

Si vous voulez apprendre la programmation fonctionnelle, il vous sera peut-être préférable dapprendre dabord Haskell, puis dutiliser la langue de votre choix. Vous pouvez apprendre la programmation fonctionnelle en utilisant les autres langages, mais ils permettent toujours un code impératif et orienté objet. Si vous écrivez un vrai programme en Haskell, vous apprendrez la programmation fonctionnelle plus rapidement car les autres paradigmes ne pourront pas être utilisés.

Après avoir écrit votre programme Haskell, vous aurez des outils comme les monades et les techniques comme le codage sans point à apporter à la langue de votre choix. Les concepts semblent particulièrement bien correspondre à Scheme.

Commentaires

  • Je pense que vous ' a raison de choisir dabord un langage fonctionnel pur. Je serais très intéressé de voir un ordre des langages fonctionnels par pureté.
  • @M. Joanis: of les langages énumérés dans votre question, je dirais que Haskell est le plus pur, suivi de Clojure, F # et Lisp.

Réponse

En fait, si vous pouviez mettre en œuvre un système raisonnablement complexe dans Scheme, vous seriez assez souhaitable dans les entreprises où vous voudriez probablement travailler. Plus tôt dans ma carrière, jai rencontré des étudiants qui avaient fait une bonne partie du travail dans Scheme, et le seul moment où cétait un inconvénient, cétait lorsquils étaient incapables dexpliquer leur travail ou ne le comprenaient pas assez bien pour mettre en œuvre des données de base structures et algorithmes dans un délai raisonnable. Je laisse toujours les candidats répondre à ces questions dans la langue de leur choix; jai rencontré des personnes qui pensaient être les meilleures à Scheme et qui ont réussi à se débattre un peu avec des choses qui devraient être faciles, comme lajout dun élément à une liste chaînée, ce qui ma mystifié.

Mais si vous pouviez « obtenir » Scheme suffisamment bien pour écrire ne serait-ce quune application Web moyenne, ce serait tout au plus un très bon argument de vente des éditeurs de logiciels sérieux.

Si vous étiez en entrevue dans un magasin « blub » et que les développeurs pensaient simplement que vous étiez bizarre à cause de votre maîtrise de Scheme ou Haskell ou F #, vous ne voudriez probablement pas y travailler. Dans la plupart des cas, les développeurs compétents ont le choix de leurs concerts, alors ne vous inquiétez pas de laspect pratique à moins que les seules options que vous puissiez imaginer dans votre avenir soient celles de lentreprise. Soyez compétent, flexible et résolvez les problèmes.

College nest pas une question de praticité. Il sagit de créer un environnement sûr pour explorer et apprendre. Cest, en fait, utile, même si vous finissez par écrire des logiciels ordinaires pour le reste de votre carrière.

Cela étant dit, je ne le fais pas.  » Je ne vois pas pourquoi vous voudriez vous limiter à un seul de ces choix si tôt. Vous pourriez facilement avoir une idée des quatre langues dans environ 4 semaines, puis en choisir une pour vous concentrer sur celle qui correspond le mieux à vos caprices actuels. Ensuite, revenez à une autre de vos options et essayez de mettre en œuvre quelque chose de similaire. Passez à quelque chose de plus complexe, et réfléchissez à nouveau à vos options. Lexpérimentation est une bonne chose. À moins que vous nessayiez de gagner votre vie le mois prochain, vous navez pas besoin de devenir encore un spécialiste.

Jen ai écrit en Scheme, F #, Emacs Lisp et Common Lisp, et lu au moins un peu de Haskell, au moins occasionnellement ces dernières années. Je ne peux pas dire que je suis un expert dans lun dentre eux, mais chaque excursion dans ces langages ma été bénéfique dans tous les autres langages dans lesquels je travaille professionnellement (C #, Java, Ruby, et parfois Boo, Perl et Python). La curiosité vous construira une carrière plus durable et épanouissante quautre chose.

Commentaires

  • " Curiosité vous bâtira une carrière plus durable et plus épanouissante que toute autre chose. " Cette déclaration est très inspirante. Vous ' avez raison. Je ' je suis trop pressé. Jai toujours limpression que tout cela va prendre trop de temps à apprendre … Si je pouvais remonter 12 ans en arrière, quand jai commencé, je ' ne pas gaspiller tout mon heure sur VB et C ++. Jai limpression que ces années ont été plutôt gâchées. Je n’étais ' pas assez curieux. Je voulais coder des trucs. Utiliser les langues que je connaissais suffisait. Je pensais à ce moment-là que jen savais pas mal, mais cela nétait absolument pas ' le cas.

Réponse

Jai plongé dans Haskell pendant un moment, mais je suis arrivé à la conclusion que cétait un peu trop académique. Il était très difficile de faire quoi que ce soit de pratique. Dans un langage purement fonctionnel, des choses comme IO ne rentrent pas tout à fait dans le modèle, donc vous devez faire face aux monades. Jai décidé que je devrais consacrer énormément de temps pour être à peine compétent, alors jai continué .

Jai fait Scheme à luniversité. Cela peut sembler trivial, mais toutes les parenthèses sont vraiment distrayantes / ennuyeuses. Difficile de revenir là-dessus après avoir utilisé des langages comme Python.

Récemment, jai explore F #. Il est fonctionnel, mais peut aussi être impératif et orienté objet lorsque vous le souhaitez. Ceci, en plus de pouvoir utiliser toutes les bibliothèques .NET, permet de mélanger facilement vos parties fonctionnelles pures avec des éléments plus pratiques comme Interface graphique, IO et réseau. Vous pouvez obtenir une version autonome de F #.

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5&displaylang=en

Commentaires

  • Le fait que F # et Clojure ne soient pas purement fonctionnels joue un rôle important en leur faveur. Peut-être que F # pourrait être mon point d’entrée dans le Famille .Net un jour …
  • @MJoanis, vous avez indiqué le coût comme un point par rapport à F #, mais comme le souligne Erik, vous pouvez lobtenir complètement gratuit.
  • Si jai bien lu les termes, vous lobtiendrez en gros à la condition de ne pas lutiliser (ou dacheter des licences). Mais je comprends que cela peut toujours être une très bonne chose à apprendre au cas où je me retrouverais dans une entreprise utilisant Visual Studio.Je ' lessayerai probablement une fois que je ' fonctionnera avec un langage de programmation fonctionnel plus libre.
  • @M. Joanis: Non, F # est même open source et vous pouvez essayer de courir sur Mono sur dautres plates-formes.
  • Peut-être que les temps ont changé depuis 2010, mais en tant que personne qui a commencé à apprendre le haskell au cours des derniers mois, je don ' ne pensez pas que faire des E / S dans haskell est difficile du tout. Pour les choses de base, vous avez juste besoin dapprendre une nouvelle syntaxe do. Obtenir la vraie compréhension fondamentale prend quelques semaines au maximum, mais je ne ' pas voir ce quest le fuzz à propos des monades. Je ' ne pense pas quils étaient plus difficiles à apprendre que les classes, les instances, les membres statiques et tous les autres jazz liés à létat en POO.

Réponse

Jai évalué tous les principaux langages fonctionnels il y a un an ou deux, dans la perspective de vouloir un langage de programmation fonctionnel pratique et général.

Jai fini par choisir Clojure , qui sest avéré par la suite être un excellent choix.

En gros, les principales raisons étaient:

  • Écosystème de la bibliothèque – pour quune langue soit utile, vous devez y accéder aux bonnes bibliothèques. Être sur la JVM signifie que vous avez un accès facile à la plus grande bibliothèque open source et à lécosystème doutils, donc opter pour un langage JVM était une évidence dun point de vue pragmatique. Scala a également obtenu dexcellents résultats ici.

  • Macro-métaprogrammation – Cet aspect of Lisp ma toujours plu, dautant plus que je prévoyais faire pas mal de génération de code. Jai « beaucoup apprécié les arguments avancés dans le court essai de Paul Graham » Beating The Averages « . Les différents Lisps ont tous obtenu de bons résultats ici.

  • Les performances étaient « bonnes assez « – Clojure est toujours compilé et bénéficie des avantages de loptimiseur JVM JIT et de lexcellent GC. Comme toujours, lutilisation dun langage fonctionnel comporte une certaine surcharge, mais avec Clojure, il était clair que vous pouvez vous rapprocher de la vitesse de Java avec un peu deffort (Clojure prend en charge les primitives Java et le typage statique facultatif pour les situations où vous en avez besoin). Mon estimation est que Clojure est environ 2 à 5 fois plus lent que ce que vous pourriez obtenir avec un code Java ou C ++ optimisé, ce qui est cohérent avec ce que vous voyez dans les benchmarks défectueux , et avec le temps, je mattends à ce que cet écart se resserre davantage. De plus, il est assez facile décrire du code particulièrement sensible aux performances en Java pur et de lappeler depuis Clojure.

  • Concurrence – Clojure a une approche assez unique et puissante de la concurrence, en particulier pour la concurrence hautement multicœur. Cest un peu difficile à expliquer, mais cette vidéo est excellente pour donner un avant-goût des principes. Je pense que Clojure a actuellement la meilleure réponse à la question délicate « comment gérer létat partagé, concurrent et mutable dans un langage de programmation fonctionnel? ».

  • Conception du langage – Clojure est une conception de langage très bien pensée de lOMI. Des exemples sont les littéraux vector [] et map {} en plus des parenthèses Lisp régulières, lutilisation de structures de données persistantes immuables, la prise en charge de la paresse dans tout le langage via labstraction de séquence et la fourniture au programmeur dune variété de fonctionnalités orthogonales pour résoudre différents problèmes . Découvrez lart de labstraction et simple rendu facile .

  • Communauté – toujours subjective, mais jai aimé ce que jai vu dans la communauté Clojure. Lattitude était très utile, constructive et pragmatique. Il y a une forte emphase «faire les choses», reflétant peut-être le fait que beaucoup de gens de Clojure (y compris Rich Hickey lui-même) viennent dun milieu de construction de systèmes dentreprise complexes. Le fait que la communauté Clojure ait également des liens étroits avec la communauté Java a été important pour me convaincre que Clojure ne risquerait pas de rester coincé dans une «niche».

Si je devais citer quelques inconvénients mineurs de Clojure, ceux-ci seraient:

  • Typage dynamique – cest souvent un avantage en termes de productivité, mais en moyenne, je pense que jéchangerais ceci contre une vérification de type et une inférence plus fortes. La plupart du temps, cela est atténué par une bonne suite de tests automatisés, mais si vous aimez vos types validés statiquement par le compilateur, Haskell ou Scala peuvent être plus votre tasse de thé.

  • De pointe – Clojure se développe très vite et il « sa beaucoup dinnovations en cours – linconvénient est quil y a beaucoup dexpérimentation, certaines bibliothèques et outils sont encore immatures, et il y a parfois des changements de rupture entre les versions majeures de Clojure que vous devez surveiller.

Dans lensemble, je ne pense pas que vous puissiez vous tromper avec Clojure si vous voulez un excellent langage fonctionnel moderne et pragmatique!

Commentaires

  • Merci! Super article! Jétais juste, ces jours-ci, en train denvisager de lutiliser pour un projet interne dentreprise qui sera fortement basé sur les arbres et la récursivité. De plus, nous avons ici beaucoup de code Java que nous pouvons réutiliser avec Clojure.

Réponse

Il On dirait que vous avez fait vos devoirs, vous le savez probablement déjà, mais Scheme est un dialecte de Lisp, tout comme Common Lisp. Si vous aimez beaucoup de choses à propos de Scheme, mais que vous naimez pas sa nature académique, essayez Common Zézayer. Selon l index TIOBE , cest la 13e langue la plus populaire par rapport à Scheme en position 26.

Peu de langues que vous avez mentionnés apparaissent sur les descriptions de travail que jai vues récemment, bien que ce ne soit peut-être que mon petit échantillon. Personnellement, japprendrai Haskell, même si je ne mattends pas à utiliser cette langue directement dans mon travail. Les concepts de programmation fonctionnelle sont plus précieux pour moi pour les futures conceptions de programmes que la commercialisation directe du langage lui-même.

Commentaires

  • Merci pour le TIOBE lien, cest une référence intéressante. Je suppose que vous choisissez Haskell pour sa pureté en termes de programmation fonctionnelle?
  • @ M.Joanis: Assez bien, bien que ' je pense à reprendre plus tard Lisp aussi. Voir programmers.stackexchange.com/questions/18838/…
  • La réponse choisie fait beaucoup de sens. La pureté semble être la voie à suivre jusquà ce que jaie vraiment saisi tout le paradigme fonctionnel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *