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でしか使わないからどうでもいいんですけど。

