Grundlegende E / A-Leistung in Haskell

Ein weiteres Mikrobenchmark: Warum ist diese "Schleife" (zusammengestellt mitghc -O2 -fllvm, 7.4.1, Linux 64bit 3.2-Kernel, umgeleitet zu/dev/null)

mapM_ print [1..100000000]

Etwa 5x langsamer als ein einfacher For-Cycle in der EbeneC mitwrite(2) ungepuffertes syscall? Ich versuche, Haskell-Fallstricke zu sammeln.

Auch diese langsame C-Lösung ist viel schneller als Haskell

int i;
char buf[16];
for (i=0; i<=100000000; i++) {
    sprintf(buf, "%d\n", i);
    write(1, buf, strlen(buf));
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage