Tuesday, April 22, 2014

The Present and Future of .NET

В это теме я расскажу о том, что на данный момент доступно в мире .NET и что для этого нам готовит в ближайшем будущем компания Microsoft. Анализ был сделан на основе докладов "The Next Generation of .NET for Building Applications" и "The Present and Future of .NET in a World of Devicesand Services" на конференции Build 2014. Если у вас неплохая база английского и вы уже потратили два часа своего времени для того, чтобы посмотреть, какие "вкусности" приготовила нам Microsoft, но если вы не смотрели это видео и хотите узнать, что же нового нас ждет в ближайшем будущем, добро пожаловать под кат.
Очень много из того, что предоставила сейчас Microsoft разработчикам, можно посмотреть на картинке выше. Начнем разбор этой картинки слева направо. Первое, что мы видим, – это надпись ".NET Foundation Openness", что обозначает, что лучшей документацией своей работы компания Microsoft считает открытые исходные коды своих разработок. Чтобы ознакомиться с этими проектами, мы можем посетить официальную страницу, на которой есть весь список open-source проектов: dotnetfoundation.org.  На момент написания статьи было доступно 24 проекта с открытым исходным кодом.
Одними из самых популярных проектов, исходные коды которых компания Microsoft выложила на всеобщее обозрение, есть Entity Framework, ASP.NET MVC, ASP.NET Web API, MEF, и недавно в этот список попал также .NET Compiler Platform ("Roslyn"). Компания Microsoft реализует партнерские отношения с компанией Xamarin, так как считает своим приоритетом завоевание мира разработки cross-device приложений.
Почти каждая презентация, которая проходила на Build 2014, хоть мельком да упоминала о партнерских взаимоотношениях компании Microsoft и Xamarin. Так что разработчики приложений для Windows Store Apps и приложений Windows Phone выйдут на новый уровень. Хотелось бы в это верить, по крайней мере. А само ядро .NET получило кардинальные изменения. Во-первых, с выходом проекта Roslyn, который, к тому же, сейчас является open source и вышел из стадии CTP в официальный релиз, компания Microsoft, по сути, приоткрыла занавес тайны принципов работы компилятора. Теперь писать C# Scripts, написания плагинов и extensions для студии стали проще простого. Значительным изменениям подвергся сам Roslyn с момента выпуска TCP версии в сентябре 2012. Было исправлено много недоработок, а также добавлена работа с лямбда-выражениями,  task, async/await/ dynamic и т.д., которая не была доступна в версии 2012 года.  Я считаю, что Roslyn должен упростить разработку приложений. И если вы хотите знать, как работает компилятор, – посмотрите в сторону Roslyn, он приоткроет вам эти секреты.

Next gen JIT ("RyuJIT")
Это новый этап эволюции JIT компиляторов. В чем именно заключается эта новинка,  я сейчас постараюсь рассказать в двух словах, так как для меня это стало новостью. Вам, наверное, приходилось слышать о NGen.exe для генерации образов в машинном коде, что позволяет ускорить работу управляемого кода на конкретном железе. Так вот: RyuJIT позволяет взглянуть на этот процесс немного под другим углом. Вам знакомо такое понятие, как SIMD (single instruction, multiple data  одиночный поток команд, множественный поток данных, ОКМД)? Если вы с таким никогда не сталкивались, ничего страшного. Я раньше тоже никогда об этом не слышал. Эта технология позволяет распараллеливать обработку данных в рамках одного процессора с помощью векторизации. Больше информации об этом содержит статья на habrahabr "Доступен новый JIT: теперь с поддержкой SIMD" . Я процитирую текст с habrahabr, чтобы показать всю суть нового компилятора.
Он настолько популярен, потому что, за исключением некоторых видов приложений, SIMD существенно ускоряет работу кода. Например, производительность рендеринга множества Мандельброта можно ощутимо улучшить с помощью SIMD: в 2-3 раза (если процессор поддерживает SSE2), и в 4-5 раз (если процессор поддерживает AVX).  
Как это работает, вы можете посмотреть из презентации, которая была приведена на Build 2014,  "The Next Generation of.NET for Building Applications". Пример, который был продемонстрирован на конференции, позволил значительно увеличить производительность кода.
На данный момент доступна третья редакция CTP RyuJI. Если вы хотите поработать отдельно с SIMD, то можете отдельно скачать библиотеку Microsoft.Bcl.Simd через NuGet.

Native Compilation
Теперь появилась возможность ускорить работу своих приложений для Windows Store Apps и Windows Phone 8.1 приложений. .NET Native это технология предварительной компиляции для создания и развертывания Windows Store приложений. Она собирает приложения, которые написаны на управляемом коде (C #) в машинный код. Как это выглядит, демонстрирует картинка с презентации.
В Visual Studio 2013 появилась отдельная галочка в настройках сборки, а также меню, которое позволяет включать генерацию native code с помощью С++ компилятора. (Надеюсь, я не ослышался об этой возможности с видео доклада)

Windows Convergence
Это возможность писать универсальные приложения для Windows Store Apps и Windows Phone 8.1. Это означает, что вы можете использовать код, который писали раньше для Windows Store Apps в своих приложениях на Windows Phone 8.1. Прошу читателей обратить внимание на версию 8.1, так как, судя по докладу, с более ранними версиями этот подход работать не будет. Здесь нет никакой мистики. Для того чтобы это заработало, добавлена новая опция в Visual Studio 2013, в которой мы указываем целевые платформы.
Сама возможность такой разработки стала доступной благодаря Portable Class Library (PCL). По приведенной выше ссылке мы можем посмотреть, как это работает. Список, куда мы можем добавить свою разработанную PCL, пока небольшой.
Но надеюсь что в ближайшем будущем ситуация измениться к лучшему. Сейчас же это будет только работать между последней версией приложений Windows Phone 8.1.

Cloud Services
Одним из новых нововведений, презентованных Microsoft, – это работа с Azure Mobile Service. Работа с этими сервисами осуществляется через привычный нам json. Вот какие сервисы доступны разработчикам на данный момент.
Добавлю картинку, как это сейчас работает:
Если у вас стоит задача разобраться в том, как это работает, Microsoft предоставляет множество источников с готовыми примерами, часть из которых сейчас постараюсь привести. Mobile Services – введение в мобильные сервисы Azure. Windows Azure Mobile Services – краткое руководство по использованию. Разработка, построенная вокруг библиотеки Twilio. В ваш проект будет добавлены ссылки на необходимые библиотеки.
Если вы хотите посмотреть пример работы, рекомендую посмотреть пример с презентации на channel9.
В веб изменения у нас идут в сторону улучшения и открытости исходного кода. Также изменилась программа Microsoft для MVP. Но, думаю, об этом лучше расскажет легендарный Scott Hanselman в своей презентации на Build 2014 "What's New forASP.NET and Web in Visual Studio 2013 Update 2 and Beyond". Рекомендую данную презентацию к просмотру. Хансельман, как всегда , непревзойдённый в подаче материала, а также в юморе, который присутствует в видео докладе.
Также был представлен новый фреймворк "Orleans"для Cloud Service in Azure. Представители Microsoft об этом фреймворке ничего внятно не сказали. Был только один доклад, который только частично приоткрыл занавес тайны – "Using Orleans to Build Halo 4’s Distributed Cloud Services in Azure". Пока единственная информация об использовании, которую мне удалось найти, звучит следующим образом:
Orleans has been used to build multiple production services currently running on the Microsoft Windows Azure cloud, including the back-end services for some popular games. This enabled us to validate the scalability and reliability of production applications written using Orleans, and adjust its model and implementation based on this feedback. It also enabled us to verify, at least anecdotally, that the Orleans programming model leads to significantly increased programmer productivity.
Цитата взята с Microsoft Research – Orleans. Также по приведенной ссылке вы сможете найти краткое описание данного проекта и увидеть картинку концепции использования.
На этом мои знания об этом проекте и о возможностях его использования заканчиваются. Пока единственное применение этого проекта, которое я услышал, –  это игра "Halo 4".
Подведем краткие итоги нашего экскурса в мир, который диктует компания Microsoft своим разработчикам. Если честно, то меня такая тенденция и коммуникация компании Microsoft с разработчиками очень радует. Как сказали представители Microsoft, "вы хотели открытость (openness), нативность (.NET Compilation, RyuJIT) и Cross-platform (Xamarin) – получайте".


No comments:

Post a Comment