web-dev-qa-db-ja.com

Windows 8ランタイム(WinRT / Windowsストアアプリ/ Windows 10ユニバーサルアプリ)は、SilverlightやWPFと比較してどうですか?

Metro スタイルアプリを作成するために使用される新しいWindows 8ランタイムを一周しようとしています。 XAML で使用できることはわかっています。C#とVB.NETを使用してアプリを作成できるように.NETに基づいていますが、HTMLと関係があるようです。 CSS、DOM、およびJavaScript。

.NET UIプログラマーが理解できる用語で、誰かがそれを数段落で説明できますか? (それを理解するために必要な「キー」がありません。)


WPF、 SilverlightWindows Forms などは、少なくともIntelシステムではWindows 8(およびWindows 10)で動作し続けることを知っています。教えて...

352
Ian Ringrose

最下位レベルでは、WinRTはABIレベルで定義されたオブジェクトモデルです。 COMをベースとして使用し(したがって、すべてのWinRTオブジェクトはIUnknownを実装し、参照カウントを行います)、そこからビルドします。古いCOMに比べて、かなり多くの新しい概念を追加します。そのほとんどは.NETから直接提供されます。たとえば、WinRTオブジェクトモデルにはデリゲートがあり、イベントは.NETスタイルで行われます(デリゲートとサブスクライバの追加/削除メソッド、イベントごとに1つ)ではなく、イベントのソースとシンクの古いCOMモデルではありません。他の注目すべき点のうち、WinRTにはパラメータ化された(「汎用」)インターフェイスもあります。

もう1つの大きな変更点は、すべてのWinRTコンポーネントに、.NETアセンブリと同様に利用可能なメタデータがあることです。 COMでは、typelibを使用すると多少の問題が発生しますが、すべてのCOMコンポーネントがtypelibを使用するわけではありません。 WinRTの場合、メタデータは.winmdファイルに含まれています-Developer Previewの「C:\ Program Files(x86)\ Windows Kits\8.0\Windows Metadata \」の内部を見てください。いろいろと調べてみると、それらは実際にはコードのないCLIアセンブリであり、単なるメタデータテーブルであることがわかります。実際、ILDASMで開くことができます。これは、WinRT自体が管理されていることを意味するものではなく、単にファイル形式を再利用するだけです。

次に、そのオブジェクトモデルの観点から実装された多くのライブラリがあります-WinRTインターフェイスとクラスを定義します。繰り返しますが、上記の「Windowsメタデータ」フォルダーを見て、そこに何があるかを確認してください。または、VSでオブジェクトブラウザを起動し、フレームワークセレクタで[Windows 8.0]を選択して、対象を確認します。たくさんあり、UIだけを扱っているわけではありません-Windows.Data.Json、_Windows.Graphics.Printing、_Windows.Networking.Socketsなどの名前空間も取得します。

次に、特にUIを処理するいくつかのライブラリを取得します。ほとんどの場合、これらはWindows.UIまたはWindows.UI.Xamlの下のさまざまな名前空間になります。それらの多くは、WPF/Silverlight名前空間に非常によく似ています。 Windows.UI.Xaml.ControlsSystem.Windows.Controlsとほぼ一致しています。 Windows.UI.Xaml.Documentsなども同様.

現在、.NETには、WinRTコンポーネントを.NETアセンブリであるかのように直接参照する機能があります。これは、COM相互運用とは異なります。相互運用アセンブリなどの中間成果物は必要ありません。/r .winmdファイルだけで、メタデータ内のすべてのタイプとそのメンバーが、あたかも見えるように表示されます。 NETオブジェクト。 WinRTライブラリ自体は完全にネイティブであることに注意してください(したがって、WinRTを使用するネイティブC++プログラムはCLRをまったく必要としません)-管理対象としてすべてのものを公開する魔法はCLR自体の中にあり、かなり低レベルです。 .winmdを参照する.NETプログラムをildasmする場合、実際には外部アセンブリ参照のように見えることがわかります。型の埋め込みなどの巧妙な手品はありません。

それはまた、鈍的マッピングではありません-CLRは、可能な場合、WinRTタイプを同等のものに適合させようとします。例えばGUID、日付、URIはそれぞれSystem.GuidSystem.DateTimeSystem.Uriになります。 IIterable<T>IVector<T>などのWinRTコレクションインターフェイスは、IEnumerable<T>およびIList<T>になります。等々。これは両方の方法で行われます。IEnumerable<T>を実装する.NETオブジェクトがあり、それをWinRTに渡す場合、IIterable<T>として表示されます。

最終的に、これが意味するのは、.NET Metroアプリが既存の標準.NETライブラリのサブセット、および(ネイティブ)WinRTライブラリにアクセスできることです。その一部は、特にWindows.UI-Silverlightと非常によく似ています、APIごと。 UIを定義するXAMLがあり、データバインディング、リソース、スタイル、テンプレートなど、Silverlightと同じ基本概念を扱います。多くの場合、usingという新しい名前空間によって、Silverlightアプリを簡単に移植できます。 、およびAPIが調整されたコード内のいくつかの場所を調整します。

WinRT自体はHTMLやCSSとは何の関係もありません。また、.NETで行われる方法と同様に、そこにも公開されているという意味でのみJavaScriptとの関係があります。 .NET MetroアプリでWinRT UIライブラリを使用する場合、HTML/CSS/JSを処理する必要はありません(まあ、本当に必要なら、WebViewコントロールをホストできます...)。すべての.NETおよびSilverlightスキルは、このプログラミングモデルに非常に関連しています。

478
Pavel Minaev

Build 基調講演から:

Keynote stack

彼らはHTML/CSS/JavaScriptアプリとC#/ XAMLアプリの両方に共通のAPIを提供しています。 C#とXAMLが使用されますが、WPFまたはSilverlightではありません。

65
RandomEngy

重要なアイデアは、デスクトップとメトロという2つの開発トラックがあることです。

  • デスクトップは、古いアプリが存在する場所です。
  • 新しいアプリケーションクラスであるMetroアプリケーションは、VB.NET、C#、またはC++など、さまざまな方法で構築できます。これら3つの言語オプションは、XAMLを使用してUIを構築できます。別の方法は、UIとアプリケーションコードの両方の開発にJavaScript/HTML5/CSSを使用することです。

重要なポイント:

  • Windows 8は、高級な携帯電話OSのように感じられます。
  • Metroでは、携帯電話にトップレベルウィンドウが存在しないのと同じように、トップレベルウィンドウが重複していません。 MDIスタイルのアプリケーションが必要な場合は、デスクトップにとどまる必要があります。
  • Metroスタイルアプリは、表示されていない場合は自動的に中断されます。これは、バッテリーの寿命を延ばすために行われました。これは、ユーザーが操作していない間でもバックグラウンド処理を実行する多くの既存のデスクトップアプリがMetroに移植されることは意味がないことを意味します。
  • ARMバージョンのWindows 8は、デスクトップアプリケーションをサポートしません。そのため、アプリを作成し、それをWindowsのどのバージョンでも動作させるには、Metroアプリである必要があります。
36
dodgy_coder

アーキテクチャの変更されたバージョンがあり、正確にどこにあるのかを確実に理解するのに役立ちます。 Telerikの忍者の1人が CLR チームとチャットし、写真を修正しました:

Windows 8 Platform and Tools (including the CLR)

ここで、CLRの位置を確認できます。 .NETフレームワークには2つのプロファイルがあります

1- .NET Metroプロファイル(Metroアプリケーションを処理するCLR)

2- .NETクライアントプロファイル(C#およびVB.NETアプリケーションのCLRランタイム)

これにより、より明確な画像が得られることを願っています。の記事全体を読んでください。

23
vendettamit

Microsoftからの多くの詳細 こちら

Windowsランタイムは、APIメタデータ(.winmdファイル)を使用して公開されます。これは、.NETフレームワーク(Ecma-335)で使用されるのと同じ形式です。基礎となるバイナリコントラクトにより、選択した開発言語でWindowsランタイムAPIに直接簡単にアクセスできます。 WindowsランタイムAPIの形状と構造は、C#などの静的言語とJavaScriptなどの動的言語の両方で理解できます。 IntelliSenseは、JavaScript、C#、Visual Basic、およびC++で使用できます。

つまり、Windowsランタイムは、Windowsの機能を公開する新しいライブラリセットであり、JavaScript/C#/ VB/C++で利用できます。各言語は、サンキングレイヤーを経由するのではなく、理解して直接呼び出すことができるようになっています。

SilverlightとWPFは、CLRで実行されるXAMLのフレーバーです。他の機能の中でも、Windowsランタイムは、Silverlightに非常によく似たバージョンのXAMLを公開しますが、CLR経由ではなく、ネイティブな方法で公開します。 CLRからアクセスできますが、C++からもアクセスできます。

16
Steve Rowe