Data.XYMap.Lazy
e Data.XYMap.Strict
per XY
in {"", "Int", "Hash"}
: La variante *.Strict
costringe la valutazione della mappato a valori WHNF prima che vengano immessi nella mappa.
Il grande vantaggio di questo è il comportamento più prevedibile di spazio e tempo, dal momento che è molto più difficile creare enormi thunk, soprattutto per i tipi di modulo (ConstructorN UnboxedValueTypeN
), che è impossibile.
Lo svantaggio - Mi ricordo che ci sono stati esempi cresciuti quando è stato discusso se le varianti severe o pigri dovrebbero diventare il default, ma non ricordo nulla di particolare.
Ah, appena ricordato un caso d'uso: si può annodare un nodo con le varianti Lazy
, che è ovviamente impossibile con le versioni Strict
! Quindi, se fate queste cose: Lazy
.
Uso le versioni Strict
per impostazione predefinita. Fino a quando non avrò bisogno di annodare o incontrare un altro caso d'uso in cui considero le varianti Lazy
superiori, non so quando li userei.
Data.(ByteString/Text).Lazy
e Data.(ByteString/Text).Strict
Le versioni severe utilizzare uno pezzo monolitico di spazio di archiviazione per il carico utile, che significa avere un rapido accesso casuale, non solo in modo sequenziale, ma anche a ritroso dalla fine, o saltare a e per
Le versioni pigri sono liste fondamentalmente testa-rigida di pezzi rigidi, la loro forza è che il consumo sequenziale di loro spesso può essere fatto in piccola memoria costante, che è grande se avete bisogno di sequenza di processo file di grandi dimensioni.
Per i dati piccolo (ish), sicuramente utilizzare i Strict
varianti, per i dati enorme Lazy
varianti se i dati vengono elaborati (più o meno) in sequenza.
fonte
2013-04-30 11:08:20
Non ho regole severe (heh) per te, ma tendo a scegliere la pigrizia a meno che non abbia una buona ragione per non farlo. Le strutture pigre si comportano in modo più naturale e si adattano meglio al resto della lingua. –