web-dev-qa-db-ja.com

WinRT上のC ++、C#、JavaScript

下の画像から、Windows8プラットフォームとツール。これは、MetroスタイルのアプリにC++、C#、またはJavaScriptを使用できることを意味します。ビルドの基調講演もいくつか見ていますが、ここでいくつか質問があります。

Windows 8プラットフォームとツールhttp://www.windowsitpro.com/content/content/140554/windows8-platform-tools_2.jpg

  1. WinRTのC++、C#、JavaScriptに違いはありますか?パフォーマンス、機能、機能など。
  2. JavaScriptを使用してnativeMetroアプリを作成するにはどうすればよいですか?MSのjsライブラリを使用する必要がありますか、それとも使い慣れたjsを使用できますか? jQuery。
  3. メトロスタイルのアプリでは、システムサービスはWinRTのみですが、これは低レベルのdllを使用できなくなったことを意味しますか?これにはパフォーマンスコストが伴いますか?
29
Anonymous

#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のデフォルトのフレームワークですが、WebViewコントロールを使用してHTMLを使用することもできます。 WinRTライブラリへのフルアクセスを提供しますが、それに加えて独自のライブラリもいくつかあり、使用する方が便利な場合があります(例:Stream vs IInputStream/IOutputStream)。また、非同期操作(asyncおよびawaitキーワード)の特別な言語レベルのサポートを含む唯一のものです。これらは、高度に非同期設計であるため、WinRTAPIを使用するときに頻繁に使用されます。一般的に言えば、ほとんどのシンタックスシュガーを提供します-非同期のものを除いて、オブジェクトにLINQを取得します(これはWinRTコレクションで機能します)。独自のWinRTコンポーネントを記述して、JSまたはC++/CXから使用できます。既存の.NETライブラリは、依存している.NET Frameworkのクラスに応じて、簡単に再利用できる場合とできない場合があります。 SilverlightまたはWP7用に作成されたコンポーネントは、変更なしまたは最小限の変更で再利用できる可能性が最も高くなりますが、.NET 4FullまたはClientProfile用に作成されたコンポーネントを実行するには大幅な変更が必要になる場合があります。

C++/CX(Visual C++コンポーネント拡張)-低/中レベル、静的型付け、GCなし-参照のみ。オブジェクトモデルがインピーダンスミスマッチなしでWinRTに直接マッピングするように設計されているという点で「金属に最も近い」-したがってリカウント-それでもボイラープレートを回避し、一般的に安全に使用できるほど高レベルです(たとえば、HRESULTではなく例外、文字列が表示されます)ハンドルではなくオブジェクトとして、QueryInterfaceなどではなくdynamic_cast)。あなたと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#から呼び出すことができます。

44
Pavel Minaev

1)言語の選択を許可するポイントは、APIにアクセスする唯一の方法であるためではなく、言語の本質的な利点のために言語を選択できるようにすることです。動的言語が好きな場合は、JavaScriptを選択してください。静的型付けは好きだが、メモリを扱いたくない場合は、C#を使用してください。最速の実行(ただし、足で自分を撃つ能力が最も高い)が必要な場合は、C++を選択します。

2)それはあなたがネイティブによって何を意味するかによります。メトロスタイルのアプリのように見せたいだけの場合は、開発者プレビューSDKに付属のWinJSライブラリを使用するのが最善の方法です。

3)WinRTを使用すると、JavaScriptコードから独自のC++ DLLまたはC#アセンブリを記述して呼び出すことができます。制限は、DLLをWinRTオブジェクトとして公開する必要があり、Metroスタイルのアプリでの使用が許可されていない関数を呼び出すことができないことです。

3
Steve Rowe
  1. 彼らがいつも持っていたのと同じ違い。自動メモリ管理なしでC#のようなものはありません。管理対象言語には、いつもと同様のオーバーヘッドがあります。

  2. Javascriptを実行している場合は、jQuery(純粋なjavascript)を使用できるはずです。初期化などのためにいくつかのMS関数を呼び出す必要があるかもしれませんが、既存のスクリプト関数は引き続き実行する必要があります。

  3. 私が見た中で最も信頼できる情報源は、(少なくともほとんど)WinRTがWin32の上にあることを示しています。その「Windowsカーネルサービス」ブロックはWin32のkernel32.dll。一部の上位レベルのWin32のものはMetroで使用されていませんが、どのアプリケーションがWin32のすべてを使用したことがありますか?

2
Ben Voigt

他の人が3つのオプションウェルの違いを説明しているので、繰り返しません。

しかし、私はそれが行われると思います:

  • 何を選択するあなた知っている
  • ほとんどのコードを再利用できるものを選択してください

そう

  • .netプログラマーの場合は、C#またはVB.Netを使用してください
  • Windows Phoneからアプリを移植する場合は、C#またはVB.NETを使用してください
  • 大きなC++コードベースがある場合は、WinRTでアンマネージC++を使用することを検討してください。
  • Webサイトがあり、そのオフラインバージョンを提供したい場合は、JavaScriptとHTMLを使用することで、優れたコード(およびスキル)を再利用できる可能性があります。
  • yo JavaScriptやHTMLが好きで、.Netが好きではない場合は、…を使用します。
2
Ian Ringrose

このビデオは、JScriptから独自のC++コードを呼び出す方法を示しています。

http://channel9.msdn.com/posts/Raman-Sharma-Building-Metro-Style-Apps-with-C-and-JavaScript

1
kingster

提案:

  • 開発者プレビューをダウンロードして、自分で探してみませんか。

http://msdn.Microsoft.com/en-us/windows/apps/br229516

事実:

  • もちろん、.Netの場合と同じように、Win32 .dllを(あるレベルまたは別のレベルで)引き続き使用できます。

  • Windows 8は正式に1年以上経過しています。現時点では、最終リリースで特定の「機能」と「機能」がどのようになるかを言う方法はありません。

0
paulsm4