返信を投稿するのを忘れていたときにマティアスが返信したのを見ましたが、いくつかの点についてさらに詳しく説明しているので、とにかく投稿します:)
まず、カスタム GCC バックエンドを使用して、C/C++ が GCC によって MoSync IL (中間言語) にコンパイルされます。次に、一部のプラットフォーム (Android、Symbian、および Windows Mobile を含む) では、この IL が「pipe-tool」に供給されます。これは、プラットフォームごとに異なる処理を実行できるアセンブラー/リンカー/オプティマイザーです。いくつかのバリエーションを次に示します。
JavaME と、間もなくリリースされる Blackberry 出力の場合、pipe-tool は MoSync バイトコードを生成します。これは、バイナリでコンパクトなレジスタベースの表現です。このバイトコードは、仮想マシンを含む MoSync ランタイムと共にパッケージ化されています。アプリケーションが起動すると、バイトコードがメモリに読み込まれ、解釈が開始されます。
Android、Symbian、Windows Mobile などの場合、プロセスは似ていますが、コードを解釈する代わりに、ランタイム コアがコード全体を調べて、デバイス上で ARM マシン コードに再コンパイルします。それが完了すると、作成したばかりの ARM コードの実行が開始されます。
iOS デバイスの場合、話は少し異なります。MoSync IL を MoSync バイトコードに変換する代わりに、コードを C ソース コードに変換し、xcode プロジェクトを作成します。これにはいくつかの理由があります。1 つは、iOS の場合、動的に ARM マシン コードを生成することは不可能であり、動的にコードをロードすることも許可されていないため、仮想マシンとして実行しても意味がありません。また、法的な面では、アプリケーションの作成方法が Apple の規則とガイドラインに完全に準拠していることを確認したいと考えています。
MoSync の主な強みの 1 つは、この柔軟性です。すべての入力言語が最終的に変換され、任意のプラットフォームの結果のバイナリが常に派生する合理化された中間表現を使用することにより、入力と出力の間の単一の接点が得られます。これにより、サポートされているプラットフォームに関係なく新しい入力言語を追加したり、逆に、入力言語に関係なく新しいプラットフォームのサポートを追加したりできます。
「MoSync を使用すると Java プログラムを iPhone で実行できますか?」と聞かれると、または「Windows Phone 7 で C++ プログラムを実行できますか?」答えは常に「はい」です。
入力言語として Java のサポートを追加すると、MoSync がサポートするすべてのプラットフォームで自動的に動作します。
Windows Phone 7 のサポートを追加すると、MoSync がサポートする入力言語が自動的にそのプラットフォームで使用できるようになります。
信じがたいことですが、本当です:)