79

I'm working on building an iPhone app with Titanium Mobile 1.0 and I see that it compiles down to a native iPhone binary. How does this work? Seems like it would take a lot of heavy lifting to analyze the JavaScript code and do a direct translation into Objective-C without having a superset language like 280 North's Objective-J and Cappuccino.

4

3 に答える 3

147

Titanium は Javascript コードを受け取り、それを分析して前処理し、アプリケーションでの Titanium API の使用に基づいて解決される一連のシンボルにプリコンパイルします。このシンボル階層から、基盤となる Titanium ライブラリ シンボルにマップされるシンボル依存関係マトリックスを構築して、アプリに特に必要な API (および関連する依存関係、フレームワークなど) を理解できます。シンボルという言葉は、言語によって少し異なるため、半一般的な方法で使用しています。iPhone では、シンボルは真の C シンボルにマップされ、最終的に ARM/i386 アーキテクチャ用にコンパイルされたコンパイル済み .o ファイルにマップされます。Java の場合は、多かれ少なかれ .class ファイルなどです。フロント エンドが依存関係マトリックスを理解できるようになると、SDK コンパイラ (つまり、iPhone の場合は GCC、

したがって、簡単に考えると、JS コードはネイティブランドの代表的なシンボルにほぼ 1 対 1 でコンパイルされます。インタープリター モードで実行されているインタープリターがまだあります。そうしないと、動的コードなどは機能しません。ただし、はるかに高速でコンパクトであり、純粋なネイティブ マッピングに可能な限り近いものです。

これを改善し、それに取り組む余地がまだ十分にあることは明らかです。これまでのところ、最新の 1.0 のテストでは、同じ Objective-C の直接コードとほとんど見分けがつきません (ほとんどの場合、それに正確にマッピングされているため)。しかし、CompSci の観点からは、人間が実際には簡単に実行できなかった最適化を開始できるようになりました。これは、GCC コンパイラが現在既に行っているようにです。

于 2010-03-18T16:53:16.413 に答える
1

シンプルで十分なコードをパッケージ化すると、約 80MB の gzip アーカイブ (元のコードは約 1kB) が得られます。パッケージ内には、とりわけ、ソースの html ファイルと js ファイルがあります。また、多くのライブラリ (ssl など) がパッケージに同梱されています (このフレームワーク内の多くのものに低レベルでアクセスできるため)。

彼らはあなたのコードを取得し、ある種のインタープリター ソフトウェアとライブラリをラップしていると思います。私の場合、自分のサイトだけを表示する小さなブラウザの横に html と js コードを詰め込んだようなものです。

ただし、コードがサポートされているすべてのシステムで同じように機能する限り、それは素晴らしいことです。

于 2010-03-16T20:09:47.843 に答える