Как правильно оптимизировать функции MArray для скорости?

Я работаю над библиотекой сортировки для MArrays. Скорость важна, поэтому я хочу максимально ее оптимизировать.

В настоящее время я просто вкладываю функции сортировки. Это ускоряет код более чем в 10 раз по сравнению с неоптимизированным кодом. Однако это может легко взорвать размер кода, если функции используются в нескольких местах, и замедляет компиляцию.

Похоже, единственной альтернативой является СПЕЦИАЛИЗАЦИЯ функций для всех существующих экземпляров MArray. Это также увеличивает полученный код, но только на постоянный коэффициент, который не зависит от того, сколько раз используются функции. Вопрос в том, возможно ли появление новых экземпляров MArray? Или же MArray настолько особенный и связан с внутренностями Haskell, что я могу быть уверен, что никакие новые экземпляры не могут быть определены каким-либо другим модулем?

1 ответ

Решение

Похоже, что лучший способ - это использовать INLINE Прагма. sort из вектор-алгоритмов это тоже использует.

Другие вопросы по тегам