Я думаю, что Haskell - красивый язык, и, судя по бенчмаркам, его реализация может генерировать быстрый код.
Тем не менее, мне интересно, подходит ли оно для долгосрочных приложений или будет преследовать все потенциальные утечки, вызванные леностью, которые можно игнорировать в недолговечном приложении, доказать разочарование?
Этот комментарий Reddit отражает мои проблемы:
Как только у вас будет более одной функции, вызывающей себя рекурсивно, профиль кучи перестает давать вам любую подсказку, где происходит утечка.
(Вся эта дискуссия кажется проницательной и откровенной)
Я лично заинтересован в высокопроизводительных вычислениях, но, я думаю, серверы и HPC имеют это общее требование.
Если Haskell подходит для таких приложений, есть ли примеры, доказывающие этот момент, то есть приложения, которые
- нужно запускать в течение нескольких дней или недель, поэтому требуется устранение всех соответствующих утечек (время, в течение которого программа проводит спящий режим или ожидает, что некоторая базовая библиотека C для возврата явно не учитывается)
- являются нетривиальными (если приложение прост, разработчик может просто угадать источник утечки и попробовать различные исправления. Однако я не считаю, что этот подход хорошо масштабируется. Полезность профиля кучи при определении источник утечки (ов) с несколькими [взаимно] рекурсивными функциями, по-видимому, вызывает особую озабоченность, согласно обсуждению Reddit выше).
Если Haskell не подходит для таких приложений, то почему?
Обновление: Ядро веб-сервера Yesod для Haskell, которое было приведено в качестве примера, может иметь проблемы с памятью a > . Интересно, проверял ли кто-нибудь его использование памяти после непрерывного обслуживания запросов в течение нескольких дней.