Zaurus向けSpiderMonkey1.5パッケージ
このエントリは、より新しいエントリJavaScript shell (js)、OSSP js 1.6.20060820のZaurus向けパッケージによって刷新されています。
スタンドアローンなJavaScriptインタプリタであるところのJavaScript shell (js)SpiderMonkey1.5のLinux Zaurus向けパッケージを作ったよ。
ダウンロード spidermonkey_1.5_arm.ipk.bin (245.1K)
ソース
http://pkgsrc.se/lang/spidermonkey
Mac OS X 10.4.7上でクロスコンパイル。
ビルド方法が特殊で、CC=arm-linux-gccして./configureすればいいって感じになってない。
かなり無理矢理なことをして作成。バッドノウハウだと思うので、ここには書かないです。
irbみたいにインタラクティブにJavaScriptが実行できる。
$ ./js
js> myStr = "
js> regexp = new RegExp("<([^>]+)>");
/<([^>]+)>/
js> myStr.match(regexp);
js> RegExp.$1;
test
js>
こんな感じ。readlineが組み込まれているので、コマンドライン編集が充実している。C-rによる履歴検索があったのに驚き。
RubyやPerlみたいにJavaScriptをファイルに保存して実行することもできる。標準出力への出力はprint()だった。
-----hello.js------
myStr = "Hello, JavaScript!";
print(myStr);
-----------------
$ ./js -f hello.js
Hello, JavaScript!
ちょっと試した限りではマルチバイトには対応してない感じ。
print("あいう".length); => 9 (UTF8)
print("あいう".substr(0, 1)); =>化ける
何か方法があるんだろうね。
$ ./js --help
usage: js [-PswW] [-b branchlimit] [-c stackchunksize] [-v version] [-f scriptfile] [-S maxstacksize] [scriptfile] [scriptarg...]
引数が取れるらしい。
引数の参照の仕方が分かりました。まずはシェバング行を書いて実行権を付け、
#!/usr/bin/env js
for(i = 0; i < arguments.length)
{
print(arguments[i]);
}
でもって、
$ ./test.js a b c
a
b
c
$
こんな感じでした。


Comments
ここでいいのかな?2ch:ECMAScriptスレの561です。
間違ってたらごめんなさい。
OSSP JS : http://www.ossp.org/pkg/lib/js/
は autoconf 対応させた SpiderMonkey で Fx 1.5 と同じ JS 1.6 対応、最新版だと configure --with-utf8 で utf8 対応になるようです。
自分ではまだ試してないのですが、参考まで。
Posted by: mal_blue | 2006.09.07 at 05:39 PM
mal_blueさん、わざわざありがとうございます。
探させてしまって恐縮です。URLを書いておけばよかったですね。
OSSPっていうのは知りませんでした。
有意義な情報ありがとうございます。後で試してみたいと思います。
結構このエントリはヒットが多いようなので、いただいた情報引用させていただきます。
> 今更だが、SpiderMonkey 付属の js shell だと
> Unicode 対応 API を使ってないのでダメ。
> JS_CompileUCScript, JS_EvaluateUCScript を使うように直せばいいが、
> 対応してるのは UTF-16(LE) なので
> UTF-8 への変換関数も自前で用意する必要がある。
Posted by: moyashi | 2006.09.07 at 07:00 PM
configure中のtestコマンドがva_copy()のところで止まるので、後でセルフコンパイル環境をZaurus上に整えたときに試すとして、とりあえずMac OS X用に--with-utf8付きでコンパイルしてみました。
./configure --helpの--with-utf8の解説に以下のようにあります。
build with exclusive UTF-8 C strings (uses Unicode UTF-8 encoded C strings only)
とりあえずUTF-8でソースを書いて、
print("あ".length) // => 3
あれ。C strings onlyとはどういう意味でしょうか。NULL文字で終了する、C文字文字列のことですかね。
--------以下蛇足
こっちのjsはFileオブジェクトが使えるので、今公開している1.5よりはちょっと実用っぽく使えるかもしれないですね。
こっちのソースにはmanが付いていたので、引数の参照の仕方が分かりました。まずはシェバング行を書いて実行権を付け、
#!/usr/bin/env js
for(i = 0; i < arguments.length)
{
print(arguments[i]);
}
でもって、
$ ./test.js a b c
a
b
c
$
こんな感じでした。
Posted by: moyashi | 2006.09.08 at 03:41 AM
どうもです。
OSSP JS のソースをみたら、jsstr.c 辺りで UTF-8 対応していて、JS_*UC* の Unicode 対応API を使わずに、内部 UTF-16 なのを UTF-8 に変えているみたいです(自信なし)。C strings only はその辺のことかと。
> print("あ".length) // => 3
うーん、JS_*UC* を使うと文字数を渡す必要があるので(not byte len) そこから面倒をみてくれるようなのですが、上記の対応だと C string の延長なのでそうなるのかも、すいません。
> こっちのソースにはmanが付いていたので、引数の参照の仕方が分かりました。
オリジナルは「ソース見ろ」の世界ですから^^; man はありがたいですね。ソースを見て、
js>for (var i in it) print(i);
とかするとw
サンプル用のコードが残っているようです。
お役に立ったかどうかわかりませんが、応援しております、でわでわ。
Posted by: mal_blue | 2006.09.09 at 09:44 PM
コメントありがとうございます。そうなんですよね。オリジナルはソースしか入ってない。
jsを実用に使う人は居ないと思うのでしょうがないですが。
doxygen用のmakefileが入ってますが、ちと使い方が分からなかったです。
Posted by: moyashi | 2006.09.10 at 12:30 AM