JavaScript Engine

研究でJavaScriptを使うことになり、JavaScriptを簡単に実行出来る環境が必要になりました。
Google Chromeを使ってやるのも無理ではないのですが、やはり毎回ブラウザを立ち上げたくないです。RubyirbとかPythonのREPLみたいな対話式環境と、jsファイルを簡単に実行出来る環境が欲しい。
というわけで探してみました。

node.js

まず始めにうちの研究室でよく使われているnode.js(http://nodejs.org/)を使ってみることに。しかし、どうもMac OS X 10.5.8ではサポートされていないようです(参考 : http://therobotsbrain.blogspot.com.au/2012/03/installing-nodejs-on-os-x-105.html)

V8

C++で書かれたGoogle Chromeにも使われている高速エンジン。
こちらのページ(http://shinya-blog.blogspot.jp/2011/01/macjavascriptv8.html)を参考にやってみるも、エラー。どうも今のバージョンのビルドはSconでは駄目で、GYPというのを使わなければいけないようです。でも上手くいかなかったので断念。

Rhino

Javaで書かれたMozillaの作ったエンジン。ビルドがすごい簡単で、簡単に導入できました(参考 : http://d.hatena.ne.jp/Snaka/20100917/1284700063)

ただ、readlineの機能がなく、非常に使いづらいです(historyとかないし、方向キーも効かない)。そこで調べてみたところ、rlwrapというのがあり、これを使うとreadlineの機能がないエンジンにreadlineの機能を付加出来るらしいです(http://d.hatena.ne.jp/secondlife/20060607/1149653094)。すごい!
さっそくインストールしてみるも、失敗。readlineのバージョンが4.2以上でないといけないらしいので、readlineをアップデート。しかしrlwrapはインストール出来ませんでした。どうもreadlineのインストールが完全に上手くいっていないようです。

Homebrewでrlwrapをインストールできるみたいなので、Homebrewを使うことに。しかし、brew installが上手く動かず。HomebrewはOS X 10.5ではXcode3.1.4が入っていないと駄目だそうです。
仕方ないのでApple Developer IDを取得してXcode3.1.4を入手し、「brew install rlwrap」。今度は成功。しかも上手く使えます。Homebrew便利!

SpiderMonkey

こちらもMozillaが管理するエンジン。FireFoxに使われている(いた?)とか。Cで書かれており、Rhinoより早いようです
(http://stackoverflow.com/questions/9060841/rhino-vs-spidermonkey-performance-tests)。
手動でのインストールは失敗したのですが(参考 : http://d.hatena.ne.jp/yutakikuchi/20110904/1315105395)、「brew install spidermonkey」なら上手くいくかもと思い実行。みごと成功しました。


もしかしてV8もbrewでいける?とやってみるも失敗。どうもSVN(Subversion)のエラーっぽいので「brew install svn」でSVNをバージョンアップしたらSVNのエラーは消えるも、なんかPythonファイルでエラー発生。/Library/Python/2.5/site-packages/gyp/input.pyの「except ImportError as e:」がSyntax Error。検索してみると、Python3.xでは駄目だとか(http://stackoverflow.com/questions/10418209/django-can-not-get-django-admin-py-to-run-anything)。でも2.5だしなあ・・・。
brew install python」でPythonのバージョンを2.7.3に更新し、「brew install v8」で今度こそ成功しました。
でも「make native -j2 library=shared snapshot=on console=readline」でインストールされていた(http://code.google.com/p/v8/wiki/BuildingWithGYP)けど、v8(sample shell)で起動してもd8(console)で起動してもreadlineが効かない。どういうこと?それにv8とd8の違いはなんなんだろう??多分d8を使うのがいいんだろうけど。

SpiderMonkeyとV8のどっちが速いかは難しいけど、若干V8の方が良さそうなので(http://stackoverflow.com/questions/2137320/javascript-engines-advantageshttp://favo.asia/2012/01/v8-vs-spidermonkey/)、しばらく「rlwrap d8」でJavaScriptを動かしてみようと思います。


おまけ
node.jsのエンジンをv8からSpiderMonkeyに変えたSpidernodeっていうのがあるらしいです(http://www.moongift.jp/2011/05/20110503-3/)。