2011年4月19日火曜日

Rhino1.7R2 で JavaScript1.7 の機能が使えるのに今さら気づく

Rhinoのオフィシャルサイトで概要を見ると、「Rhino が含んでいるものは、JavaScript1.6 のすべての機能」などと書かれています。

「それでは、JavaScript1.7 の機能は使えないのか?」と思ったら使えました。 シェルでversion関数を使ってみると、version(170)までは有効なようです。 180以降の値を指定すると例外がはかれました。

js> version(170)
0
js> version(180)
org.mozilla.javascript.WrappedException: Wrapped java.lang.IllegalArgumentExcept
ion: Bad language version: 180 (<stdin>#3)
...

JavaScript1.6までは全ての機能が含まれていて、1.7以降の機能は一部しか含まれていないということでしょうか?

jsファイルで1.7の機能を使うには「-version 170」のオプションが必要でした。 「https://developer.mozilla.org/ja/New_in_JavaScript_1.7」を参考にこんなサンプルコードを書いて、

function fib()
{
    var i = 0, j = 1;
    while (true)
    {
        yield i;
        [i, j] = [j, i + j];
    }
}

var g = fib();
for (let i = 0; i < 10; i++)
    print(g.next() );

print('===================');

var x = 10;
function let_test()
{
    print(x);
    let(x = 20)
    {
        print(x);
        if(true)
        {
            let x = 30;
            print(x);
        }
        print(x);
    }
    print(x);
}
let_test();

print('===================');

var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec('https://developer.mozilla.org/ja/New_in_JavaScript_1.7');
var [, protocol, fullhost, fullpath] = parsedURL;
print('protocol : ' + protocol);
print('fullhost : ' + fullhost);
print('fullpath : ' + fullpath);

コマンドプロンプトで「java -jar js.jar -version 170 -w -strict -encoding utf-8 test3.js」と入力して実行します。 結果は、

D:\~\rhino1_7R2<java -jar js.jar -version 170 -w -strict -encoding ut
f-8 test3.js
0
1
1
2
3
5
8
13
21
34
===================
10
20
30
20
10
===================
protocol : https
fullhost : developer.mozilla.org
fullpath : ja/New_in_JavaScript_1.7

う~ん。 jsファイルを実行するとき、なんでデフォルトが1.6なんですかね? おかげで今まで1.7に気づきませんでした。 1.7の方はまだ完璧な実装じゃないんでしょうか?

というか、Rhino1.7R2がリリースされたの2年以上前ですよね。 2年間そのままってことはもう見捨てられてるんじゃ...

今さら過ぎて失礼しました。 でもまぁ、私が使い始めたの最近ですし(イイワケ)。 見捨てられてるとしても便利ですよね、e4xとか。

---

サンプルソース最後の「parsedURL」のところ、「https://developer.mozilla.org/ja/New_in_JavaScript_1.7」のページの一番下、「正規表現のマッチから値を取り出す」のところから持ってきたコードです。 1.7 以降でしか使えないコードかと思ったら、バージョンの設定なしで使えました。 それはhtmlに埋め込んでfirefoxで実行したときも同じ。 mozilla系だったらバージョンに関係なく使えるんでしょうか?

firefox以外のブラウザで対応しているものがないので、どう判断していいやら。 まぁ、Rhinoでしか使わないからどうでもいいんですけど。