另一个微基准:为什么这个“循环”(用ghc -O2 -fllvm
7.4.1 编译,Linux 64bit 3.2 内核,重定向到/dev/null
)
mapM_ print [1..100000000]
C
比使用write(2)
非缓冲系统调用的简单 for 循环慢约 5 倍?我正在尝试收集 Haskell 陷阱。
即使是这种缓慢的 C 解决方案也比 Haskell 快得多
int i;
char buf[16];
for (i=0; i<=100000000; i++) {
sprintf(buf, "%d\n", i);
write(1, buf, strlen(buf));
}