Беспорядок GHC во время компиляции

GHC 7.0.3 (ubuntu repoes) выдает во время компиляции предупреждения типа

SpecConstr
    Function `$j_se6a{v} [lid]'
      has one call pattern, but the limit is 0
    Use -fspec-constr-count=n to set the bound
    Use -dppr-debug to see specialisations

Я сделал свой тип данных, когда я делаю его строгим, есть эти предупреждения, когда он ленив, их нет. Хотя я тестировал обе версии, они работают одинаково быстро, так что строгость тут, наверное, излишняя. В любом случае, эти предупреждения серьезны?


person Yrogirg    schedule 21.12.2011    source источник


Ответы (2)


Эти сообщения (технически даже не предупреждения) указывают на то, что GHC может выполнить дальнейшую оптимизацию (которая может привести или не привести к повышению производительности), но из-за ограничений, наложенных на специализацию конструктора, этого не происходит. Вы также можете избавиться от них, передав -fspec-constr-count=n с достаточно большим n (по умолчанию 3) или -fno-spec-constr-count компилятору. В результате получится код большего размера (больше специализаций), который может быть быстрее, столь же быстрым или, в неблагоприятных случаях, медленнее. Если производительность критична, вы должны попробовать и сравнить.

person Daniel Fischer    schedule 21.12.2011

Эти предупреждения можно смело игнорировать; они всегда создаются в GHC 7.0 из-за внутренних деталей — по сути, это не настоящие предупреждения, а просто вывод отладки.

Однако вы можете отключить их с помощью -dno-debug-output согласно отчету об ошибке GHC.

Вы больше не должны их видеть, если обновитесь до GHC 7.2.

person ehird    schedule 21.12.2011