JavaScriptは今や至るところで見かけるが、好きになるのに苦労する言語だ。GoogleのV8、Apple/WebKitのNitro/SquirrelFish Extreme、FirefoxのTraceMonkeyといったVMが現れるまでは、JavaScriptのパフォーマンスはひどいものだった。
ブラウザ間で実装に互換性がないため、開発も一苦労だった。jQueryなどのライブラリがうまく抽象化してくれたおかげで、ようやく1つのAPIを使ってプログラムできるようになり、互換性までとれるようになった。
こうした問題を解決するもう1つのやり方がある。JavaScriptを完全に隠して、コンパイル対象として利用するというものだ。GoogleのGWTは、Javaコードによる成熟した例だ。Java APIのサブセットを使ってプログラムを書くと、それをブラウザ固有のJavaScriptにコンパイルしてくれる。GWTを使った現実世界のアプリケーションがGoogle Waveクライアントだ。最近では、こうした流れに加わる言語実装がさらにいくつか現れている。
Smalltalk Seaside web frameworkの作者であるAvi Bryant氏は、プログラムをJavaScriptらしいJavaScriptにコンパイルするClamatoというSmalltalkの方言を開発した。FutureRubyで撮影されたInfoQとのインタビューで、Avi氏はClamatoの設計原則について語っている。
Clamatoのチュートリアルを見てみよう。Clamato (Smalltalk)クラスブラウザをWebブラウザで開くと、Clamatoのソースコードをインスペクトして編集することができる。クラスを検索するには、ブラウザの左上にあるテキストフィールドを使えばよい。興味深いのは、PEG(Parsing Expression Grammar)ベースのClamatoパーサをセルフホスティングしているところだ。(パーサや各種コンビネータのクラスを見るには、テキストフィールドに "PP" を入力してみよう)。
HTMLビルダーのスタイルには、Seasideの影響が多少見られる(ClamatoブラウザではHTMLCanvas
クラス)。ビジュアルコンポーネントは、これを利用してGUIを構築している。例えば、チュートリアルにあるカウンタのコンポーネントは次のようなものだ。
renderOn: html html h3 with: @counter. html button with: '+'; onClick: [@counter := @counter + 1. self reload]. html button with: '-'; onClick: [@counter := @counter - 1. self reload].
renderOn: html
で新しいメソッドを定義し、その下にメソッドの本体が続いている。ここでは、ヘッダとイベントハンドラを設定した2つのボタンを含むHTMLを作っている。
偶然にも、最近、別のブラウザベースのSmalltalkであるGWT Smalltalkが登場した。作者であるPeter Fisk氏は、以前.NETおよびActionScriptベースのVista Smalltalkを開発していた人物だ。GWT SmalltalkはGWTを使って書かれており、ブラウザで実行するためのJavaScriptを生成する。
GWT Smalltalkはまだ初期段階にあるのだが、急速に進化している。XMPPをサポートしているので、Google Waveとやりとりするのには、よい位置にいる(XMPPはGoogle Waveの重要な部分だ)。さらに詳しい情報は、「Industry Misinterpretations(業界の誤解)」のポッドキャスト、Peter Fisk氏とのインタビューとGWT Smalltalkのブログから入手することができる。
Smalltalk以外では、PythonにもpyjamasというJavaScriptコンパイラがある。
pyjamasは、スタンドアローン型のPythonからJavaScriptへのコンパイラ、AJAXフレームワーク/ライブラリ、WidgetセットAPIを提供します。
手始めに、オンラインのPyjamas Bookを読んでみるとよいだろう。
JavaScriptにコンパイルする言語としては、他にもMoby Schemeがある。Moby Schemeを際立たせているのは、JavaScriptにコンパイルすることでモバイル機器をターゲットにしているところであり、現時点ではAndroidに対応している。これを可能にしているのは、PhoneGapと、AndroidにWebKitベースのブラウザと効率よいJavascript VMが搭載されているおかげだ。PhoneGapとは、加速度センサ、GPS、カメラといったネイティブのデバイス機能や、アドレスブックなどの機能にJavaScriptがアクセスできるようにするライブラリだ。PhoneGapの作者は、非常に異なるプログラミング環境を備えたスマートフォンをすべてブリッジするために、このライブラリを作ったのだが、共通しているものがある。それがWebKitと高速なJavaScript VMだ。JavaScriptを使ってデバイス機能にアクセスできることによって、スマートフォンでクロスプラットフォームアプリを実現することが可能になる。PhoneGapについて、詳しくはInfoQのPhoneGapの作者とのインタビューを見てみよう。