( TCH | 2018. 11. 29., cs – 15:13 )

> Nézd meg pl. az alap quicksortot Haskellben. Még ha nem is ismered a nyelvet, kb. látszik rajta, hogy ez miért quicksort.

Megnéztem. Négy sor az egész, míg a C++ verzió 18 soros. Csakhogy ez nem jelent semmit. A kérdés, hogy milyen kód fordul belőle...

> És igaziból, ha a fordítója csúcsszuper lenne, akkor ez az alap implementáció olyan gyors lehetne, mint a kézzel szénné optimalizált C++-os verzió (mondjuk ez nem mostanában fog bekövetkezni, de elméletileg lehetséges volna).

...amit már meg is válaszoltál helyettem. A "lehetne" az nagyon tág fogalom. Miért nem az? Talán mert a CPU elemi utasításokból építkezik, ezért egy szintén elemi utasításokból építkező nyelvhez viszonylag egyszerűen lehet fordítót írni, míg ehhez meg nem?

> Szóval nem mindig rossz, hogy nem procedurálisan írunk le egy problémát. Bár amúgy tőlem is távol áll ez az egész, de azért mondjuk meglepő volt számomra, hogy egy quicksort ennyire rövid és frappáns Haskellben.

Én nem is mondtam ilyet. De a quicksortnál még azt is látni kell, hogy a belseje egy viszonylag egyszerű szabályrendszerre épül. Mit kezd a Haskell egy olyan parse-oló algoritmussal, aminek a belsejében egy raklap feltétel és specifikus elágazás van? Sokkal nagyobb kínkeserv lesz megírni és lassabb is lesz.

> Nálam ugyan nem :) Inkább az a ritka, hogy teljesen optimális kódot csinálnak.

Az lehet, hogy nem teljesen optimális kódot csinálnak, de hacsak nem számítógépet visel az ember a nyakán fej helyett, akkor elég nehezen fog lépést tartani egy mai CPU-n a fordítóval. Azokon a mikrokontrollereken, ahol nincs nonlineáris/spekulatív végrehajtás, elágazás-becslés, csövezés és még sorolhatnám, na ott tuti jobb kódot írsz, mint a C fordító. De ahol van, ott alig hinném. Egyszer láttam egy olyan ASM kódot, hogy a szubrutint a meghívás után paraméterezte fel a kód, azért, mert azok az utasítások mindenképpen a csőbe kerültek már és mindenképpen végre fognak hajtódni, mielőtt még a szubrutint betöltené a csőbe a rendszer és végrehajtaná. Egy mai CPU-ban annyi "szarság" van, hogy ezt ember egyszerre mind kissé nehezen tartaná fejben.