2011-12-21 43 views
4

GHC 7.0.3(Ubuntu的repoes)中的一種GHC雜亂而編譯

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 

編譯警告我做了我自己的數據類型產生,當我讓嚴格有這些警告,當它是懶人,沒有。儘管我測試了兩個版本的運行速度同樣快,但可能嚴格性過高。無論如何,這些警告嚴重嗎?

+1

另請參見:[使用ghc編譯Haskell代碼時的專業化警告](http://stackoverflow.com/questions/5903563/warning-on-specialisations-when-compiling-haskell-code-with-ghc)。看起來像沒有人知道如何在不禁用所有警告的情況下關閉它們... – ehird 2011-12-21 17:45:54

回答

4

這些消息(技術上甚至沒有警告)表示GHC可以做進一步的優化(這可能會或可能不會提高性能),但由於放置在構造專業化的限制不會。您也可以通過將-fspec-constr-count=n與足夠大的n(默認爲3)或-fno-spec-constr-count傳遞給編譯器來擺脫它們。結果將是更大的代碼(更專業化),可能更快,同樣快,或者在不幸的情況下速度更慢。如果性能很關鍵,你應該嘗試和比較。

4

這些警告可以安全地忽略;由於內部細節,它們總是在GHC 7.0中生成 - 基本上,它們不是實際警告,只是調試輸出。

但是,根據this GHC bug report,您可以使用-dno-debug-output關閉它們。

如果您升級到GHC 7.2,則不應再看到它們。