2008年9月3日水曜日

JavaScriptエンジン

端末で動作する軽いJavaScriptエンジンが欲しいな、と思っていたところtwitterでつぶやいてる方を発見。
話題のGoogleブラウザー「Chrome」JavaScriptエンジン「V8」が今熱いとのこと。
そこで以下のページを参考に早速自分でも試してみました。

【速報】とりあえずjavascript v8エンジンのベンチマーク結果
http://mattn.kaoriya.net/software/lang/javascript/20080903110042.htm

Google Chrome の JavaScript エンジン V8 を試す
http://d.hatena.ne.jp/amachang/20080903


ビルド手順

bash上でJavaScriptを実行できるようにします。てっとり早く以下手順のみ。
「$」はbashのプロンプトです。
sconsはpythonベースのビルドツールです。debianのパッケージにも用意されてます。
$ svn co http://v8.googlecode.com/svn/trunk/ v8
$ cd v8
$ scons sample=shell
$ ls -l shell
-rwxr-xr-x 1 user group 1401889 2008-09-03 12:20 shell*

これでJavaScriptエンジン"shell"のビルド完了です。


実際に使って試してみる


まずは最初の一歩。世界よこんにちは。
$ ./shell
V8 version 0.2.5
> print('Hello World!')
Hello World!

終了するときもJavaScriptの流儀でやります。
> quit
function () { [native code] }
> quit()
$

次に以下の内容のJavaScriptファイル(proxy.js)を実行してみる。
name = '209.30.167.155';
port1 = 5565;
port2 = 1815;
port3 = 3331;
port4 = 6600;
port5 = 3841;
port6 = 8362;
port7 = 9613;
port8 = 24263;
port9 = 5023;
port10 = 9032;
YPPLAZ = port8 + (633183-247) / 61;
proxy = name + ':' + YPPLAZ;
print(proxy);

これはロシアのプロキシ販売サイトのサンプルプロキシリストを表示するJavaScriptの一部です。
何かと御世話になっています。ビタ一文払ったことありませんが…
さて、これがプロキシリストを自動で簡単にコピーされないように少しだけ難読化されてます。
小憎いアンチクショウなのです。

そこで先ほどビルドしたshellを使います。
$ ./shell proxy.js
209.30.167.155:34639

プロキシ「209.30.167.155:34639」が生成されました。便利じゃないか…
今までシェルスクリプトで処理できる形に直してプロキシを取得してましたが
そんなめんどうなコーディングをせず、そのままJavaScriptを評価できそう。


ベンチマーク

Running the Benchmarks with V8 Standalone に記載されている方法でベンチも測ってみました。
Richards: 1453
DeltaBlue: 1480
Crypto: 996
RayTrace: 996
EarleyBoyer: 1906
----
Score: 1324

環境

OS: Linux
debian-etch (i386)
linux-2.6.18
scons-v0.96.93.D001