GHC беспорядок во время компиляции - PullRequest
4 голосов
/ 21 декабря 2011

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

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

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011

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

4 голосов
/ 21 декабря 2011

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

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

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

...