しばらくの間、Javascript と Objective-Cが、iPhoneプラットフォーム用の、唯一の言語だったが、最近になって、他の言語が加わった。MonoのAhead of Timeコンパイル(動的なJITに対して静的なコンパイルの意味)で、コンパイル済みの.NET言語をiPhoneで、走らせることができる。4月に、RhoMobile が リリースしたRhodesは、iPhoneやその他のシステム向けに、スマートフォーン アプリケーションをビルドできる。
我々は、John M McIntosh氏に、iPhoneで、Squeakを走らせるために、何をしたのか、アプリケーションを書くために、使われたプログラミングモデルは、何かを聞いた。
InfoQ: あなたは、基本的に、iPhoneのブラウザコントロールで、使われている、HTMLやJavascriptベースのGUIをよく見せるために、Squeakを使っているようですね。この認識は、正しいですか?
単に、web表示を使うより、もっと複雑です。例えば、WikiServerのWikiテキスト入力機能には、複数行の表示が必要ですし、それから標準キーボードを出して、キーボード制御バーを出して、特殊文字を入力させたり、キャンセルあるいは終了を合図させます。Wiki情報は、Web表示を使って、見せますが、我々は、UIKitを使って、4つの異なった画面を管理します。こういうことをするには、あつらえのObjective-Cクラスが必要で、VMをコンパイルする(SqueakではVM自身Smalltalkで書かれていてコンパイルするとCに変換される)ので、アプリのどの部分をSmalltalkで書くか、どの部分をObjective-Cで、書くか選べます。技術的には、すべてをSmalltalkで書けますが、パフォーマンス上の問題があり、現実的ではありません。
UIが、iPhone特有なので、ドメインモデルである、基本MVCロジックから、描画層を切り離す必要があります。実際、WikiServerは、当初、コントロール画面を持った、首なしアプリでした。それから、誰かが、デバイス上で直接、コンテンツを編集できないのか?、と言ったのです。しかし、汎用的なUI層を作って、プラットフォーム固有の実装ができる、そういう方法をとっていませんでした。そうしたら、もっと大変な作業だったでしょう。しかし、私は、http://news.squeak.org/2009/01/08/squeak-goes-to-marsにある記事について話さなければいけません。Esteban Lorenzano氏が、iPhoneへの移植を意図して、CocoaのUIフレームワークを作成しているのです。ネイティブなウィジェットを使っているCincomの Visualworksのような、他のSmalltalkシステムにも注目したいですね。しかし、現時点で、取り組んでいないものをやるとなったら、莫大な努力がいることになってしまいます。
InfoQ: webアプリには、何を使うのですか? Seasideですか?
Seasideで、webページを作って、UI表示部であるUIWebViewが、Mobile Safariを使って、ページをレンダリング(描画)します。理論的には、適当な大きさのSeasideアプリなら、どんなものでも、iPhone上で動きます。
InfoQ: iPhoneで、Squeakのイメージを、使えますか?他のシステムで、それを修正して、保存できますか?例えば、デスクトップシステムと、同じような起動動作になりますか?
isqueak.orgにある基本ソフトを使えば、iPhoneの開発者は、自分が選んだイメージを使った、SqueakのVMをビルドできます。マルチタッチのロジックを使うために、そしてObjective-Cのブリッジコードを入れるために、イメージは、アップデートが必要です。そうしたら、Squeakのデスクトップにタッチ操作ができ、そう、お望みなら、イメージを保存できます。
http://www.mobilewikiserver.com/Swirl.htmlにある、我々のSwirlアプリケーションが、Squeakで作成したデスクトップです。タッチ操作機能は、使えなくしてあり、情報入力を促すのに、UIKit Alert ダイアログを使ってます。
我々のFractionアプリケーション
は、 http://www.mobilewikiserver.com/Fraction.htmlにありますが、 WikiServerに近いです。2つのUIKit画面を持ち、タッチ操作の情報が、UIを知らない、計算エンジンへ送られ、キー入力を受け付け、テキストを更新します。
InfoQ: これらのアプリケーションのサイズは、16,7MBあるようですが、もっと小さくできますか?
SqueakDocsやST80Docsは、もっと大きいですよ、圧縮されていますが、4月バージョンのWebベースのSqueak用の、テキストソースコードと、Pharo開発用のイメージを持ってますから。iPhoneに、これらをインストールすると、約54MBのフラッシュメモリを食います。これは、RAMサイズではありません。WMとMobile Safariをロードするのに、約10MBのRAMが要ります。Safariなければ、2,3MBで済みますが。それからイメージをロードすると、約35MBのRAMを占めます。
インストール直後のWikiServerは、ずっと少ないRAM、14MB、しか要りませんが、これは、注意深いチューニングの結果なのです。
InfoQ:Pharo と Squeakの両バージョンの違いは、何ですか?
Squeak バージョンは、squeak.orgのサイトのリンクから辿れる、webベースの開発用の、イメージです。我々は、webビュー、状態、情報画面をサポートするロジックをWikiServerから加えました。我々が加えた物のほかには、起動時間を改善するために、少々の変更が入っていますが、通常のデスクトップ用に、ダウロードするイメージと、差はありません。Pharoバージョンは、教育より、ずっとビジネスに焦点を当てた、ものを作りたいと考えている、Pharoチームが作ったものです。そのため、Morphic やeToysの多くの部分が、除かれています。彼らは、頻繁に更新モジュールをリリースし、目下、バグ修正に、積極的に取り組んでいます。
InfoQ: 不要なものを除いて、イメージをもっと小さくできますか?それともすでにそれは済んでいるバージョンですか?
この件の詳細は、http://www.esug.org/Conferences/2009/Current+List+of+Talks/Smalltalk+on+iPhone で、話します。
ベースのPharoイメージは、約22MBで、12MBのコードを除いて、WikiServerが、約10.5MB使えるようにしました。Swirlは、Seasideを含まないで、約6MBの大きさです。更に小さくできますが、http://netjam.org/projects/spoon/にある、Craig Latta氏の非常に小さくする、やり方(SpoonというSqueakから派生した、オブジェクトのメモリサイズを小さくするオブジェクトプログラミングシステム)を利用したい、と考えています。我々は、iPhoneの、VMマネージャも利用して、実行に必要なページだけをメモリにもってくるようにしたい。WikiServerでは、イメージデータの約4MBが、アプリの実行に不要なようです。
有償の、Squeakベースのアプリケーションは、AppleのAppStore、WikiServer(注意:iTunesでリンクする Mobile Wiki Server websiteもある)、SqueakDocs using Squeak (注意:iTunesでリンクする) やSqueakDoc using Pharo (注意:iTunesでリンクする).で入手できる。