SpiderMonkey

| | コメント(0) | トラックバック(0)

・SpiderMonkey (JavaScript-C) Engine
http://www.mozilla-japan.org/js/spidermonkey/

Mozilla の C言語 による JavaScript 実装。
スタンドアローンなインタプリタとしてビルドできる。
対話的なJavaScript シェル。

・Introduction to the JavaScript shell - MDC
http://developer.mozilla.org/ja/docs/Introduction_to_the_JavaScript_shell

ここ↑の指示に従って、CVSでチェックアウト、コンパイルした。

なお、mozilla.orgでは、Javaによる JavaScript 実装の「Rhino」も提供している。

Cygwin上でコンパイルしてみる

結果から言うと、MS VC++が必要っぽいので、途中でやめてます。。

Cygwin上で行ったやった事は以下の通り。

$ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot login
Logging in to :pserver:anonymous@cvs-mirror.mozilla.org:2401/cvsroot
CVS password:     # パスワード「anonymous」を入力
 
$ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co \
      -l mozilla/js/src mozilla/js/src/config \
      mozilla/js/src/editline mozilla/js/src/fdlibm
cvs checkout: Updating mozilla/js/src
U mozilla/js/src/.cvsignore
(略)
cvs [checkout aborted]: cannot rename file CVS/Entries.Backup to CVS/Entries: Permission denied

うまくチェックアウトできない。

コレが原因みたい。

cygwin 1.3.13 で、ntsec はデフォルトで有効です。ntsec はもっと Windows NT のセキュリティ機能をベースにしたパーミッションのような UNIX を得るための cygwin の試みです。そのエラーメッセージは cygwin の /etc/passwd ファイルにリストされた unix パーミッションと Windows NT によって使われるそれらとの間にマッピング不一致があることを指し示しています。回避方法として、あなたの CYGWIN 環境変数に "nontsec" を追加することができます。適切な修正はマッピング問題を修正することです。
Mozilla Build FAQ
$ uname -r
1.5.25(0.156/4/2)

Cygwinのバージョンは1.5.25だったけど、関係あるんだろう。

(2008/09/13 追記 ここから)
別のレポジトリから Cygwin で checkout 中、またこのエラーになりました。ちょっと調べたら別の要因もあることが分かったので追記しておきます。

Avira Antivir(優秀なウイルススキャン)Σ(゜エ ゜かよっ
おそらくCVSで1つのファイルをアップデートする度に、Entries.Backup→Entriesにリネームしていくのでしょうが、この頻繁さ故に彼にロックされる危険性が増してたわけですね。
ネオ撲滅党 CVSでチェックアウトできない

この時は Avira Antivir の AntiVir Guard を無効にしたらチェックアウトできました。
こういう要因もあるんですね。
(2008/09/13 追記 ここまで)

適切な修正を行いたいが分からないので、今回は CYGWIN 環境変数に「nontsec」を設定して回避する。

$ rm -rf mozilla     # さっきチェックアウト失敗したファイルを削除しておく
$ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co \
      -l mozilla/js/src mozilla/js/src/config \
      mozilla/js/src/editline mozilla/js/src/fdlibm
cvs checkout: Updating mozilla/js/src
U mozilla/js/src/.cvsignore
(略)
U mozilla/js/src/fdlibm/w_sinh.c
U mozilla/js/src/fdlibm/w_sqrt.c

チェックアウトできたみたいなので、コンパイルする。

$ cd mozilla/js/src
$ make -f Makefile.ref
(略)
make[1]: cl: Command not found
make[1]: *** [WINNT5.0_DBG.OBJ/jsapi.obj] Error 127
make[1]: Leaving directory `/home/ike/js/mozilla/js/src'
make: *** [all] Error 2

Microsoft Visual C++がないとダメですか。。。

Microsoft ツール(CL, LINK, RC)が file not found エラーを示す
INCLUDE と LIB 環境変数は Microsoft Visual C++ ツールによって使われます。それらは大抵 vcvars32.bat でセットアップされます。あなたのビルドしたモジュールに依存しているなら、MFC と ATL が必要かもしれませんし必要ないかもしれません。下のは Visual C++ が "C:\msvs": にインストールされている場合に動作するパスです。
(略)
Mozilla Build FAQ

・Visual Studio 2008 Express Editions
http://www.microsoft.com/japan/msdn/vstudio/express/

この辺↑からExpress Editionsをインストールすれば良いんだろうけど、面倒だからやめ。。。

CentOS5 (Linux) 上でコンパイルしてみる

CentOS5 (Linux) 上でする事に変更。

$ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot login
Logging in to :pserver:anonymous@cvs-mirror.mozilla.org:2401/cvsroot
CVS password:     # パスワード「anonymous」を入力
 
$ cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co \
      -l mozilla/js/src mozilla/js/src/config \
      mozilla/js/src/editline mozilla/js/src/fdlibm
 
$ cd mozilla/js/src
$ make -f Makefile.ref

対話的モードでシェルを起動してみる。

$ Linux_All_DBG.OBJ/js
js>

あっさり出来た。

ちょっといじってみる

・ヘルプを表示してみる

js> help()
JavaScript-C 1.8.0 pre-release 1 2007-10-03
Command                  Description
=======                  ===========
version([number])        Get or set JavaScript version number
(略)

・シェルを終了する

js> quit()
$


・使用してるJavaScriptのバージョンを表示する
今は、Ver1.8を使ってるっぽい。

js> version()
180

・JavaScript 1.7を使用する様に設定

js> version(170)
180
js> version()         # 確認
170

・「Hello World.」を表示してみる

js> print('Hello World.');
Hello World.

・足し算してみる

js> 5+7
12

・関数の定義してみる

js> function test() {
  var i = 3;
  print(i+2);
}

・その関数を逆アセンブルしてみる

js> dis(test)
main:
00000:  int8 3
00002:  setvar 0
00005:  pop
00006:  callname "print"
00009:  getvar 0
00012:  int8 2
00014:  add
00015:  call 1
00018:  pop
00019:  stop
 
Source notes:
  0:     0 [   0] newline
  1:     2 [   2] decl     offset 0
  3:     6 [   4] newline
  4:    15 [   9] xdelta
  5:    15 [   0] pcbase   offset 9

・その関数を実行してみる

js> test()
5

・スクリプトの行の範囲を返す
行の範囲とは指定されたオブジェクトを構成するコードの行数

js> getslx(test)
3

組み込み関数は他にもあるけど、この辺でおしまい。

追記

(2008/06/07 追記 ここから)
リリース版を作成する場合は以下の様にするらしい。
上記方法(BUILD_OPT=1 を付けない)では、デバッグ版。

$ make -f Makefile.ref BUILD_OPT=1

こうすると、「Linux_All_OPT.OBJ」のかわりに、「Linux_All_OPT.OBJ」ディレクトリが作成され、その下にコマンドが作成されるみたい。

また、スレッドセーフにする為には、更に何かしないといけないみたい。
(2008/06/07 追記 ここまで)

トラックバック(0)

このブログ記事を参照しているブログ一覧: SpiderMonkey

このブログ記事に対するトラックバックURL: http://kinshachi.ddo.jp/mt/mt-tb.cgi/487

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ikeが2008年6月 7日 13:55に書いたブログ記事です。

ひとつ前のブログ記事は「Microsoft Baseline Security Analyzer 2.1」です。

次のブログ記事は「Caffeine Monkey」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

Powered by Movable Type 4.261