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
。