Microsoft Windows Runtime

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:12, 21 марта 2017.
Windows Runtime
A component of Microsoft Windows
Details
Other names WinRT
Type API
Included with Microsoft Windows Server 2012,
Microsoft Windows 8,
Microsoft Windows RT,
Microsoft Windows 8.1,
Microsoft Windows Server 2012 R2,
Microsoft Windows 10,
Microsoft Windows Server 2016
Related components
Microsoft Windows Store,
Microsoft Windows API

Windows Runtime (WinRT) − модель программирования от Microsoft, впервые введенную в Windows 8 и Windows Server 2012 в 2012 году. WinRT поддерживает разработку на C++ (обычно с использованием расширения языка Component Extensions, C++/CX), управляемых языках C# и VB.NET, а также JavaScript. Компоненты WinRT разработаны с функциональной совместью между несколькими языками и API-интерфейсов, в том числе родной, управляемый и скриптовый языки.

Windows Phone 8.1 использует версию Windows Runtime под названием Windows Phone Runtime. Это позволяет разрабатывать приложения в C# и VB.NET, а также компоненты Windows Runtime в C++/CX.[1]

Технология

WinRT реализован на языке программирования C++ и является объектно-ориентированным дизайном. Его предшественник, Windows API (Win32 API) написан в основном на языке C. Это неуправляемый код интерфейса прикладного программирования (API) на основе модели компонентных объектов (COM), который позволяет взаимодействовать с несколькими языками, как это делает COM. Однако определения API хранятся в файлах .winmd, которые закодированы в ECMA 335 формате метаданных, который .NET Framework использует также с некоторыми изменениями. Этот общий формат метаданных позволяет значительно меньше служебных расходов при вызове WinRT из приложений .NET, по сравнению с P/Invoke, и более простой синтаксис.

Новый C++/CX (Component Extensions) язык, который заимствует часть синтаксиса C++/CLI, позволяет писать и использовать компоненты WinRT с меньшим количеством связующего кода, видимого для программиста, по сравнению с классическим COM программированием на C++, и накладывает меньше ограничений по сравнению с C++/CLI при смешении типов. Компонентные Расширения C++/CX рекомендуются для использования только в API-boundary, а не для других целей. Стандартный C++ также может быть использован для программирования с компонентами WinRT, с помощью Windows Runtime C++ Template Library (WRL), которая аналогична по назначению тому, что Active Template Library обеспечивает COM.

WinRT приложения выполняются в песочнице и требуют прямого разрешения пользователя для доступа к критически важным функциям операционной системы и базового оборудования. Доступ к файлам ограничивается несколькими заранее определенными местами, такими как каталоги, документы или изображения.

WinRT приложения для Windows RT, Windows 8 и для других упакованы в .appx формат файла, основанный на Open Packaging Conventions, использующий формат ZIP с добавлением файлов XML. Приложения WinRT распространяются в основном через магазин приложений Windows Store, где программное обеспечение WinRT (называется Windows Store apps) могут быть загружены и приобретены пользователями. Приложения WinRT могут быть загружены только из Windows Store на Windows 8 или из RT систем, являющимися частью домена Windows, или оснащенными специальным ключом активации, полученного от корпорации Microsoft.

Главное отличие от Win32 и аналогично .NET Framework 4.5 - большинство API-интерфейсов, которым, как ожидается, потребуется значительное время для завершения реализуются как асинхронные. Приложение отправляет API сигнал, который возвращается немедленно, освобождая приложение для выполнения других задач во время ожидания результатов. Асинхронная модель требует новых конструкций языка программирования (ключевое слово async и оператор await в C# и Visual Basic, класс task и метод .then в C++, которые обеспечиваются комплектом разработки программного обеспечения WinRT (SDK), ключевое слово promise и функция then в JavaScript- HTML5), похожие на try/catch, используемые в обработке исключений. Части API нуждающиеся в асинхронном доступе включают в себя: отображаемые на экране сообщения и диалоговые окна, доступ к файлам, подключение к Интернету, разъемы, потоки, устройства и сервисы, а также календарь, контакты и встречи.

Сервисы

Метаданные

Метаданные описывает код, написанный для платформы WinRT. Они определяет модель программирования, которая позволяет писать объектно-ориентированный код, который может быть поделен между языками программирования, а также дает возможность предоставлять сервисы, подобные рефлексии.

Герб Саттер, эксперт по C++ в Microsoft, объяснил во время своей сессии по C++ на конференции Build 2011, что метаданные WinRT это метаданные CLI. Машинный код (т.е. машинный код процессора) не может содержать метаданные и поэтому хранится в отдельных WINMD-файлах, которые могут быть отображенны как обычные CLI сборки.

Так как это метаданные CLI, код, написанный на родном языке WinRT можно использовать с управляемыми CLI языками.

Тип системы

WinRT имеет обширную объектно-ориентированного систему, которая построена на метаданных. Он поддерживает конструкции с соответствующими конструкциями в .NET framework: классы, методы, свойства, делегаты и события.

Одним из основных дополнений к WinRT по отношению к COM является кросс-двоичный интерфейс приложения (ABI), обобщенного программирования .NET-стиля. В C++/CX они объявляются с помощью слова generic с синтаксисом, очень похожим на ключевое слово template. Классы WinRT (классы ссылки) могут также обобщенно использовать C++ шаблоны, но только шаблоны конкретизации могут быть экспортированы в .winmd метаданные (с некотором изменением имени), в отличие от WinRT дженериков, сохраняющих их типичность в метаданных. WinRT также предоставляет библиотеку общих контейнеров, которые параллельны в стандартной библиотеке C++, а также функции обратного преобразования.

Компоненты WinRT

Классы, скомпилированные для назначения WinRT, называются компонентами WinRT. Это классы, которые могут быть написаны на любом поддерживаемом языке и для любой поддерживаемой платформы. Основой являются метаданные. Эти метаданные позволяют взаимодействовать с компонентом с любого другого языка WinRT. Для работы среды исполнения требуются компоненты WinRT, созданные с использованием .NET Framework, для использования определенных типов интерфейсов или интерфейсов типа .NET, которые автоматически сопоставляются с первым именем. Наследование пока не поддерживается в управляемых компонентах WinRT, за исключением классов XAML.

Интерфейсы программирования

Программы и библиотеки, предназначенные для выполнения WinRT могут быть созданы и использованы из нескольких платформ и языков программирования. В частности C/C++ (или с помощью расширений языка, которые предлагают поддержку первого класса для концепции WinRT, или с помощью библиотеки шаблонов более низкого уровня, что позволяет писать код в стандартный C++), .NET (C# и Visual Basic .NET (VB.NET)) и JavaScript. Это стало возможным с помощью метаданных.

В терминологии WinRT, языковая привязка называется языковой проекцией.

C++ (WRL, Component Extensions)

Родной C++ - объект первого класса WinRT-платформы. Для использования WinRT из C++ доступны две поддерживаемые опции: WRL, библиотека шаблонов стиля ATL и C++/CX (C++ с расширениями компонентов), которая напоминает C++/CLI. Из-за внутренних требований к потреблению в Microsoft, WRL не является исключением, что означает, что его возврат значений дисциплины основан на HRESULT, как и на COM. C++/CX, с другой стороны, оборачивает вызовы WinRT кодом, который выполняет проверку ошибок и выдает исключения по мере необходимости.

В C++/CX есть несколько расширений, которые позволяют интегрироваться с платформой и ее системой типов. Синтаксис похож на синтаксис C++/CLI, хотя он генерирует собственный код и метаданные, которые интегрируются со средой выполнения. Например, объектам WinRT может быть назначено ref new, что является аналогом gcnew из C++/CLI. Оператор-шляпа ^ сохраняет свое значение, однако в случае, когда и вызывающий, и вызываемый записываются на C++ и живут в одном процессе, ссылка шляпы - это просто указатель на vptr для таблицы виртуальных методов (vtable, VMT).

Наряду с C++/CX, относительно традиционного программирования на C++ COM, частичные классы снова вдохновленны .NET. Это позволяет экземплярам XAML-кода транслироваться в C++ код с помощью инструментов, а затем объединять с написанным человеком кодом для создания полного класса, позволяя при этом чистом разделении машинных и редактируемых человеком частей реализации класса на разные файлы.

WinRT - это родная платформа и поддерживает любой собственный C++ код. Разработчик на C++ может повторно использовать существующие собственные библиотеки C/C++, используя только языковые расширения при написании кода, взаимодействующего со средой выполнения.

.NET

.NET Framework и Common Language Runtime (CLR) интегрированы в WinRT как субплатформа. Это оказывает влияние и устанавливает стандарты для этой системы через формат метаданных и библиотек. CLR предоставляет услуги, такие как JIT-компиляция кода и сборка мусора. WinRT приложения, использующие языки .NET, используют новый Windows Runtime XAML Framework, и в основном написаны на C#, VB.NET, и впервые на XAML, с машинным кодом с использованием C++/CX. Хотя пока официально не поддерживаются, программы также могут быть написаны на других языках .NET.

Limits

Классы, определенные в компонентах WinRT, построенные в управляемых .NET языках должны быть объявлены как sealed, поэтому они не могут быть получены. Тем не менее, non-sealed классы WinRT определенные в другом месте могут быть унаследован от платформы .NET, переопределены их виртуальные методы, и так далее; но унаследованный класс управляемых еще должны быть sealed.

Пользователи, которые взаимодействуют с другим языком должен иметь подпись с типами WinRT или управляемый тип, который конвертируется.

JavaScript

Приложения WinRT также могут быть закодированы с использованием HTML с JavaScript в code-behind, которые выполнены с помощью движка рендеринга Trident и движока Chakra JavaScript, оба из которых также используются Internet Explorer. При кодировании приложения WinRT в JavaScript, его особенности адаптируются, чтобы следовать схемам наименования JavaScript и пространства имен также отображаются на объекты JavaScript.

API

WinRT поставляется с интерфейсом прикладного программирования (API) в виде библиотеки классов, который предоставляет возможности Windows 8 для разработчиков,как и его многонаправленный интерфейс API. Он доступен и используется из любого поддерживаемого языка.

Классы Runtime

Классы Windows Runtime представляют собой набор пакетов SDK, которые обеспечивают доступ ко всем функциям из из XAML парсера для функции камеры. В SDK реализованы как родные библиотеки C/C++ (неуправляемые).

Схемы наименования

Схемы наименования для компонентов (классов и других членов) в API находятся под сильным влиянием схем именования .NET, которая использует CamelCase (в частности PascalCase). Microsoft рекомендует пользователям следовать этим правилам, в случае, когда никакие другие не заданы. Эти наименования проектируются по-разному в некоторых языках, например в JavaScript, который преобразует его в свои наименования и наоборот. Это должно дать нативный и последовательный опыт, независимо от языка программирования.

Ограничения и правила

Поскольку Windows Runtime проецируется на различных языках, некоторые ограничения основных типов данных существуют для того, чтобы разместить все эти языки. Программисты должны быть осторожны с поведением этих типов при использовании с открытым доступом (для параметров метода, метод возвращаемых значений, свойств и т.д.)

  • Основные типы
    • В языках .NET и C++ существует богатый набор типов данных, представляющих различные цифры.
    • В JavaScript, Number может представлять только до 53 бит точности.
    • В WinRT, единственный недостающий числовой тип данных это 8-разрядное целое число относительно .NET и C++. Разработчики JavaScript должны быть осторожны при работе с большими числами при кодировании для WinRT.
    Строки
    • Строки неизменяемы в .NET и JavaScript, но изменяемые в C++.
    • Пустой указатель, который обрабатывается в виде строки в WinRT, в C++ преобразуется в пустую строку.
    • В .Net, значение null, которое обрабатывается в виде строки в WinRT, преобразается в пустую строку
    • В JavaScript значение null, которое обрабатывается в виде строки в WinRT, преобразуется в строку со словом null. Это происходит из-за ключевого слова null,представленного в JavaScript в качестве нулевого объекта.
      • Аналогичные результаты возникают при переходе undefined в WinRT из JavaScript.
    Структуры
    • В .NET и C++ структуры являются типами значений, и такая структура может содержать любой тип в нем.
    • JavaScript непосредственно не поддерживает структуры.
    • В WinRT использование структур допускается только для содержания типов, которые имеют семантику значений, включая цифры, строки и другие структуры. Указатели или ссылки интерфейса запрещены.
    Ссылки
    • В .NET объекты передаются по ссылке, а цифры и структуры передаются по значению.
    • В C++ все типы могут быть переданы по ссылке или значению.
    • В WinRT интерфейсы передаются по ссылке; все остальные типы передаются по значению.
    Массивы
    • В .NET, C++, и JavaScript массивы являются ссылочными типами.
    • В WinRT массивы являются типами значений.
    События
    • В .NET и C++, клиенты подписаться на события, используя оператор +=.
    • В JavaScript функции addEventListener или настройка на on<EventName> свойство используется для подписки на события.
    • В WinRT, все языки могут использовать свой собственный путь, чтобы подписаться на события.
    Коллекции
    • Некоторые коллекции .NET распределяются напрямую в коллекции WinRT.
    • В WinRT типы Vector напоминает массивы и синтаксис массивов используется, чтобы потреблять их.
    • Тип Map в WinRT представляет собой набор пар ключ/значение, и проектируется как словарь в .NET языках.
    Перегрузка операторов
    • Все WinRT языки (.NET, C++, JavaScript) поддерживают перегрузки по параметрам.
    • .NET И C++ также поддерживают перегрузки по типу.
    • В WinRT только номер параметра используется для перегрузки.
    Асинхронность
    • Все методы WinRT сконструированы таким образом, что любой метод занимающий больше времени, чем 50 миллисекунд, является асинхронным методом.
    • Установленная схема присвоения имен для различения асинхронных методов - <Verb>[<Noun>]Async. Для получения полной библиотеки Rubtime, все методы, которые имеют шанс длиться дольше, чем 50 мс реализуются только как асинхронные методы.

История версий

Версия Windows
Windows 8 Windows Runtime
Windows 8.1
Windows 10 Universal Windows Platform (UWP)

Windows Phone Runtime

Начиная с Windows Phone 8 можно разрабатывать приложения, используя версию Windows Runtime, под названием Windows Phone Runtime (WPRT). Несмотря на то,что WP8 принес ограниченную поддержку, платформа действительно в конечном счете сходится с Windows 8.1 в Windows Phone 8.1.

Windows Phone 8

Windows Phone 8 имеет ограниченную поддержку для разработки и потребления компонентов Windows Runtime за счет Windows Phone Runtime. Большинство интерфейсов API Windows Runtime в Windows 8, которые обрабатывают основные функции операционной системы, были перенесены в Windows Phone 8[2]. Поддержка для разработки нативных игр с использованием C++/CX и DirectX была добавлена по просьбе индустрии разработки игр.

Windows Phone 8.1

Поддержка Windows Runtime на Windows Phone 8.1 сходится с Windows 8.1. Релиз привносит на платформу полный API Windows Runtime, включая поддержку среды выполнения Windows Runtime XAML Framework и привязки к языку для C++/CX и HTML5-JavaScript. Существует также тип проекта под названием Универсальные приложения, позволяющие приложениям совместно использовать код через версии 8.1 Windows Phone и Windows.

Обновлена версия Windows Phone 8 Silverlight Framework. Она может использовать некоторые новые функции в среде выполнения Windows.

Windows Phone Runtime использует формат пакета AppX из Windows 10, ранее использовав Silverlight XAP.

Примечания

  1. "Windows Phone API reference". Windows Phone API reference. Microsoft. July 21, 2014.
  2. "Windows Phone Runtime API". microsoft.com. Microsoft.

Ссылки

Источники

Windows Runtime // Википедия. [2015—2015]. Дата обновления: 25.07.2015. URL: https://en.wikipedia.org/wiki/Windows_Runtime (дата обращения: 25.07.2015).