두 프로그램 사이에 약간의 변경 만 가한 동일한 프로그램이 2 개 있습니다. 별도의 파일을 사용하는 대신 #if defined (PAR)
- #else
- #endif
을 사용하고 -cpp -DPAR
을 사용하거나 사용하지 않고 컴파일하여 2 가지 버전간에 전환 할 수 있습니다. 나는 당신이 단 하나 hs 파일에 종사해야하기 때문에이 방법을 좋아한다. 그러나, 내 목표는 원래 프로그램의 병렬/최적화 된 버전을 작성하는 것입니다 이후 #if-#else#-endif
어떤 성능 의미를 사용하여 궁금해? 기본적으로 나는 이것이 후드 아래에서 어떻게 작동하는지에 대한 설명을 원합니다. 감사합니다하스켈에서 # 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
를 제공 (또는하지 않음)해야합니다.