Картинка блога

Прошлый раз я рассказал об ощем впечатлении и установке Windows 8. Теперь попробую пролить свет на некоторые технические детали. Не благодарное это дело, описывать технологию, которая в любой момент может поменятся. Тем не менее некоторая информация уже вполне устоялась. И тут я попробую cобрать все вместе.

С анонсом Windows 8 приложения будут создаватся на базе HTML+CSS+Javascript, C/C++ и C#/XAML и думаю очень скоро остальных языков программирования с помощью DLR. При этом, классические формы GDI бедет невозможно встроить в WinRT приложение, существует вероятность что это можно будет сделать наоборот. Вместе с тем отпадет надобность в P/Invoke, заменой которого станет Application Binary Interface (ABI). Все приложения будут выполнятся в своем контейнере — App Container, который в свою очередь будет проверять, есть ли у приложения права на использование вызываемых функций.

На чем писать?

Может показатся, что WinRT основан на управляемом коде, но это не так. WinRT был вдохновлен спецификациями .NET, но он создан поверх COM. Как и COM, вместо исключительных ситуаций метод возвращает HRESULT который в своб очередь преобразуется в Exception. В добавок, в язык C++, на котором собственно и написан WinRT было добавлено несколько языковых конструкций.

C точки зрения Visual Studio это просто особый профиль (как Windows Phone, Silverlight, .NET 4 Client Profile и т.д.). Это значит, что все потенциально опасные методы (например, открытие произвольного файла или редактирование реестра) будут исключены. Из-за большего количества профилей, в VS2010 SP1 beta был введен так назывемый проект: Portable class library, о котором я расскажу позже.




Несмотря на то, что в основе лежит .NET сейчас говорят о трех окружениях:

  • HTML5/JavaScript — с дополнительными нотациями для ссылок WinRT API.
  • C# and VB.NET — c XAML разметкой.
  • C++ with Metro Extensions

В добавок ко всему, эти технологии можно смешивать между собой вызывая методы написанные на одном языке — в другом. Начальной точкой естественно будет официальный сайт Metro Style Apps пока только на английском.

Инструментарий из коробки

Из за сложностей в получении разрешений и подписи библиотек, первое время самым актуальным будет основной набор библиотек, включенных в WinRT. Вот основные возможности из заявленных:

  • Весь API направлен быть асинхронным
  • API определен форматом метаданных согласно ECMA 335 (описаны в файлах «.winmd»)
  • Простой доступ к камере и микрофону с возможностью записи
  • Аппаратное ускорение воспроизведения медиа, включая эффекты в реальном времени, 3D видео, поддержку PlayReady DRM и технологии SmoothSreaming
  • Поддержка CSS3 (совместимость со стандартом скорее всего идентична Internet Explorer 10) и в тоже время HLSL вместе с DirectX 11.1
  • Возможность расширения функциональности установленных приложений (например, кнопка Like для всех приложений, если установленно FaceBook приложение)
  • Интеграция с веб-сервисами, включая OData
  • Простой доступ к сенсорам (GPS, акселерометр, геометр, компас и т.д.)
  • Поддержка печати
  • Поддержка сетевых протоколов вплоть до сокетов
  • Продвинутая синхронизация между устройствами, Live сервисами и облаком Azure.
  • Контролируемый доступ к файлам пользователя (документы, изображения и т.д.)
  • Поддержка Windows Push Notification Service (WNS)
  • При разработке можно будет использовать тестовые подписи (подписывать самому)
  • Получение статистики использования программы из AppStore — App telemetry

Дополниетльные интерфейсы и .NET 4.5

Кратко расскажу о дополнительных интерфейсах и ограничениях, которые известны на данный момент. Дополнительные возможности в .NET 4.5 тут освещены частично.

  • Все типы имеют проекцию на интерфейсы IUnknown и IInspectable
  • Аттрибуты получения иформации о вызывающем метод объекте, номере строки и. т.д.
  • В C# добавлены новые ключевые слова — async/await. Они работают и нтерфейсом IAsyncOperation
  • Дополнительно, появились коллекции только для чтения: IReadOnlyList и IReadOnlyDictionary
  • IO.Stream не совместим между .NET и WinRT. Также в WinRT появился новый интерфейс IBuffer
  • API для WinRT cигнатур, может быть использован только в WinRT типам.
  • Структуры могут содержать только публичные поля
  • Наследование возможно только для XAML компонентов, все остальные классы должны быть sealed.
  • Универсальные (generic) типы доступны толко для встроенных типов.

Mono

Мигель дал четко понять, что никакой работы в эту сторону пока не предвидится:

Today Joseph mentioned to me that some of our users got the impression from my previous post on WinRT that we would be implementing WinRT for Linux. We are not working on a WinRT UI stack for Linux, and do not have plans to.

Тем не менее, некоторые части WinRT все-же будут включены в Моно.

Метки:, , , ,