У меня есть 2 версии одной и той же программы с небольшими изменениями между ними.Вместо отдельных файлов я использую #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
Примечание:
Вместо флага -cpp
вы можете использовать языковые параметры в исходном файле:
например{-# LANGUAGE CPP #-}
Но вам все равно нужно предоставить (или нет) -Dxxx
при компиляции, чтобы выбрать, какую часть программы компилятор должен игнорировать (где xxx - это определенная переменная в файле hs).