g.html の javascript バージョン。
javascriptにおけるstring to int は、Numberコンストラクタ(?関数?)か 弱い型付けであること、暗黙の型キャストが頻繁に行われることを 利用して+単項演算子を付けるのがよくあると思う。最悪evalもある。
10万回 "123" をintに変換したものを要素とする配列の作成。 普通なら、私はこうする。
a = "123";
ret = [];
for (i=0;i<=100000;++i) ret[i] = +a;
/*
$ time node test.js
real 0m0.133s
user 0m0.084s
sys 0m0.016s
*/
おお、Haskellより早い。意外。 何かで読んだけど、実際こういう型キャストは処理系の中で アセンブリで書かれて最適化されているらしい。
次に自前のパースを用意したバージョン
a = "123";
ret = [];
read_int = function(str) {
var x = 0;
for (var i=0,l=str.length;i<l;) x = x*10 + str.charCodeAt(i++) - 48;
return x;
}
for (i=0;i<=100000;++i) ret[i] = read_int(a);
/*
$ time node test.js
real 0m0.127s
user 0m0.080s
sys 0m0.016s
*/
わずかに速くなった。 まあ、このくらいなら型キャストさせるね。