Вот быстрый и очень неполный список:
- Тест и тест.Одна из слабых сторон haskell - это трудность в прогнозировании затрат времени и пространства.Если у вас нет тестовых данных, у вас ничего нет.
- Используйте лучшие алгоритмы.Это звучит слишком просто, но оптимизация неэффективных алгоритмов похожа на рэп с ** т золотом.
- Стратегически сделать некоторые данные более строгими. Test and Benchmark! Цель состоит в том, чтобы сохранить физически меньшее значение WHNF, а не поток, который его производит, таким образом убирая больше мусора в самом эффективном первом проходе.ищите сложные функции, которые производят простые данные.
- Стратегически делает некоторые данные менее строгими. Test and Benchmark! Цель состоит в том, чтобы отложить создание большого количества данных до того, как они будут использованы и отброшены, тем самым убирая больше мусора в самом эффективном первом проходе.Ищите простые функции, которые производят большие сложные данные.См. Также comonads.
- Стратегически используйте массивы и распакованные типы, в частности см. # 2.что касается монады ST. Test and Benchmark! Все это помещает больше необработанных данных в меньшую и более компактную память.Меньше мусора для сбора.
- Скрипка с настройками RTS (специфично для ghc). Test and Benchmark! Цель состоит в том, чтобы "согласовать импеданс" ГХ с потребностями памяти вашей программы.Здесь я теряюсь еще больше, чем в 1-5, поэтому спросите экспертов об этом.
У лучшего сбора мусора довольно простая предпосылка: создавайте меньше мусора, собирайте его быстрее, производите меньше памяти /deallocations.Любая вещь, которую вы можете сделать, которая может привести к одному из этих трех эффектов, стоит того. Тест и тест!