jsolaitについて

jsolaitなるものがあるようです。
私はamachangさんのコメント*1で初めて知りました。

ダウンロードしてソースを見て、CPTと比較してみました。


【結果】

  • やりたいこと(外側・機能)は似ている。
  • 実現方法(内側・しくみ)は全然違う。

でした。ざっと考えて、相違点は以下の通りでした。


【機能の比較】

機能の比較
比較項目 クラスパッケージ化ツール jsolait
クラスファイルの種類 ブラウザの場合はvbsも読み込み可能です。WSHはjsのみで未対応です。文字コードも指定できます。 拡張子はjsのみです。
パッケージ化 パッケージ定義ファイルでパッケージ構造を定義し、使う側はいちいちファイルごとにインクルードする必要がない。 必要なファイルはそれぞれロードする記述が必要(と思われます。)
依存関係 パッケージ定義ファイルでクラスの依存関係を定義している。必要なクラスは自動的にインクルードできる。 必要なもの(スーパークラスなど)を使う側が順番に注意してロードする必要がある。
ソースの見易さ 自信あり
コンテナ依存 コア(クラスローダー含まず)はコンテナ非依存。(コンテナ依存のロード方法をクラスローダーに委譲) prototype.jsほどではないが、クラスのロードでコンテナ依存がある。方針は不明。


【しくみの比較】

しくみの比較
比較項目 クラスパッケージ化ツール jsolait
継承方法 prototypeに代入するためにスーパークラスnewすることはありません。 クラス.prototype = new スーパークラス();をしています。
Static継承 Staticの継承が存在します。 ありません。
インスタンス生成 クラスがそのままコンストラクタとなり、thisに対してそこで初期化を行います。 クラス.prototype.initメソッドでthisに対して初期化を行います。
クラス読み込み ブラウザの場合、XMLHttpRequestActiveXを使っていません。<scrpt>タグなので技術的にはクロスドメインでクラスをロードできますが、CPTで制限しています。 XMLHttpRequestまたはActiveXを使ってロードしています。
モジュール モジュールという概念はありません。クラスのクリエーターメソッドが一番近い存在です。 モジュールでバージョンなどの管理を行っているようです。
ネイティブの変更 ネイティブのオブジェクトなどに対する変更は極力少なくしています。グローバルオブジェクトのメンバ追加はjs,globalize,setIncludeBaseで、var定義はClass,Package,includeのみです。組み込みオブジェクトに対する変更は何もありせん。 方針はわかりません。グローバルオブジェクトにglobalEvel,Class,Module,jsolaitなどを追加し、Error.prototype.toTraceString,String.prototype.format,String.prototype.pad,String.prototype.mulなどを追加しているようです。
コア依存度 CPTを利用するクラスでは、CPTに対する依存度が低くなるように設計されています。何かを継承したサブクラスではCPTコアを外すのは難しいですが、スーパークラスが存在しなければ、非常に簡単にコアなしで動かすことができます。 jsolaitのコアを使わないでそれぞれのクラスを用いることは難しいと思われます。


【感想】
いろいろとフレームワークが出てきていますが、どれもCPTとは趣旨が違うと感じていました。
私の知っているものは全てコンテナとのAPIGUI操作など)やIO(通信など)でしたから。
ここで同じような趣旨のフレームワークがあることを知り、嬉しくもあり悔しくもあります。
「簡単にぱぱっと作り上げたい」という人はAPIやIOのものを利用すべきで、特にCPTを使う必要はありません。
OOP*2で拡張性や機能性を持たせて作りたい」ならばjsolaitやCPTを使うべきでしょう。
フレームワークにもそれぞれの方針があるので使い分けれると良いと思います…が、時代がまだそこまでいってないですね。(もう少し!)
jsolaitとの住み分けですが、CPTはウェブアプリケーションなどで使われることを念頭に置いています。
CPTはjsolaitよりもさらにそちら側*3のものだと思います。

→それと、もし1年半前にjsolaitを知っていたらCPTは作らなかった(旧バージョンでボツ?)かも知れません。(作ったかも知れません。)

*1:http://d.hatena.ne.jp/Mug/20060308/1141826893#c

*2:オブジェクト指向プログラミング(プログラム?)

*3:機能性,汎用性,移植性などを重視する方向。コンテナのAPIやIOを重視するのが逆方向。