2011-12-21 7 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

答えて

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にアップグレードする場合は、もう表示されません。

関連する問題