2009/12/10 flw <[email protected]>: > 在我的机器上,用下面这段 Haskell 代码[1], > 编译之后还是比 Perl 版要快一些的: > > f...@waker:~/study$ cat ttt.hs > import System.Environment > > isPrime :: Integer -> [Integer] -> Bool
哈哈,这里用了 Haskell 的任意精度整数,太不公平了,哈哈!换成 Int 之后,可以快一倍以上(使用 Ubuntu 自带的 GHC 6.8.2): $ time ./hsprime_int 1000000 > /dev/null real 0m0.318s user 0m0.284s sys 0m0.008s 在 GHC 中 Int 被表示为堆中的两个 word 长度的数据。相比 Perl 中的 IV 也没有取巧,呵呵。 而原先使用 Integer 的版本在我的本上需要这么长时间: $ time ./hsprime_integer 1000000 > /dev/null real 0m0.678s user 0m0.640s sys 0m0.016s 为了完整性,顺便给出那个 Perl 实现在我本上的用时(Perl 使用 Ubuntu 自带的 5.10.0),呵呵: time ./prime 1000000 > /dev/null real 0m0.757s user 0m0.672s sys 0m0.068s 确实只比 Interger 版的 Haskell 实现慢一点点,但比更为公平的 Int 版的 HS 实现要慢了 1.37 倍。 相信这个 Haskell 程序还有进一步优化的空间,比如使用 unboxed types ;) 在 Haskell 中工作的时候,我最直接的体会就是经常只需要一点点小改动,就能让速度有大幅提升 ;) Cheers, -agentzh -- 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
