Cette question découle de la question /software/25569/is-haskell-worth-learning
Généralement, quelques déclarations souvent répétées sont faites sur la façon dont Haskell améliore vos compétences de codage dans d'autres langues, et en outre, c'est parce que Haskell est apatride, et c'est une bonne chose.
Pourquoi?
J'ai vu quelqu'un comparer cela à seulement taper avec la main gauche, ou peut-être fermer les yeux pendant une journée et s'appuyer simplement sur le toucher. Il y a sûrement plus que cela?
Est-ce lié à l'accès à la mémoire matérielle ou à quelque chose d'autre qui est un gros gain de performances?
Réponses:
il y a au moins trois gros avantages du haut de ma tête:
cela rend les programmes plus proches des expressions mathématiques. En mathématiques,
x
cela ne change pas, vous ne savez pas ce que c'est tant que vous n'avez pas résolu l'équation.En fin de compte, il y a un changement d'état (après tout, c'est comme ça que l'ordinateur fonctionne à bas niveau); mais il est limité par la langue à des endroits spécifiques. cela permet au compilateur d’énormes possibilités de déplacer le code pour l’optimiser, car il sait qu’il ne change rien à ce dont dépend un autre code.
Le code simultané n'a pas besoin de se synchroniser pour accéder aux données inchangées, donc la concurrence est améliorée, à la fois dans les systèmes de mémoire partagée SMP (tous les systèmes multicœurs d'aujourd'hui) et sur les clusters faiblement liés.
la source
Voici un autre avantage: couplage réduit. Si vous avez du code comme:
et ailleurs vous avez:
alors les deux fonctions dépendent implicitement . Il n'y a aucun moyen facile de dire que l'appel
doStuff
est affecté par l'appeldoOtherStuff
. Sans état mutable, vous devez rendre la connexion explicite.Bien sûr, ce n'est pas un problème avec tous les états mutables - le problème est avec un état mutable omniprésent. La vraie solution est d'avoir l'immuabilité par défaut et un moyen de "marquer" et de contraindre l'état mutable là où vous en avez besoin.
la source
Une réponse simplifiée est la suivante: lorsque vous voyez un nom dans un langage purement fonctionnel, vous savez quelle est la valeur associée par une simple recherche de sa définition. Si vous avez des variables mutables, vous ne pouvez dire que par laquelle des nombreuses affectations qui lui ont été exécutées en dernier, vous devez donc également analyser le flux de contrôle, qui à son tour peut être conditionnel, vous laissant plusieurs possibilités. Pour obtenir une explosion exponentielle, il vous suffit de considérer que les RHS des affectations dépendent elles-mêmes de variables, vous devez donc les analyser de manière récursive également.
L'essentiel de l'analyse ci-dessus est qu'elle est intenable sans commentaires expliquant l'intention, les invariants et la sémantique: ceux-ci peuvent être difficiles à interpréter, et il peut être difficile de vérifier que la sémantique est respectée dans le code réel.
Cette réponse est essentiellement une extension du point 1 de @ Javier.
Je pense que c'est également une explication de la popularité du régime OO frauduleux: avec OO, l'état mutable est encapsulé, ce qui facilite beaucoup l'analyse en localisant les mutations dans une certaine mesure et en permettant une expression et une vérification beaucoup plus robustes de la sémantique.
Cela dit, la programmation fonctionnelle n'est pas la réponse. La bonne réponse est un système qui prend en charge la programmation inductive (fonctionnelle) et coinductive (procédurale), de sorte que les bons outils peuvent gérer à la fois la programmation sans état et avec état. C'est juste que la théorie constructive (fonctionnelle) est bien établie alors que la théorie de la gestion de l'État en est encore à ses balbutiements.
la source
En tant qu'auteur de Siege , un SGBD écrit en Haskell, certains peuvent appeler mon avis sur l'état mutable en conflit. J'espère montrer le contraire.
Le but de l'état mutable est de décrire l'état actuel dans lequel se trouve un système. Supposons que vous ayez un blog et qu'il soit géré par une base de données, la base de données décrit les publications que vous avez sur votre blog au moment où vous interrogez il. Combien de messages existent actuellement?
Comparez cela à l'état immuable qui est utilisé pour transmettre des faits. Combien de postes y avait-il le 12 août?
Les faits sont faciles à raisonner, l'état mutable ne l'est pas. Cependant, l'état mutable n'est pas un effet impur maléfique qui devrait être banni de la portée de nos esprits; nous en avons souvent besoin pour coexister dans le monde mutable dans lequel nous vivons, nous devons simplement l'utiliser avec plus de parcimonie.
la source