4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javascript Engine (V8, SpiderMonkey, JerryScript, Duktape) で遊ぶ

Last updated at Posted at 2017-05-21

色々な Javascript Engine で遊んでみた。意外とエンジンごとに特徴があった。

比較

Javascript Engine ビルド時間(かなり良い Ubuntu 16.04) 実行ファイルの大きさ シェル起動後のメモリサイズ (VmHWM) 感想
V8 (Google) 61 分 17M 13040 kB ビルドが面倒くさい
SpiderMonkey (Mozilla) 12 分 209M 16804 kB バイナリサイズが大きい
JerryScript (Samsung) 5 秒 218K 4kB Javascript が古いがメモリが少ない
Duktape 4 秒 308K 1088kB

V8

Getting Started: https://github.com/v8/v8/wiki/Getting%20Started%20with%20Embedding

に書いてある事をなぞってみる。V8 は depot_tools とか言う特殊なツールでダウンロードやビルドを行うので、ちょっとややこしい。

ソースコードのダウンロード

depot_tools のダウンロードと PATH 設定

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=`pwd`/depot_tools:"$PATH"

Google Source にログイン。Configure Git に行って適当なアカウントでログインし、コマンド文字列をシェルにコピペする。

以下のコマンドでインストールが上手く行ったか確認。

$ gclient

v8 のダウンロード (2 - 3 分)

$ fetch v8
$ cd v8

サンプルのバージョンに合せる

$ git checkout -b 5.8 -t branch-heads/5.8

ビルド設定

$ tools/dev/v8gen.py x64.release

ビルド設定を編集するために以下実行

$ gn args out.gn/x64.release

エディタが起動するので、以下修正追加

is_component_build = false
v8_static_library = true

ビルド (一時間)

$ ninja -C out.gn/x64.release

テスト

samples/hello-world.cc にサンプルがあるのでビルド。同様に samples/shell をビルドすると REPL が出来る。

$ g++ -I. -Iinclude samples/hello-world.cc -o hello-world -Wl,--start-group \
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},\
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a \
-Wl,--end-group -lrt -ldl -pthread -std=c++0x

スナップショットファイル (natives_blob.bin, snapshot_blob.bin) と ICU ファイル (icudtl.dat) を実行ファイルの場所にコピー

$ cp out.gn/x64.release/*.bin .
$ cp out.gn/x64.release/icudtl.dat .

サンプルプログラムを実行

$ ./hello-world 
Hello, World!

特徴

  • 実行サイズの大きさ: 17M
  • shell 起動直後のメモリサイズ: VmHWM: 13040 kB

宿題

  • bin ファイル、ICU ファイルとは何か?
  • hello-world.cc の中身を変える。
  • v8 に機能を追加する。

SpiderMonkey

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Build_Documentation を元に作業

依存ツールインストールとソースコードのダウンロード

sudo apt install -y autoconf2.13
git clone --depth 1 https://github.com/mozilla/gecko-dev.git
cd gecko-dev/js/src

ビルド (12 分)

autoconf2.13 
mkdir build_OPT.OBJ
cd build_OPT.OBJ
../configure
make

起動

$ ./js/src/shell/js
js> print("hello world!")
hello world!

特徴

  • 実行ファイルの大きさ: 209M
  • js 起動直後のメモリサイズ: VmHWM: 16804 kB

JerryScript

ダウンロード

git clone https://github.com/jerryscript-project/jerryscript.git
cd jerryscript

ビルド (5秒)

python tools/build.py 

実行

./build/bin/jerry 

特徴

  • 実行ファイルの大きさ: 218K
  • シェル起動直後のメモリサイズ: 4kB

Duktape

ダウンロード

$ wget http://duktape.org/duktape-2.1.0.tar.xz
$ tar xJvf duktape-2.1.0.tar.xz
$ cd duktape-2.1.0

ビルド (4秒)

$ make -f Makefile.cmdline

実行

$ ./duk

特徴

  • 実行ファイルの大きさ: 308K
  • シェル直後のメモリサイズ: 1088 kB

おまけ。Javascript の機能がどの仕様で定義されているか?

Javascript では。最初から幾つかの関数やオブジェクトが使える。それらの機能がどの仕様で定義されているのか調べてみた。

他の javascript エンジン

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?