我有两个版本的相同程序,两者之间的变化很小.我没有使用单独的文件,而是使用#if defined (PAR)- #else- #endif然后在有或没有-cpp -DPAR在两个版本之间切换的情况下进行编译.我喜欢这种方式,因为你只需要处理一个单独的hs文件.但是,由于我的目标是编写原始程序的并行/优化版本,我想知道使用#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
Run Code Online (Sandbox Code Playgroud)
注意:
-cpp您可以使用源文件中的语言选项而不是标志:
例如 {-# LANGUAGE CPP #-}
但是-Dxxx在编译时仍需要提供(或不提供),以便选择编译器应该忽略的程序部分(其中xxx是hs文件中定义的变量).
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |