Я не могу говорить за Clojure, но могу сказать, что на Haskell есть много очень хорошо настроенных пакетов ввода-вывода, которые позволят всю мутацию, какую вы захотите.
Вот ответ на вопрос, который я написал, где кто-то подробно описывает 3 наиболее распространенных из них и оценивает их эффективность: /programming/15439966/when-why-use-an-mvar-over-a-tvar/15440286 # 15440286
Вы также можете увидеть здесь простой график, показывающий показатели производительности веб-сервера haskell под названием Warp, который является приложением с высокой интенсивностью ввода-вывода.
В отношении Хаскелла существует много путаницы, правда в том, что у него есть фантастические возможности ввода-вывода со множеством пакетов для взлома, позволяющих использовать ввод-вывод множеством различных способов, многие из которых были сильно настроены. Причина, по которой люди предполагают, что это не так, в том, что Haskell делает все возможное, чтобы отделить ввод-вывод от всего остального, но это никак не влияет на характеристики производительности.
Теперь, чтобы говорить о характеристиках производительности, причина, по которой люди признают ее низкой, связана с ленивой оценкой, заставляющей ее вести себя не всегда интуитивно. Это то, о чем вам следует беспокоиться значительно меньше, когда вы начинаете работать в контексте ввода-вывода, выполняя деструктивные обновления, такие как в системе, на которую вы ссылаетесь. Кроме того, люди, как правило, обнаруживают, что, когда они испытывают проблемы с производительностью, встроенные средства для измерения и определения того, куда направляются ресурсы, очень помогают.
Еще одна монада, на которую стоит обратить внимание в отношении описанной вами системы, - это монада ST , специально предназначенная для деструктивных обновлений, выполняемых очень маленькими вызовами ввода-вывода, что обеспечивает высокую производительность.
Извините, я действительно не могу поговорить с Clojure, надеюсь, кто-то еще может дать подробности там.
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