3

MoSyncのランタイム アーキテクチャについて説明できる人はいますか?

VM コアは問題ではありません。Java vmで実行され、コードを1行ずつ解釈する仮想マシンだと思います。

しかし、Recompiler Core はどのように機能しているのでしょうか? それは、実行時にネイティブ コードでアプリをコンパイルする一種の Ahead-Of-Time コンパイラですか? しかし、私は写真を理解していません。または、マシンコードであっても、ランタイムの他のモジュールが必要になる可能性はありますか?

ありがとう

4

4 に答える 4

9

返信を投稿するのを忘れていたときにマティアスが返信したのを見ましたが、いくつかの点についてさらに詳しく説明しているので、とにかく投稿します:)

まず、カスタム 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 がサポートする入力言語が自動的にそのプラットフォームで使用できるようになります。

信じがたいことですが、本当です:)

于 2011-03-25T15:26:13.420 に答える
3

MoSync に関するほとんど知られていない事実の 1 つは、CPU に適した設計になっているだけでなく、他の言語への変換にも適しているということです。たとえば、MoSync エンジニアの 1 人は Javascript/HTML 5.0 で動作するプラットフォームを使用しています。

使用しているプラ​​ットフォームによって異なることが発生するため、MoSync はターゲット プラットフォームに最適な中間言語に変換します。

また、MoSync IL には 4 つの異なるフレーバーがあり、それらはすべて相互に互換性がありますが、異なるプロセッサ アーキテクチャを利用するようにモデル化されています。

IL システムには 128 個のレジスタがあり、そのうち 6 個はグローバルで、残りは関数に対してローカルです。

ところで、MoSync バイトコードは MoSync IL と同じではありません。IL はメタデータが非常に豊富です。

詳細やアーキテクチャについて喜んで話し合いたいと思います。質問を投稿してください。

于 2011-04-04T16:28:38.227 に答える
1

Recompiler Core はベース コア + AOT コンパイラであり、ベース コアは MoSync のシステムコールの実装です。アプリを初めて起動すると、AOT コンパイラは MoSync バイト コードを調べて、ARM などのネイティブ コードに変換します。変換中、MoSync のすべてのシステムコールはベース コアの関数に直接マッピングされます。アプリは、変換されたコード セクションの先頭にジャンプすることによって、最終的に実行されます。

モジュールについて。アプリケーション フレームワークは、対応するライブラリとリンクすると、バイト コードに埋め込まれます。syscall と内部拡張機能はベース コアの一部であり、リソース システムに依存します。

于 2011-03-22T08:33:24.157 に答える
1

Recompiler Core は、必要に応じてコードを再コンパイルする典型的な動的再コンパイラ / JIT コンパイラのように見えます。どうやら、MoSync は実行しているプラ​​ットフォーム (VM コア -> Java ME、生成されたコア -> iPhone、リコンパイラ コア -> その他) に応じて異なるコアを使用し、すべてのコアに適したランタイム システムとインターフェイスします。 MoSync のユーザーに対してほとんど透過的であること。

于 2011-03-19T17:25:11.933 に答える