Rhino の変更ログ

Rhino 1.6R1、2004-11-29 にリリース

リリース概要

Rhino 1.6R1 は、Rhino の新しいメジャーリリースです。 ECMA 357 standard としての ECMAScript for XML (E4X) をサポートします。 E4X は既存のコード・ベースに影響を与えずに、JavaScript へネイティブ XML サポートを加える、言語拡張セットです。 E4X example に、様々な E4X コンストラクションと、JavaScript コード内でのそれらの使用法が示されています。

このバージョンの Rhino は、公開 API だけを使用して、 下にあるドキュメントのような推奨されないクラスは使っていない場合、 現在 環境に組み込んでいるものと、バイナリ互換であるべきです。 何か互換性に関する問題があれば、Bugzilla に報告してください。

E4X の実装

E4X のコードは、BEA によって Rhino プロジェクトに寄贈され、BEAAgileDelta のスタッフによって開発されていました。

E4X ランタイムの実装に、XMLBeans ライブラリーを使用しています。 この実装については、XMLBeans のバージョン 1.0.2 と 1.0.3 でテストを行いました。 あなたのスクリプトで E4X を使うのなら、xbean.jar をクラスパスに加えて、それを利用できることを確かめてみてください。

詳しくは、Bugzilla 242805 を参照してください。 Rhino 1.6R1 への E4X 実装についての、既知の問題点の一覧は、Bugzilla 270779 を参照してください。

その他の変更点

Rhino の例外 (exception) の共通の root

現在の(新しい)、すべての Rhino の例外 (exception) のクラスは、org.mozilla.javascript.RhinoException から派生したもので、そしてそれは java.lang.RuntimeException を拡張したものです。 そのクラスは、スクリプトの例外の原因に関する情報にアクセスする一定の方法と、Rhino の組み込みでの簡単な例外ハンドリングを 供給します。

詳しくは、Bugzilla 244492 を参照してください。

インタープリターでの複雑なコードの限界 の撤廃

Rhino のインタープリターモードで、スクリプトサイズやコードの複雑さの限界は、もはや存在しません。JVM リソースが許す限り、どんなスクリプトも実行することが可能なはずです。

詳しくは、Bugzilla 244014 と、Bugzilla 256339 を参照してください。

インタープリターでの末尾呼び出しの除去

Rhino のインタープリターモードに、末尾呼び出しの除去(=tail-call elimination) が実装されました。 関数が、別の関数の呼び出しの結果を返す場合に、必要以上のスタック空間の消費を回避するものです。

Bugzilla 257128 を参照してください。

インタープリターでの「継続」のサポート

Rhino のインタープリターモードは、継続 (continuation) をサポートします【訳注: 参考 RhinoWithContinuations。 このコードのアイデアの基になるのは、「継続」のオリジナル実装である Christopher Oliver と、SISC プロジェクトによるものです。 「継続」を使うためには、最適化レベルを -1 に セットすることによってインタープリターモードを選択するか、 あるいは、Rhino shell (を起動する時)のコマンドラインに -opt -1 を付け加える必要があります。

実装の詳細と、Java と JavaScript の「継続」の API は、今後、互換性を保たない方向で変更されるかもしれないことに注意してください。

Bugzilla 258844 を参照してください。

JavaImporter コンストラクター

JavaImporter は、Java をスクリプト記述に利用する際に、パッケージ名を省略できる、新しいグローバルなコンストラクターです:

var SwingGui = JavaImporter(Packages.javax.swing,
                            Packages.javax.swing.event,
                            Packages.javax.swing.border,
                            java.awt.event,
                            java.awt.Point,
                            java.awt.Rectangle,
                            java.awt.Dimension);
...

with (SwingGui) {
    var mybutton = new JButton(test);
    var mypoint = new Point(10, 10);
    var myframe = new JFrame();
...
}

以前にも、このような機能は、トップレベル・スコープで org.mozilla.javascript.ImporterTopLevel クラスを使ったものが、組み込み用途として利用可能でした。 このクラスは、追加されるスクリプトのグローバルな関数 importPackage()importClass() を提供します。しかし、それらの大量使用は、Java クラスの名前によって グローバルなネームスペース(名前空間) を汚染する傾向があり、 読み込んだクラスをガーベジ・コレクションから妨げてしまいます。

詳しくは、Bugzilla 245882 を参照してください。

Context カスタマイズ API

org.mozilla.javascript.ContextFactory は、org.mozilla.javascript.Context をカスタマイズする新しい API を提供し、 Rhino ランタイムが Context のインスタンスを作成する必要がある時に、アプリケーション固有の Context サブクラスが常に使用されるだろうということを保証します。

詳しくは、Bugzilla 245882 を参照してください。

Date.now() のサポート

SpiderMonkey での Date.now() 関数は、ECMAScript standard からの拡張で、現在の Rhino で利用可能になります。この関数は、1970-01-01 00:00:00 UTC から経過したミリ秒の数値を返します。

推奨されないクラスの除去

次に挙げるクラスは Rhino 1.5R5 では推奨されず、Rhino 1.6R1 においては、もはや利用も不可能です。

ClassNameHelper と ClassRepository からの置き換えを提供する org.mozilla.javascript.optimizer.ClassCompiler の資料を参照してください

以前の Rhino リリースからの変更ログ



トップに戻る