#1については、おおまかに次のようにラインナップします。
JavaScript-最高レベルの動的型付けされたGC。UIにはHTML5/CSSのみを使用でき、XAMLフレームワーク(Windows.UI.XAML
名前空間)は使用できません。ローカルストレージやIndexedDBなど、WinRTの使用可能なサーフェスに加えて、いくつかの標準JS API(HTML5で指定)を提供します。動的に型付けされるため、CPUにバインドされた重い処理は、.NETまたはC ++よりも遅くなる可能性がありますが、JSエンジンは、JITコンパイルされ、高度に最適化されているため、依然として非常に高速です。C++および.NETWinRTコンポーネントを使用できますが、JSで独自のコンポーネントを作成することはできません。言語プロジェクションのいくつかの側面はそれに応じて制限されているようです。たとえば、私が見る限り、たとえばJSでWinRTインターフェイスを実装する方法はありません。既存のJSライブラリは、IE10で機能する限り、通常、労力をかけずに、または最小限の労力で再利用できます。
.NET(C#/ VB)-中間レベル、オプションの動的型付け(dynamic
キーワードなど)とGCを使用して静的に型付けされます。XAML UIフレームワークはUIのデフォルトのフレームワークですが、コントロールを使用してHTMLを使用することもできますWebView
。WinRTライブラリへのフルアクセスを提供しますが、それに加えて独自のライブラリもいくつかあり、使用する方が便利な場合があります(Stream
vs IInputStream
/IOutputStream
など)。また、非同期操作の特別な言語レベルのサポートを含む唯一のもの(async
およびawait
キーワード)。非同期設計のため、WinRTAPIを使用するときに頻繁に使用されます。一般的に言えば、ほとんどのシンタックスシュガーを提供します-非同期のものを除いて、オブジェクトにLINQを取得します(これはWinRTコレクションで機能します)。独自のWinRTコンポーネントを記述して、JSまたはC ++/CXから使用できます。既存の.NETライブラリは、依存している.NET Frameworkのクラスに応じて、すぐに再利用できる場合とできない場合があります。SilverlightまたはWP7用に作成されたコンポーネントは、変更なしまたは最小限の変更で再利用できる可能性が最も高くなりますが、.NET4FullまたはClientProfile用に作成されたコンポーネントを実行するには大幅な変更が必要になる場合があります。
C ++ / CX(Visual C ++コンポーネント拡張)-低/中レベル、静的型付け、GCなし-参照のみ。オブジェクトモデルがWinRTに直接マッピングされるように設計されており、インピーダンスの不一致がないため、リカウントされますが、定型文を回避し、一般的に安全に使用できる高レベルです(たとえば、HRESULTではなく例外、文字列が表示されます)。ハンドルでdynamic_cast
はなくオブジェクトとしてQueryInterface
等)。あなたとWinRTの間に追加のレイヤーやプロキシオブジェクトなどはありません。すべての呼び出しは直接です。ほとんどの場合、3つすべての中で最速ですが、正確な違いは特定のタスクによって大幅に異なり、一部の場合はごくわずかであり(たとえば、計算がないかほとんどないイベント駆動型アプリ)、他の場合はかなりの場合(たとえば、解析や重い計算)です。 )。UIストーリーは.NETの場合と同じです。さらに、ATLのサブセットだけでなく、C++標準ライブラリ全体を利用できます。独自のWinRTコンポーネントを記述して、JSまたは.NETから使用できます。既存のC++ライブラリは、使用するAPIに応じて、すぐに再利用できる場合とできない場合があります。標準C/C ++に厳密に依存するものは通常、変更なしで機能しますが、Win32 APIを呼び出すものは、Metroアプリコンテナで使用できないAPIに依存している場合に問題が発生する可能性があります。
#3に関しては、このビデオ(http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C)は、Win32(「低レベルDLL」の意味を推測します)の使用に関するほとんどの質問に答えるはずです。 )Metroアプリから。ビデオはC++に関するものですが、P /InvokeとCOMInteropがまだ存在するため、これはC#にも完全に適用されることに注意してください。したがって、C ++から呼び出すことができる場合は、C#から呼び出すことができます。