Personal tools
You are here: Home ブログ sato_t rtype.js - prototype.js for Rhino
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent comments
Re:マルチパラダイムデザイン sato_t 2008-10-26
Re:マルチパラダイムデザイン anaka 2008-10-25
 
Document Actions

rtype.js - prototype.js for Rhino

Rhinoブーム到来 だそうです。

Rhino絡みのエントリは初回なので軽く説明しておくと、 Rhino とはJavaによるオープンソースのJavaScript実装です。JavaScriptを単体で実行できる他、Javaアプリケーションに組み込んだりもできます。Mozillaがメンテしています。JDKにもバージョン6から同梱されるようになり、OpenOffice.orgでも利用されているようです。ちなみにRhinoという名前はオライリーのサイ本から付けられたそうです。

話は変わって、何年か前にAjaxが流行り出した頃からJavaScriptライブラリが続々と登場しています。もはやデファクトスタンダードと言っても過言ではないprototype.jsを筆頭に、Dojo、Yahoo! UI、ExtJsなど多様な用途の様々なライブラリが利用できるようになり、JavaScriptによるWeb開発はずいぶん容易になりました。一方で、これらのライブラリはあくまでブラウザ組込みのJavaScript処理系での動作を意図しており、RhinoやSpiderMonkeyなどブラウザ以外での動作を念頭に置いたJavaScriptライブラリは見かけません。

というわけで、prototype.jsをRhinoで動くように改造してみました。名付けてrtype.js。昔の某弾幕系シューティングゲームと名前が似ているのは偶然の一致です。多分。

http://sourceforge.net/projects/rtype/

RhinoだとJavaのクラスライブラリ使えるから外部ライブラリいらないじゃん、とかいう突っ込みはなしの方向でお願いします。もともと実用性はあまり重視していなくて、prototype.jsをRhinoで使えたら面白いかな、という発想をそのまま実行に移しただけなのです。rtype.jsの半分はネタでできています。とは言っても、JavaScriptでオブジェクト指向っぽいプログラミングがやり易くなるとか、それなりのメリットはあると思いますが。

機能的な追加はありません。ブラウザ固有の機能(HTML-DOMアクセスとかAjaxサポートとか)を一方的に削っただけです。作業時間の9割は、UnitTestをRhino上で実行できるようにすることに費やしました。

とりあえず公開しましたが、まだUnitTest全部通ってません。ので、バグあります。α版です。人柱版です。

くれぐれも、クリティカルな用途には使用しないで下さい。

くれぐれも、クリティカルな用途には使用しないで下さい。

大事なことなので2度言いました。

商用製品であればとても公開できる段階ではありませんが、趣味ベースのプロジェクトではノリと勢いが重要です。完成度が高まるまで手元に置いておいたら熱が覚めてしまうかもしれません。公開してしまえば、物好きな人がソース読んでバグ見つけてパッチ送ってくれるかもしれません。

現時点でのバグはまだ整理できていませんが、通らないテストのほとんどはハッシュの順序性によるものです。prototype.jsのテストコードを見るとハッシュ内の要素の順序が保持されることを前提に書かれているようですが、Rhinoでは順序が保持されないようです。なので、

var Fixtures = {
  many: {
    a: 'A',
    b: 'B',
    c: 'C',
    d: 'D#'
  }
};

testInspect: function() {
  this.assertEqual("#<Hash:{'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D#'}>", $H(Fixtures.many).inspect());
}

上記のようなテストコードを実行すると

Failure: assertEqual
expected <'#<Hash:{\'a\': \'A\', \'b\': \'B\', \'c\': \'C\', \'d\': \'D#\'}>'>, actual: <'#<Hash:{\'c\': \'C\', \'d\': \'D#\', \'a\': \'A\', \'b\': \'B\'}>'>

みたいな引っかかり方をします。ハッシュの順序性保持は実装依存なので、もしかするとRhinoの仕様なのかもしれません。

とりあえず近々にやりたいことリスト

  • 既知バグを整理してSF.netのTrackerに登録する
  • 本家と同じく、rake test一発でテストが全部実行できるようにする
  • 現状皆無なドキュメントを整備する

今後ですが、本家のバージョンアップに追随するかどうかはまだ全く考えていません。バージョンアップ内容と佐藤の忙しさ次第です。こんないい加減なプロジェクトですが、手伝ってもいいよという奇特な方がいらっしゃいましたらお声掛け頂ければ幸いです。

Category(s)
Rhino
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/sato_t/rtype-js-prototype-js-for-rhino/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.