Une des promesses de sans effets secondaires, referentially transparent de la programmation fonctionnelle, c'est que ce code peut être largement optimisé. Pour citer Wikipedia:
L'immuabilité de données peut, dans de nombreux cas, conduire à l'exécution de l'efficacité, en permettant au compilateur de faire des hypothèses qui sont dangereux dans un langage impératif, ainsi increasi*texte en gras*ng opportunités pour les expansion.
J'aimerais voir des exemples où un langage fonctionnel compilateur surpasse impérative par la production d'un meilleur code optimisé.
Edit: j'ai essayé de donner un scénario spécifique, mais apparemment ce n'était pas une bonne idée. Donc je vais essayer de l'expliquer d'une manière différente.
Les programmeurs de traduire des idées (algorithmes) dans des langues que les machines puissent comprendre. Dans le même temps, l'un des aspects les plus importants de la traduction est que les humains peuvent comprendre le code résultant. Malheureusement, dans de nombreux cas, il s'agit d'un compromis: Une concis, lisible le code souffre de ralentissement des performances et doit être optimisé manuellement. C'est sujette à des erreurs, beaucoup de temps, et il rend le code moins lisible (jusqu'à totalement illisible).
Les fondements des langages fonctionnels, tels que l'immuabilité et la transparence référentielle, compilateurs permettent d'effectuer d'importantes optimisations, ce qui pourrait remplacer le manuel de l'optimisation de code et de gratuit les programmeurs de ce compromis. Je suis à la recherche d'exemples d'idées (algorithmes) et de leur mise en œuvre, telles que:
- l' (fonctionnelle) de la mise en œuvre est proche de l'idée originale et facile à comprendre,
- il est largement optimisé par le compilateur du langage, et
- il est difficile (voire impossible) d'écrire de même efficace du code dans un langage impératif, sans manuel d'optimisations qui permettent de réduire sa concision et de lisibilité.
Je m'excuse si c'est un peu vague, mais j'espère que l'idée est claire. Je ne veux pas donner des restrictions inutiles sur les réponses. Je suis ouvert aux suggestions si quelqu'un sait comment l'exprimer mieux.
Mon intérêt n'est pas seulement théorique. Je voudrais utiliser de tels exemples (entre autres choses) pour motiver les élèves à s'intéresser à la programmation fonctionnelle.
Au début, je n'étais pas satisfait par quelques exemples suggéré dans les commentaires. Sur la deuxième pensées, je prends mes objections dos, ceux sont de bons exemples. N'hésitez pas à les étendre à des réponses complètes, de sorte que les gens peuvent commenter et à voter pour eux.
(Une classe de ces exemples seront plus susceptibles code parallélisé, qui peut bénéficier de plusieurs cœurs de PROCESSEUR. Souvent dans les langages fonctionnels cela peut être fait facilement sans sacrifier la simplicité du code (comme en Haskell par l'ajout d' par
ou pseq
dans les endroits appropriés). Je' être intéressés par de tels exemples, mais aussi dans d'autres, non-parallèles.)