Pe quanto riguarda il quicksort, sì, vengono allocate delle nuove liste. GHC è molto avanzato per quanto riguarda le ottimizzazioni, ma in casi come questi non credo possa fare molto. È possibile scrivere l'algoritmo usando la monade ST, con la quale si possono raggiungere performances comparabili a quelle del C, tuttavia essa si usa solo quando è realmente necessaria, perché non è nello "stile" funzionale. Per il currying, non credo che ci sia un impatto rilevante, alla fine si tratta di qualche call/jmp in più. Non conosco comunque nessun articolo che lo spiega.
In generale, considerando il fatto che è un linguaggio funzionale e che usa la lazy evaluation, è inevitabile che Haskell sia inefficiente rispetto a linguaggi come C/C++. Si può programmare quasi imperativamente con IO/ST e senza lazyness con i bang patterns, ma non avrebbe senso, in quel caso sarebbe meglio usare direttamente C. Comunque, i benchmark generalmente mostrano che Haskell è al livello di Java, sopra Python e PHP e sotto C e C++, ma non è realmente possibile quantificare la velocità di Haskell rispetto agli altri. Andrebbero fatti tutti i programmi in tutti i modi possibili.
Ultima modifica effettuata da ZioCrocifisso il 02/01/2015 alle 0:17 |