BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース コンパイラのターゲットとしてのJavaScript:Clamato、GWT Smalltalk、Python、Scheme

コンパイラのターゲットとしてのJavaScript:Clamato、GWT Smalltalk、Python、Scheme

ブックマーク

原文(投稿日:2009/09/30)へのリンク

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の作者とのインタビューを見てみよう。

この記事に星をつける

おすすめ度
スタイル

BT