インストール - JavaScript (V8, TraceMonkey, SFX)
投稿者: attowave 日付: 火, 2008-12-16 17:08
JavaScriptエンジンの 3強(V8, TraceMonkey, SFX)を、インタラクティブシェルとしてビルドします。
ビルド方法へのリンクは次の表にまとめました。
注) SFX: SquirrelFish Extreme は VM の名称であり、JavaScriptエンジン全体の名称は JavaScriptCore とのことです(nanto_vi さんから教えていただきました →)。
以下に、Fedora で実際にビルドしたログを掲載します。
V8
V8 のビルド環境を構築
$ sudo yum install scons ← SCons(makeの代替品。Pythonでルールを記述)をインストール
… 省略 …
Installed: scons.noarch 0:0.98.4-2.fc9
Complete!
|
V8 のビルドとインストール
$ cd /usr/local/src
↓ V8 をチェックアウト
$ svn checkout http://v8.googlecode.com/svn/trunk/ v8-read-only
A v8-read-only/test
A v8-read-only/test/message
… 省略 …
A v8-read-only/benchmarks/deltablue.js
A v8-read-only/benchmarks/v8-logo.png
リビジョン 983 をチェックアウトしました。
$ cd v8-read-only
$ scons d8 console=readline ← V8 をビルド(行編集機能:有効)
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
… 省略 …
scons: done building targets.
$ sudo install -m 755 d8 /usr/local/bin ← V8(d8) をインストール
|
V8 の動作確認
$ d8 ← V8(d8) を起動
V8 version 0.4.6 [console: readline]
d8> print ← printは実装されているか?
function print() { [native code] } ← Yes!
d8> print('hello'); ← printを試してみる
hello ← OK!
d8> readline ← readlineは実装されているか?
(d8):1: ReferenceError: readline is not defined
readline ↑ No!
^
d8> [1,2,3,4,5].map(function(x) Math.pow(x,2)); ← 1.8の文法は使えるか?
(d8):1: SyntaxError: Unexpected identifier ← No!
[1,2,3,4,5].map(function(x) Math.pow(x,2));
^^^^ ↓ これなら OK!
d8> [1,2,3,4,5].map(function(x){return Math.pow(x,2)});
1,4,9,16,25
d8> quit(); ← 終了
|
TraceMonkey
TraceMonkey のビルド環境を構築
$ sudo yum install hg ← Mercurial(分散型バージョン管理システム)をインストール
… 省略 …
Installed: mercurial.i386 0:1.0.2-1.fc9
Complete!
|
TraceMonkey のビルドとインストール
$ cd /usr/local/src
↓ TraceMonkey のリポジトリを複製
$ hg clone http://hg.mozilla.org/tracemonkey/
destination directory: tracemonkey
requesting all changes
… 省略 …
updating working directory
36466 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd tracemonkey/js/src
$ make -f Makefile.ref BUILD_OPT=1 ← TraceMonkey をビルド
cd editline; make -f Makefile.ref all
make[1]: ディレクトリ `/usr/local/src/tracemonkey/js/src/editline' に入ります
… 省略 …
make[1]: ディレクトリ `/usr/local/src/tracemonkey/js/src' から出ます
↓ TraceMonkey をインストール
$ sudo install -m 755 Linux_All_OPT.OBJ/js /usr/local/bin
|
TraceMonkey の動作確認
$ js -j ← TraceMonkey を起動(JITを有効にして)
js> options(); ← オプションを確認
jit ← JITが有効になっている
js> print ← printは実装されているか?
function print() { ← Yes!
[native code]
}
js> print('hello'); ← printを試してみる
hello ← OK!
js> readline ← readlineは実装されているか?
function readline() { ← Yes!
[native code]
}
js> str = readline(); ← readlineを試してみる
bye ← bye と入力
bye
js> str
bye ← OK!
js> [1,2,3,4,5].map(function(x) Math.pow(x,2)); ← 1.8の文法は使えるか?
1,4,9,16,25 ← Yes!
js> quit(); ← 終了
|
SFX
SFX のビルド環境を構築
$ sudo yum install gperf ← gperf をインストール
… 省略 …
Installed: gperf.i386 0:3.0.3-4.fc9
Complete!
$ PATH=/usr/lib/qt4/bin:$PATH ← qmake にパスを通す
|
SFX のビルドとインストール
$ cd /usr/local/src
↓ WebKit をチェックアウト(39300の調子が良い)
$ svn checkout -r39300 http://svn.webkit.org/repository/webkit/trunk WebKit
… 省略 …
リビジョン 39300 をチェックアウトしました。
↓ WebKit をビルド(Qt port on Linux)
$ WebKit/WebKitTools/Scripts/build-webkit --qt
Calling 'qmake CONFIG+=qt-port -r OUTPUT_DIR=/usr/local/src/WebKit/
WebKitBuild/Release /usr/local/src/WebKit/WebKit.pro CONFIG+=release
CONFIG-=debug' in /usr/local/src/WebKit/WebKitBuild/Release
… 省略 …
===========================================================
WebKit is now built. To run QtLauncher with this newly-built
code, use the "WebKit/WebKitTools/Scripts/run-launcher" script.
… 省略 …
===========================================================
↓ jsc(SFX) をインストール
$ sudo install -m 755 WebKit/WebKitBuild/Release/JavaScriptCore/jsc /usr/local/bin
|
SFX の動作確認
$ rlwrap jsc ← 行編集機能を使用したいので、rlwrap 経由で SFX を起動
> ← 【問題】プロンプトの後に改行される
print ← printは実装されているか?
function print() { ← Yes!
[native code]
}
>
print('hello'); ← printを試してみる
hello
undefined ← NG!(スクリプトならOK)
>
readline ← readlineは実装されているか?
function readline() { ← Yes!
[native code]
}
>
str = readline(); ← readlineを試してみる
bye ← bye と入力
bye
>
str
bye ← OK!
>
[1,2,3,4,5].map(function(x) Math.pow(x,2)); ← 1.8の文法は使えるか?
Exception: SyntaxError: Parse error ← No!
> ↓ これなら OK!
[1,2,3,4,5].map(function(x){return Math.pow(x,2)});
1,4,9,16,25
>
quit(); ← 終了
|
【おまけ】 WebKit の起動
$ WebKit/WebKitTools/Scripts/run-launcher --qt
|
覚え書き
- 今回ビルドしたものが TraceMonkey であることを確認できる決定的な方法はあるだろうか。
- 今回ビルドしたものが SFX であることを確認できる決定的な方法はあるだろうか。
- WebKit のビルドにはとても時間がかかる。 SFX だけをビルドする方法はあるだろうか(build-jsc --qt を実行してもビルドが始まらない)。
- WebKit をチェックアウトする時は、WebKit Nightly Builds のリビジョンを指定すると良いのではないか。
更新履歴
| 日付 |
内容 |
| 2009-02-03 |
情報 |
SFX の print 関数が undefined を出力するのは、インタラクティブシェル上に限った話で、
コマンドラインでスクリプトを実行した場合には期待通りに動作することを確認した。 |
| 2008-12-17 |
追加 |
注)として、SFX は VM の名称であり、エンジン全体の名称は JavaScriptCore である件 |
| 追加 |
覚え書きに、build-jsc --qt を実行してもビルドが始まらない件 |
| 2008-12-16 |
初版 |
|
|