Mai*_*tor 7 javascript haskell ghc ghcjs
我总是相信GHCJS,由于显而易见的原因,与手动编写和优化的代码相比,生成了非常慢的JavaScript程序.不过,在尝试时,我注意到它并没有我想象的那么糟糕.我决定运行一系列小基准来掌握真正的表现,这一点特别让我感到惊讶.该程序只需用"1"填充一个数组并将它们加起来.
哈斯克尔:
import Data.Array.Repa
len = 1024*1024*64
arr = fromFunction (Z :. len) (const 1) :: Array D DIM1 Float
main = sumAllP arr >>= print
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var len = 1024*1024*64
var arr = [];
var sum = 0;
for (var i=0; i<len; ++i)
arr[i] = 1;
for (var i=0; i<len; ++i)
sum += arr[i];
console.log(sum);
Run Code Online (Sandbox Code Playgroud)
还有一个粗略的基准:
apple1$ ghcjs -O2 bench_fill.hs -funfolding-use-threshold10000 -funfolding-keeness-factor1000 -o bench_fill.js; time node bench_fill.js/all.js
Linking bench_fill.js (Main)
6.7108864e7
real 0m1.543s
user 0m1.512s
sys 0m0.033s
apple1$ time node benchfill.js
67108864
real 0m1.764s
user 0m1.173s
sys 0m0.583s
Run Code Online (Sandbox Code Playgroud)
GHCJS如何比苗条,干净的原生for循环运行得更快?考虑到生成的代码应该暴露给的盒装数量,这应该是不可能的.
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |