Comment puis-je utiliser la programmation fonctionnelle dans le monde réel? [fermé]


103

Les langages fonctionnels sont bons car ils évitent les bogues en éliminant l'état, mais aussi parce qu'ils peuvent être facilement parallélisés automatiquement pour vous, sans que vous ayez à vous soucier du nombre de threads.

En tant que développeur Win32, puis-je utiliser Haskell pour certaines dll de mon application? Et si je le fais, y a-t-il un réel avantage qui serait automatiquement pris pour moi? Si oui, qu'est-ce qui me donne cet avantage, le compilateur?

F # parallélise-t-il automatiquement les fonctions que vous écrivez sur plusieurs cœurs et processeurs? Verriez-vous jamais le nombre de threads dans le gestionnaire de tâches augmenter?

En gros, ma question est la suivante: comment puis-je commencer à utiliser Haskell de manière pratique, et verrai-je vraiment certains avantages si je le fais?


2
Personnellement, je me pencherais sur erlang - mais c'est moi.
Jason Bunting

2
Pour clarifier un peu, j'ai déjà de l'expérience avec quelques langages de programmation fonctionnels différents, et je sais comment ils fonctionnent et quelles sont leurs différences. Mais cette question est spécifiquement: comment puis-je l'amener à un usage réel.
Brian R. Bondy

1
duplication possible de Pourquoi les langages fonctionnels?

Réponses:


41

Il semble que le livre Real World Haskell soit exactement ce que vous recherchez. Vous pouvez le lire gratuitement en ligne:

http://book.realworldhaskell.org/


J'attends qu'il soit imprimé. Il semble que ce sera l'un des meilleurs livres disponibles. Je parie que cela servira mieux les personnes intéressées par Haskell que Practical Ocaml pour Ocaml
Friedrich

25

F # ne contient pas de poussière de lutin magique qui transmettra des fonctions à différents processeurs ou machines. Ce que F # / Haskell et d'autres langages de programmation fonctionnels font, c'est vous faciliter l'écriture de fonctions qui peuvent être traitées indépendamment du thread ou du processeur sur lequel elles ont été créées.

Je ne me sens pas bien de publier ici un lien vers un podcast auquel je participe, cela semble un peu bizarre, mais dans l'épisode Herding Code où nous avons parlé avec Matt Podwysocki, nous avons posé la même question et il a donné des réponses intéressantes. Il y a aussi beaucoup de bons liens relatifs à la programmation fonctionnelle dans cet épisode. J'ai trouvé un lien intitulé « Pourquoi la programmation fonctionnelle est importante » qui peut vous apporter des réponses.


21
Ensuite, je posterai pour vous: herdingcode.com/?p=45 :)
Brian R. Bondy


14

Cela pourrait également être intéressant: " Programmation fonctionnelle du monde réel "

Les exemples sont en F # et C #, mais la théorie est assez générique. D'après ce que j'ai lu (pré-version), c'est vraiment intéressant, mais jusqu'à présent, je pense que cela me donne envie de m'en tenir de plus en plus avec C #, en utilisant des bibliothèques comme les extensions parallèles.


Avez-vous toujours l'impression de "vouloir vous en tenir de plus en plus avec C #"? F # offre quelques fonctionnalités intéressantes. Le plus gros coup de pouce que j'ai obtenu est moins de frappe (ce qui signifie moins de friction dans le processus d'expression des solutions dans le code).
Daniel

1
@Daniel à certains égards, encore plus; p Les outils sur lesquels je travaille peuvent être atypiques, cependant.
Marc Gravell

8

Vous n'avez pas mentionné, mais je suppose, que vous utilisez C ++. Un moyen potentiellement facile d'entrer dans le fonctionnement est via C ++ / CLI vers F #. C ++ contient "magic pixie dust" (appelé IJW: It Just Works) pour vous permettre d'appeler dans et hors du code managé. Avec cela, appeler du code F # est presque aussi simple que depuis C #.

J'ai utilisé ceci dans un programme (FreeSWITCH), qui est entièrement écrit en C / C ++. Avec un seul C ++ / CLI géré (utilisez le commutateur / clr), il se transforme comme par magie en code géré, et à partir de là, je peux charger mes plugins F # et les exécuter. Pour rendre les choses encore plus faciles pour le déploiement, F # peut lier statiquement toutes ses dépendances, vous n'avez donc pas besoin de déployer les fichiers d'exécution F #. Une autre chose qui rend le code CLR attrayant est que vous pouvez passer du code managé (délégués) au code C, et le moteur d'exécution fait automatiquement un bruit pour vous.

Si vous décidez de suivre la voie Haskell, la fonctionnalité que vous rechercherez est FFI: Foreign Function Interface. Cependant, je ne pense pas que cela vous donnera le même niveau d'intégration que C ++ / CLI avec F #.


6

J'apprends actuellement Haskell moi-même, quand vous commencez à l'apprendre, cela ne semble pas très intriguant car l'expérience d'apprentissage n'est RIEN comme apprendre un langage comme C #, c'est un tout nouveau monde, mais j'ai remarqué que je pouvais écrire très très complexe expressions en seulement quelques lignes de code, quand j'ai regardé le code, il était beaucoup plus concis, il était petit et serré. J'adore ça! Vous pouvez en effet écrire des programmes du monde réel qui seront plus petits, plus faciles à maintenir et beaucoup plus complexes que la plupart des autres langages le permettent, je vote pour que vous l'appreniez !!

Bonne chance.


4

Puisque vous mentionnez Win32 et les DLL, je suppose que vous travaillez avec du code non géré. Dans ce cas, GHC fonctionnera très bien pour vous. À la fin de l'année dernière, j'ai écrit un serveur DDE sous Windows en utilisant FFI pour parler aux bibliothèques MS DDE, et, étonnamment, ce fut une expérience extrêmement agréable (surtout étant donné que je suis un gars Unix). Le FFI de Haskell est puissant (même en prenant en charge, par exemple, les rappels dans les fonctions Haskell à partir de C ou d'autres bibliothèques), et avoir la vérification de type de Haskell lors de l'écriture de code de niveau C est comme un rêve devenu réalité.

Ce dernier point est l'un des avantages majeurs de Haskell: le système de typage est incroyable. Cela dit, c'est comme n'importe quel outil puissant; il faut du temps et des efforts pour en faire bon usage.

Donc oui, il est possible de commencer à écrire de petits morceaux de code en Haskell qui se lient au reste de votre code (bien que vous puissiez trouver plus facile de commencer avec de petits programmes Haskell qui lient à votre autre code), et cela vaut la peine de dépenser beaucoup de temps à apprendre à ce sujet et à l'utiliser partout où vous le pouvez. Vous pouvez finir comme moi, planifier un projet assez important étroitement intégré au code Windows (dans mon cas, un complément Excel sophistiqué) dans 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.