2
我有兩個版本的同一個程序,兩者之間只有很小的變化。我使用#if defined (PAR)
- #else
- #endif
,然後在有或沒有-cpp -DPAR
的情況下編譯,以在兩個版本之間切換。我喜歡這種方式,因爲你只需要處理一個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
。