2014-11-26 16 views
5

In base alla documentazione Haskell, you can't pass a primitive value to a polymorphic function or store one in a polymorphic data type. This rules out things like [Int#].Prestazioni Haskell: elenco unbox manuale?

Ha senso creare un'implementazione di lista personalizzata, ad esempio IntList, che è semplicemente il tipo di elenco specializzato in Int s? Esiste già?

+0

Non ha senso (secondo me) - se è necessario spremere le prestazioni in modo così grave che si è ricorso a lavorare con i tipi non condivisi, probabilmente non si dovrebbe usare un elenco collegato in nessuna forma. – user2407038

risposta

7

Sì, ha senso, in quanto vi sono interessanti strutture ibride di dati pigri/rigidi con una complessità maggiore rispetto a matrici rigide, piatte e unboxed, ma più efficienti delle strutture pigre e in scatola.

descrivo tali tipi di dati e modi di costruire loro senza ricorrere a unboxing manuale in:

http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/

Ingenuamente, è possibile attivare un elenco pigro collegato (o struttura pigro simile usando una rappresentazione univeral per elementi polimorfiche):

enter image description here

in una struttura "equivalente" specializzato il nodo sulla rappresentazione del tipo di elemento, rimuovendo seve indirections ral per nodo:

enter image description here

In particolare, colonna vertebrale-pigro, il nodo-rigida/tipi di dati disimballati che sono polimorfici, ma si specializzano il contenitore per ciascun tipo di elemento sono più densi e hanno fattori significativamente più veloce costanti rispetto generici tipi di dati in scatola (polimorfici).

Questo ha un costo di complessità in fase di compilazione e generazione di istanze, ma credo che sia un'area di ricerca fruttuosa. Questi sono analoghi ai tipi di dati specializzati in template.

Il pacchetto adaptive-containers è un'implementazione di queste idee per la specializzazione dell'indice dei tipi di dati polimorfici.

I maggiori vantaggi saranno per alberi/dizionari/set e altri tipi di contenitori puramente funzionali.

Problemi correlati