jQueryの主要開発者であるJohn Resig氏がJavaScript Language AbstractionsとしてJavaScriptをそのまま使うタイプのライブラリを使ってJavaScriptも学習した方がいいのではないかというニュアンスの考察をブログに公開してから、各所で意見が出ている。氏のブログでJavaScript隠蔽タイプのフレームワークとして名前があがったObjective-Jだが、Cappuccino BlogにおいてOn Leaky Abstractions and Objective-Jのタイトルのもと、どうやらObjective-Jが誤解されているようだとし興味深い説明を公開している。John Resig氏のブログと合わせて読んでおきたいドキュメントだ。
GWTは完全にJavaで隠蔽するが、Objective-Jはそうではない。jQueryやPrototypeとGWTの中間とまではいかないが、おもしろいアプローチをとっている。Objective-JはJavaScriptをベースとしておりJavaScriptがそのまま実行できるが、記述ルールとしてObjective Cで実現されたのと同じようなフォーマットも記述できるようにしたものだ。
次期JavaScript 2はECMAScript 4ではなくECMAScript 3.1をベースとしたものになることが2008年夏ごろに方向性として合意を得ている。つまりJavaScriptは従来のフォーマットのまま今後も数年は使われることになり、JavaやC#のようにオブジェクト指向をすっきりと記述できるようにはならない。
Objective-Jはこの状況に対するひとつの答えだ。Francisco氏はjQueryやPrototypeのようにJavaScriptの記述をベースとしたまま機能を提供するのではなく、言語レベルでスマートな記述ができるべきだと考えている。しかしECMAScript 4がJavaScript 2のベースになるチャンスは去ってしまったわけだから、JavaScript自身がよりスマートな記述ができるように待つわけにはいかない。こうした状況の中でJavaScriptに若干の追加をすることでObjetive Cのようにオブジェクト指向プログラミングを記述できるようにしたものがObjective-Jだ。アプローチの方法は異なるが基本的にはJavaScriptをそのまま使うjQueryとPrototypeと同じようなライブラリといえる。
言語モデルとしてObjective Cを採用したのは、JavaやC#と同じような表記にするには互換性という面で無理があったという背景がある。実際、Objective-Jの最初の成果物はJavaの表記によく似ているが、この表記にはJavaScriptをそのままオンザフライで実行させたいという目的を果たしにくいところがあった。そこでObjective Cの歴史を参考にしたというわけだ。Objective CはもともとCに最低限の拡張を追加することでオブジェクト指向を実現するためのものだ。表記レベルで大幅に変更を加えるC++とはアプローチが異なっている。これと同じことをJavaScriptに適用したのがObjective-Jだ。最低限の追加でJavaScriptをオブジェクト指向風に記述できるようになり、氏の考えることが実現しやすくなった。JavaScriptでありつつもオブジェクト指向の記述がスマートにできるというわけだ。
GWTやほかの大規模RIA開発向けのフレームワーク開発者と同じように、Francisco氏も大規模なWebアプリケーションを開発するためにはこうした取り組みは欠かせないものであるとしており、John Resig氏とはそのあたりで意見に違いがあるようだ。またFrancisco氏からみればjQueryもPrototypeもJavaScriptを多かれ少なかれ隠蔽するようなものだと説明しているところも興味深い。