Недавно мы начали знакомиться с фичами Win 10 и VS. Прошел месяц, и вот в наши волосатые руки попадает уже Visual Studio 2015 CTP 6 и SDK для Win 10! Будем разбираться. Новая ASP.NET, новое поколение компиляторов — Roslyn, новые визуальные тулзы для отладки XAML-кода... ммм... я чувствую себя, как ребенок в кондитерском магазине! Ну, как говорил Карлсон, «и ты заходи» :).

Разработка для экосистемы Windows 10

В последние годы Microsoft сконцентрировалась на кросс-платформенной разработке. Это касается и распространения .NET framework на все популярные десктопные операционные системы — и облачных, и мобильных решений. К числу первых относятся OneDrive, Microsoft Dynamics, Office 365, ко вторым — три самые распространенные мобильные операционные системы: Windows Phone, iOS и Android, управляющие самыми разными устройствами. В плане разработки Microsoft стремится оказать существенное влияние на оба эти сегмента рынка, создавая кросс-платформенные решения для программистов. Для примера возьмем сегмент мобильных приложений, в разработке для него используются: для Windows Phone — C#/HTML/XAML, для Android — Java, для iOS и Mac OS X — Obj-C/Swift. То есть, чтобы разработчику заточить свое приложение под все платформы, надо тратить колоссальные финансово-временные ресурсы. Насколько я понимаю, в Microsoft хотят, чтобы более 95% кода для всех платформ было на C++, а остальное приходилось на низкоуровневые интерфейсы, написанные на специфических языках. У компании уже есть такой полнофункциональный продукт — PowerPoint, в нем все сделано именно так.

 

Visual Studio 2015: разработка мобильных и универсальных приложений

Выпустив экосистему Windows 10, Microsoft сделала универсальные приложения, управляемые этой системой на любых устройствах, будь то смартфон, планшет или настольный компьютер (вместе с ноутом). Вдобавок к этому у Microsoft есть игровая консоль Xbox One, также интегрированная в экосистему Windows 10, следовательно, гибкая разработка возможна и для нее. То есть после выхода экосистемы Windows 10 все разнообразные устройства, управляемые ранее разными операционными системами, стали работать в одной среде (см. рис. 1).

Рис. 1. Экосистема Windows 10
Рис. 1. Экосистема Windows 10

Как видишь, объединение началось еще в Windows 8, однако завершилось оно в «десятке».

 

Программы, не зависящие от аппаратной платформы

Возможность разрабатывать UAP (Universal App Platform) уже появилась в Visual Studio 2015 Preview. Windows для них — это сервис. Это невероятный подарок всем разработчикам для среды Microsoft — один и тот же бинарник исполняется на устройствах разных форм-факторов. В основе UAP-приложений лежит Extension SDK. Работает это так: 95% кода — общий для всех платформ, и лишь 5% отводится на специальный интерфейсный уровень.

Рис. 2. Extension SDK
Рис. 2. Extension SDK

С целью обеспечения совместимости Microsoft не чурается использования сторонних облачных и мобильных решений, как распространенных (Dropbox, Google Drive), так и не очень (Tizen, MeeGo, Bada, BlackBerry, Symbain).

Помимо универсальных Windows 10 приложений, мобильных приложений для Windows Phone 8.0/8.1, iOS, Android, приложений для Azure и web-приложений для ASP.NET 5-й версии, расширенных дополнений и приложений к Office и SharePoint, классических приложений (сюрприз :)), с помощью VS 2015 можно создавать программы на языке Python. Как и в случае с iOS и Android, для разработки под которые на текущий момент (!) надо докачивать дополнительный софт, для использования языка Python необходимо скачать его интерпретатор. При попытке создать Python-проект Visual Studio перекинет тебя на сайт CodePlex, откуда будет предложено скачать тестовую версию интерпретатора — PTVS 2.1. Необходимо заметить, что поддержка языка Python появилась еще в 2011 году в виде беты. Сейчас он представляет собой программное обеспечение с открытым исходным кодом, размещается на CodePlex и включает поддержку интерпретаторов CPython и IronPython. На сегодня разработчики VS рекомендуют использовать Visual Studio 2013, где поддержка данного интерпретатора реализована в полном объеме. Примерно так же все обстоит и с созданием проектов для iOS и Android — тебе предложат скачать Xamarin Studio и создавать приложения для этих систем из-под нее. В имеющемся на сайте Microsoft видео показано, как здорово разработчики кодят на Obj-C для iOS из Visual Studio, но в текущей версии, которую я использовал, это невозможно. Стоит отметить, платформа Xamarin используется для создания нативных приложений, работающих на Mono, такие приложения имеют доступ к системным вызовам платформы. Дополнительно существует способ создания гибридных мобильных приложений с помощью веб-языков посредством Apache Cordova прямо из Visual Studio 2015. Несмотря на то что гибридные приложения имеют гораздо меньше возможностей взаимодействовать с конкретной программно-аппаратной платформой, у Apache Cordova есть множество плагинов для конкретных операционных систем, которые исправляют этот недостаток и открывают возможности взаимодействия с конкретным API устройства.

Рис. 3. Структура Apache Cordova
Рис. 3. Структура Apache Cordova

В Visual Studio 2015 Preview создавать веб-приложения можно, кроме ASP.NET, с помощью языка TypeScript. Он используется в связке с HTML (подобно JavaScript, существенное влияние которого испытал при рождении). А поскольку его ведущий разработчик — Андерс Хейлсберг, то и сильное воздействие со стороны C# также прослеживается, например в виде статической типизации и программирования на базе классов.

Рис. 4. Выполнение веб-приложения на TypeScript
Рис. 4. Выполнение веб-приложения на TypeScript

Нельзя не обратить внимание и на имеющиеся в Visual Studio 2015 Preview диагностические тулзы (рис. 5).

Рис. 5. Диагностические тулзы Visual Studio 2015 Preview, активируемые при отладке веб-приложений
Рис. 5. Диагностические тулзы Visual Studio 2015 Preview, активируемые при отладке веб-приложений

Когда я писал эту статью, только что вышла Visual Studio 2015 CTP 6, а буквально накануне появился комплект инструментов (SDK) для разработки под Windows 10. Visual Studio 2015 CTP 6 пополнилась визуальными тулзами для отладки XAML-кода, всего их две: Live Visual Tree и Live Property Explorer, с их помощью разработчик может просматривать визуальное дерево, содержащее свойства выполняющегося WPF-приложения. Воспользовавшись Live Visual Tree во время отладки, можно выбрать любой элемент для его просмотра в Live Property Explorer. Если доступен исходный код, можно перейти непосредственно к определению данного элемента. Live Property Explorer служит для просмотра, а также изменения значений свойств выбранного элемента, при этом ты можешь видеть эффект произведенных изменений без перезапуска приложения. Также в Visual Studio 2015 CTP 6 была добавлена технология CodeLens. Она обогатила студию возможностью просмотра истории твоего C++, SQL-, JavaScript-кода, хранящегося в подключенных репозиториях Git и TFS.
Новая тулза CodeMaps реализовала возможность постройки визуальных кодовых карт, отражающих все зависимости в коде твоего проекта. Диагностические тулзы теперь могут работать вместе с отладкой 64-битных приложений для Магазина Windows. Добавлены новые «умные» unit-тесты для управляемого кода, теперь они генерируют данные для тестирования и собственно наборы тестов. Был обновлен и Android-эмулятор, который обзавелся поддержкой OpenGL ES, Android Lollipop, API Level 21 и усовершенствованной эмуляцией камеры (с помощью готовых изображений или использования веб-камеры компьютера). Улучшения поддержки Apache Cordova главным образом заключаются в расширении возможностей отладки: появилась функция отладки приложений для Windows Phone 8.1. Также улучшения коснулись нативной разработки на Visual C++ кросс-платформенных приложений: это поддержка новых версий мобильных осей (в том числе Android Lollipop, API Level 21), предкомпилированные заголовки в шаблонах проектов, новые шаблоны, включающие использование NDK. А главное — это улучшения в отладке благодаря использованию диагностирующего инструмента Logcat.
Говоря об отладке мобильных платформ, следует заметить, что каждая запускаемая мобильная платформа представляет собой виртуальную систему, запускаемую в виртуальной машине Hyper-V. Следовательно, тебе нужен компьютер с процессором, поддерживающим виртуализацию.

 

Visual Studio — бесплатно!

Порадуемся выходу Visual Studio Community Edition, которая заменила собой Visual Studio Professional и при этом стала бесплатной. Она включает все инструменты профессиональной версии, однако имеет ограничение на количество пользователей: использовать ее бесплатно может только команда до пяти человек. Да, и если твой продукт зарабатывает больше 1000k зеленых президентов, тогда тоже надо будет купить редакцию Ultimate.

 

ASP.NET 5 и MVC 6

Как мы уже говорили, ASP.NET 5 перепроектирована и переписана с нуля. Что же в этом хорошего? В настоящей версии ASP.NET разделена на пять основных частей, фундаментальную нишу занимает кросс-платформенный компонент Host, в котором выполняется веб-приложение. Host запускает и обеспечивает весь жизненный цикл приложения.

Следующий уровень — среда исполнения Project K, она состоит из нескольких блоков. Первый блок — среда компиляции и исполнения. Собственно, именно этот блок содержит набор SDK, хосты, которые исполняют кастомный код. Второй блок — это KVM (K Version Manager), он представляет собой командную утилиту, которая позволяет выбрать версию среды исполнения. В текущей версии приложение не ограничено определенной средой исполнения, которая установлена на сервере или у хостера, каждое приложение может выполняться в своей обособленной среде, которая может быть индивидуальной у каждого приложения. K Package Manager, как и следует из названия, — это менеджер пакетов для управления их составом определенного приложения. То есть он управляет загрузкой, удалением пакетов, их установкой в проект, управлением зависимостями и так далее. Последний блок — K Language Runtime. Он служит для непосредственного запуска приложения в системе разработки, то есть этим местом может быть настольная операционная система (Windows, OS X), или серверная (Windows Server, Linux), или какое-то мобильное устройство, например планшет под управлением Android или Microsoft Surface. K Language Runtime выполняет сборку, запуск и отладку приложений на том устройстве, где ведется разработка.

На самом верхнем уровне находится приложение, построенное на основе модулей нижних уровней. Отдельным блоком, не входящим в состав Project K, идет очень простая утилита K Command. Она представляет собой командную строку и позволяет разработчику совершать любые действия со своим проектом, в том числе добавлять и удалять компоненты, создавать модули, настраивать контроллеры, управлять моделями, представлениями.

В ASP.NET 5 присутствует три среды исполнения. Во-первых, это Full .NET CLR от Microsoft — «родная» среда исполнения, в которой можно выполнять как новый, так и «унаследованный» код (разработанный для предыдущих версий ASP.NET).
Во-вторых, это Core CLR — оптимизированная среда выполнения для облачных приложений. В-третьих, среда выполнения Cross-Platform CLR, которая основана на Mono. Так как последняя получает много кода от проекта .NET Framework, она в ближайшем будущем превратится в самую настоящую кросс-платформенную среду выполнения для Windows, Linux и OS X.
Благодаря кросс-платформенности ты можешь выполнять или, другими словами, хостить ASP.NET-приложение на любом устройстве, в любой операционной системе. Теперь его можно запускать хоть на микроконтроллерах!

Все ранее разделенные технологии веб-разработки от Microsoft: MVC, Web API и Web Pages — были объединены в новую версию MVC 6.
Кроме того, ASP.NET 6 включает новую версию WebForms 4.6. На этой технологии разработано огромное количество проектов, поэтому WebForms поддерживается и совершенствуется. Microsoft вливает новые инвестиции в эту технологию.

Еще одним очень весомым новшеством ASP.NET 5 стал новый конвейер HTTP второй версии. Он приобрел новый стек, из чего вытекает повышенная скорость работы и упрощенная эксплуатация. Теперь стек компонентный, то есть разработчик может добавлять компоненты для обработки запросов. Появилась поддержка спецификации OWIN.

Нельзя не упомянуть добавленные компоненты идентификации для ASP.NET 5.

OpenID Connect — прослойка над протоколом OAuth 2.0, OAuth Broker, шаблоны ASP.NET 4.6, а также новый инструмент аутентификации в Azure AD. Таким образом, ASP.NET отвязался от технологий, предназначенных исключительно для Windows, используя теперь кросс-платформенные решения. В Visual Studio 2015 добавлена поддержка xUnit, теперь система тестов интегрирована в Test Explorer и может использоваться для создания юнит-тестов. А в Test Explorer, соответственно, видны все результаты. Редактор JSON также подвергся кардинальным изменениям и переписан с нуля, он приобрел: улучшенное автодополнение, валидацию, расширенную подсветку синтаксиса, поддержку схем JSON, определение дубликатов данных и другое. HTML-редактор был обновлен для поддержки таких фреймворков, как Angular, Handlebars. Расширена подсветка пользовательских элементов и атрибутов HTML 5. Добавлены веб-компоненты.

 

Новое поколение компиляторов

Раньше по традиции все компиляторы, включая компиляторы для управляемых языков, писались на C++. Компилятор получал код на высокоуровневом языке, выполнял над ним никому, кроме разработчиков этого компилятора, не известные операции и выдавал двоичный код. И раньше всех это устраивало. Но появившиеся в средах разработки инструменты вроде автодополнения (IntelliSense), средств рефакторинга или интеллектуального переименования потребовали от этого «скрытого механизма» сведений о своей работе.

За много лет развития управляемые языки обрели такую мощь, что с их помощью стало возможным разработать собственный компилятор. Так появилось новое поколение компиляторов, написанных на C# и названных семейством Roslyn. В это семейство входят два компилятора: с языка C# и с языка VB.NET. Одно из главных преимуществ этих компиляторов над унаследованными — это модульность в противовес монолитности. Модульность послужила ключом к организации компилятора в виде компонентной управляемой платформы, что, в свою очередь, упростило создание инструментов, ориентированных на исходный/двоичный код и приложения. Кроме того, это послужило хорошим толчком для развития других областей программирования, таких как объектные модели, кодогенерация или метапрограммирование.

Посредством API Roslyn предоставляет информацию о времени исполнения компилятора на каждом этапе. Всего в процессе компиляции четыре отдельных (благодаря модульности) этапа.

На первом этапе исходный код разбивается на лексемы и анализируется на предмет соответствия синтаксису определенного языка программирования.

На втором этапе объявления и метаданные анализируются в форму именованных символов.

На третьем этапе происходит связывание идентификаторов из исходника и именованных символов, подготовленных на прошлом шаге.

Наконец, на завершающем, четвертом этапе вся информация объединяется и реализуется компилятором в сборку.

На каждом этапе компиляции информация отображается в виде соответствующей данному этапу объектной модели. Так, первому этапу соответствует синтаксическое дерево (Syntax tree), второму — иерархическая таблица символов, в результате третьего этапа получается семантический анализ компилятора, а четвертый выводит IL-байт-код.

Каждый Roslyn-компилятор объединяет эти четыре этапа в один. Для соответствия открытых API компиляторов всем требованиям современных сред программирования, отражающих мощь языков C# и VB.NET, каждый компилятор с соответствующих языков был перестроен в последней версии Visual Studio.

API компиляторов Roslyn главным образом состоит из двух уровней: собственно API компилятора и API рабочей среды. Уровень API компилятора выдает сведения о двух фазах компиляции: синтаксического и семантического анализов. Уровень компилятора также содержит ссылки для сборки, опции компиляции и файлы с исходным кодом. У языков C# и VB.NET API этого уровня сильно различаются. К этому уровню также относятся диагностические API (Diagnostic Apis) и скриптовые API (Scripting api). Как часть уровня компиляции, диагностический API выдает всю информацию о проведенных синтаксическом и семантическом анализах, сведения об ошибках объявления и различные предупреждения. Скриптовые API в будущем позволят выполнять куски кода и накапливать сведение о выполнении. Тем не менее на текущий момент Scripting API еще не реализован (но планируется, что будет частью платформы .NET Roslyn).

Уровень рабочего пространства содержит Workspace API, который служит отправной точкой для разных анализов кода, в том числе рефакторинга. Workspace API организует все сведения в соответствующие информационные модели, что позволяет избежать анализа отдельных файлов и конфигурирования опций.

 

Синтаксис и семантика

Рассмотрим объектные модели, которые являются дополнительным продуктом компиляции, это синтаксические и семантические деревья. Они предоставляют для инструментов разработки картину структуры исходного кода.

Синтаксическое дерево — базовая структура, используемая при компиляции, связывании, анализе кода, рефакторинге. Данная структура имеет три ключевых свойства: во-первых, информация, хранимая в синтаксическом дереве всегда полная и точная, во-вторых, получаемая инфа исходит из анализа кода всего проекта, что означает возможность использования синтаксических деревьев для восстановления и редактирования исходного кода, и, в-третьих, синтаксическое дерево немодифицируемо и потокобезопасно, то есть может быть без проблем использовано несколькими юзерами. Дополнительно к деревьям прилагаются узлы (Syntax nodes), они представляют такие конструкции, как объявления, условия и выражения. Все перечисленные категории принадлежат разным классам с одним предком — SyntaxNode. Ключевые слова являются синтаксическими токенами, которые в CLR представлены отдельным типом. С другой стороны, пробелы, комментарии, директивы препроцессора — это Syntax Trivia (дословный перевод — синтаксические мелочи).

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

Платформа компиляторов Roslyn представляет собой набор API и рабочего пространства, который, в свою очередь, снабжает тебя как разработчика полным анализом исходного кода программы на языках C# и Visual Basic.NET.

 

Итоги

Windows движется к кросс-платформенности, Microsoft рулит в сторону открытых исходников и универсальных приложений, компиляторы из блекбоксов превращаются в модульные структуры, выдающие понятные сведения о своей работе... ASP.NET опять же с нуля переписали. Нам определенно нравится такое будущее! Жди следующих выпусков и будь уверен, что тему кодинга под Windows 10 мы так просто не оставим!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии