「WinRT」はこの項目へ転送されています。オペレーティングシステムについては「Microsoft Windows RT」をご覧ください。
Windowsランタイム (Windows Runtime、略称:WinRT) はマイクロソフトによる新しいプログラミングモデルであり、Modern UIスタイルのアプリケーションを作成するバックボーンとなるAPIである。Windows 8以降のオペレーティングシステムで実装されている[1][2]。WinRTはネイティブ言語拡張であるC++/CX
(英語版) (C++ Component Extensions)、マネージ言語であるC#およびVB.NET、そしてスクリプト言語であるJavaScriptおよびTypeScriptによる開発に対応する。Windows SDKバージョン 10.0.17134.0 以降は、C++/WinRT(英語版)を選択することもできる[3]。WinRTはx86/x64/ARM/ARM64をネイティブサポートし、またサンドボックス環境内で動作することで従来のデスクトップアプリケーションよりもセキュリティや安定性を高めることができる[注釈 1]。 WinRTはC++言語によって実装された、オブジェクト指向設計にもとづく近代的なAPIである(なお前身となる旧来のWin32 APIは、C言語のインターフェイスを持つAPIとして設計され、C/C++両方から利用することができた)。また、COMに基づいたネイティブ(アンマネージ)APIであり、COMのように複数の言語から利用することができる。 従来のCOMとの違いのひとつとして、WinRT APIの定義は".winmd"ファイルに格納されており、ECMA 335
概要
新しいC++/CX (Component Extensions) 言語はC++/CLIの文法をいくつか借用しており、C++によるクラシックなCOMプログラミングよりも少ないグルーコードでWinRTコンポーネントの作成や利用が可能である。また、C++/CLIと比較して、純粋C++型(class/struct)とWinRT型(ref class/ref struct/value class/value struct)が混在する場合において課される制約がほとんどない[注釈 2]。ただし、C++/CXは常用するべきものではなく、純粋なC++言語で書かれたコードをWinRTアプリケーションで再利用するためにラップする場合など、境界面においてのみ使用することが推奨されている。例えばC++/CXによるコンポーネント拡張はABI境界でのみ使用されることが勧められている[9]。通常の(COM準拠の規約つきの)C++も、新しいテンプレートライブラリであるWindows Runtime C++ Template Library (WRL) で補助することでWinRTコンポーネントをプログラミングする際に利用可能である[10]。目的としては、WRLはCOM用にATLが提供しているものに似ている[11]が、いくつかの機能が省略されている[12]。なお、のちに標準C++17をベースとした言語プロジェクションとしてC++/WinRTが開発され、C++/CXおよびWRLの代替として推奨されるようになった[3]。
例えば従来のデスクトップアプリケーションの場合、C#コードからC++コードを再利用するときや、あるいはC++コードからC#コードを再利用するときは、いずれもP/Invoke、COM相互運用、もしくはマネージ言語であるC++/CLIによるラッパーを介する必要があったが、WinRTの場合はネイティブ拡張であるC++/CXまたはC++/WinRTを介することで相互運用可能なコンポーネントを作成・利用できるため、明示的にP/Invokeやマネージ言語を介する必要がなくなる。 WinRTは、2011年9月12日のMicrosoft Buildカンファレンスで明らかになり、Windows 8の開発者プレビューに含まれていた。また、最初のC++/CXとWinRT開発環境のサポートは、Visual Studio 2012のプレビュー版であるVisual Studio 11に含まれていた。正式版となったVisual Studio 2012にはWindows 8向けのWinRT開発環境が、そして後継のVisual Studio 2013にはWindows 8.1向けのWinRT開発環境が含まれている。Visual Studio 2013ではWindows 8向けのWinRTアプリケーションを開発することはできないが、Visual Studio 2012と2013は共存可能である[13]。 Visual Studio 2015にはWindows 10(Universal Windows Platform, UWP)向けのWinRT開発環境が含まれている[14]。Visual Studio 2015では、引き続きWindows 8.1向けのWinRTアプリケーション開発もサポートされる。 WinRTコンポーネントは、ネイティブ、マネージコード、スクリプティングを含む複数の言語とABIの間の相互運用性を視野に入れて設計されている。 WinRTアプリケーションはサンドボックス内で実行される。そのため、従来のデスクトップアプリケーションと比べてインストールや動作に関する制約が設けられるものの、セキュリティ面での安全性は向上する。WinRT APIは、従来のデスクトップ版Win32 APIと一部を共有するWin32 APIサブセットの上に構築されており、Win32 APIの代替というよりはむしろ高レベルのラッパーであるといえる[15]。これは内部実装にWin32 APIを利用しているMicrosoft .NET Frameworkで使われているのと同じアプローチである。 WinRTメタデータはWinRTに対して書かれたコードを補足する。プログラミング言語にかかわらずオブジェクト指向的なプログラミングモデルを定義し、リフレクションなどの機能も提供する。
歴史
技術
サービス
メタデータ「.NETメタデータ(英語版