2012-06-19 13 views
8

cabal dist si scoraggia da utilizzare -O2 in quanto produce più i tempi di compilazione e il manuale GHC dice:Differenza tra -O del GHC e -O2

Al momento, -O2 è improbabile per produrre codice migliore rispetto -O.

so che posso sempre punto di riferimento della biblioteca per vedere se -O2 dà prestazioni migliori, ma mi chiedevo se qualcuno potesse spiegare cosa -O2 fa diverso da -O così ho potuto ottenere un'intuizione del perché lo ritengono improbabile che produrre un codice migliore

+2

L'unico modo in cui '-O2' può essere improbabile produrre un codice migliore di' -O' sarebbe il codice in cui la differenza è significativa o forse presente potrebbe essere raro - non importa se lo sia. A volte fa una grande differenza, cf. il mio commento sulla risposta di Don. Raccomando di usare '-O2' a meno che tu non abbia una ragione per non farlo. –

risposta

15

-O2 esegue la specializzazione del costruttore. Ci sono alcune altre ottimizzazioni che sono abilitati solo in -O2 come pure, tra -fliberate-case, -fstatic-argument-transformation,

Ho il sospetto che -O2 ora sempre produce codice migliore, dal momento che la raccomandazione risale a circa 10 anni.

+0

Non sempre, c'è molto codice in cui non c'è differenza. Ma c'è anche molto codice in cui '-O2' è significativamente migliore di' -O'. Per il mio setaccio principale, fa una differenza di 2,5 ×, ad esempio (con ghc-7.4.2). –

+0

Non che io abbia effettuato test esaurienti, ma non ho visto un caso in cui '-O2' è peggio di' -O' per un po '(pre-ghc7 penso). –