Je ne peux pas parler pour Clojure, mais je peux dire que Haskell a beaucoup de packages IO très hautement disponibles qui permettront toutes les mutations que vous pourriez souhaiter.
Voici une réponse à une question que j'ai écrite où quelqu'un détaille les 3 plus courantes et concerne leurs performances: /programming/15439966/when-why-use-an-mvar-over-a-tvar/15440286 # 15440286
Vous pouvez également voir ici un graphique simple montrant les mesures de performances d'un serveur Web haskell appelé Warp, qui est une application très intensive en E / S.
Il y a beaucoup de confusion à ce sujet en ce qui concerne Haskell, la vérité est qu'il a de fantastiques installations d'E / S avec de nombreux packages sur le piratage pour utiliser les E / S de nombreuses façons différentes, dont beaucoup ont été hautement réglées. La raison pour laquelle les gens pensent que ce n'est pas le cas est que Haskell fait de grands efforts pour séparer les E / S de tout le reste, mais cela n'a aucun effet sur les caractéristiques de performance.
Maintenant, pour parler des caractéristiques de performance, la raison pour laquelle les gens la reconnaissent comme ayant de mauvaises performances est due à l'évaluation paresseuse qui la fait se comporter de manière pas toujours intuitive. C'est toutefois quelque chose dont vous devez vous préoccuper beaucoup moins lorsque vous commencez à travailler dans un contexte d'E / S à effectuer des mises à jour destructrices, comme dans un système auquel vous faites référence. De plus, les gens ont tendance à constater que lorsqu'ils ont des problèmes de performances, les installations intégrées pour instrumenter et identifier où les ressources vont aider beaucoup.
Une autre monade qui mérite d'être étudiée pour un système comme vous le décrivez serait la monade ST qui est spécifiquement destinée aux mises à jour destructrices effectuées par de très petits appels d'E / S, ce qui lui confère d'excellentes performances.
Désolé, je ne peux vraiment pas parler à Clojure, j'espère que quelqu'un d'autre peut donner des détails là-bas.
Due to the functional programming style the computational load will be distributed over the available CPU cores which can dramatically increase processing speed in some cases