Nie mogę mówić w imieniu Clojure, ale mogę powiedzieć, że Haskell ma wiele bardzo dostrojonych pakietów IO, które pozwolą na wszystkie mutacje, których możesz potrzebować.
Oto odpowiedź na pytanie, które napisałem, w którym ktoś wyszczególnia 3 najczęstsze i dotyczy ich wydajności: /programming/15439966/when-why-use-an-mvar-over-a-tvar/15440286 # 15440286
Można również zobaczyć tutaj prosty wykres pokazujący wskaźniki wydajności serwera internetowego haskell o nazwie Warp, który jest aplikacją o wysokim stopniu obciążenia.
W przypadku Haskell istnieje wiele nieporozumień. Prawda jest taka, że ma fantastyczne funkcje IO z wieloma pakietami hackage'ów do korzystania z IO na wiele różnych sposobów, z których wiele zostało bardzo zestrojonych. Powodem, dla którego ludzie przypuszczają, że tak nie jest, jest to, że Haskell dokłada wszelkich starań, aby oddzielić IO od wszystkiego innego, ale nie ma to wpływu na charakterystykę wydajności.
Mówiąc teraz o charakterystyce wydajności, powodem, dla którego ludzie uznają ją za słabą, jest leniwa ocena, która powoduje, że zachowuje się ona w sposób niekoniecznie intuicyjny. Jest to jednak coś, o co musisz się martwić znacznie mniej, gdy zaczynasz pracować w kontekście IO, wykonując destrukcyjne aktualizacje, takie jak system, o którym mówisz. Kolejne osoby mają tendencję do stwierdzania, że gdy mają problemy z wydajnością, wbudowane urządzenia do instrumentowania i określania, gdzie idą zasoby, bardzo pomagają.
Kolejną monadą, na którą warto zwrócić uwagę na system, który opisujesz, byłaby monada ST, która jest specjalnie przeznaczona do destrukcyjnych aktualizacji wykonywanych przez bardzo małe wywołania IO, zapewniając jej doskonałą wydajność.
Przepraszam, ale naprawdę nie mogę rozmawiać z Clojure, mam nadzieję, że ktoś inny może podać tam szczegóły.
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