同じプログラムの2つのバージョンがあり、2つのバージョンの間にはほとんど変更がありません。別のファイルを使用する代わりに、#if defined (PAR)
- #else
- #endif
を使用し、-cpp -DPAR
の有無にかかわらずコンパイルして、2つのバージョンを切り替えることができます。あなたはただ一つのhsファイルで作業しなければならないので、私はこの方法が好きです。しかし、私の目的は元のプログラムのパラレル/最適化バージョンを書くことなので、#if-#else#-endif
にパフォーマンスの意味があるのでしょうか?基本的には、これがどのように動作するのかを説明したいと思います。おかげHaskellで#if-#else-#endifを使用する
#if defined(PAR)
import Control.Parallel
import Control.Parallel.Strategies
import Control.DeepSeq
#endif
#if defined(PAR)
test = sum (map expensiveFunc myList `using` strat)
where strat = parListChunk 100 rseq
#else
test = sum (map expensiveFunc myList)
#endif
注:
例えば:代わりに-cpp
フラグの
、あなたがソース・ファイルに言語オプションを使用することができます{-# LANGUAGE CPP #-}
コンパイラが無視するプログラムの部分(xxxはhsファイルの定義済みの変数)を選択するために、コンパイル時には-Dxxx
を指定する必要があります。