与其他语言相比,简单的数学运算和保存到文件需要花费太多时间

Luk*_*uke 1 math performance file-io haskell

最近我和我的朋友们对不同的编程语言进行了基准测试 当我最近学习Haskell时,我想表明一个函数式语言的表现几乎和C一样好,代码更简单.但下面粘贴的代码,用GHC的-O3选项编译,在我的机器上执行大约1.6秒.Python和Ruby中的等效脚本执行得更快(这是一个简单的for循环).

import System.IO

saveLine fh x = hPutStrLn fh $ show x ++ "\t" ++ show (x^2)

main = do
    fh <- openFile "haskell.txt" WriteMode
    mapM (saveLine fh) [1..999999]
    hClose fh
Run Code Online (Sandbox Code Playgroud)

你可以在这里查看其他语言的代码(我只写了Python和Ruby中的代码).

问题是 - 如何让它运行得更快?

lef*_*out 10

首先,执行一些简单计算并将每个结果写入文件的基准测试仅对测试IO系统有用.他们根本没有说计算效率,因为大部分时间花在文件访问上.如果你想比较语言用于计算事物的速度,你需要做一些处理器密集型的事情(例如,对所有这些平方值求和),然后只输出那个结果.

如果你真的想比较文件输出性能,Haskell的主要问题是它的String类型.这是一个简单的字符列表,方便用手进行简单的文本操作,但标准任务的开销很荒谬.为了提高性能,请使用字节串Text.具体来说,您需要更快的替代方案show.查看文本格式包.