Платформа .NET сегодня иpublic.jugru.org/dotnext/2015/piter/zdebsky.pdfASP.NET 5...

Preview:

Citation preview

Ромуальд Здебский Руководитель направления по мобильным играм, Microsoft rzdebski@microsoft.com @zdebskiy

Платформа .NET сегодня и завтра

Для пользователей легче всегда быть с актуальной версией

Общее ядрои платформа приложений

Объединение Windows почти закончено

Windows Phone 7.5

Windows Phone 8Windows Phone 8.1

Windows 8

Xbox One

Windows on Devices

Xbox 360

Windows 8.1

Windows 10

Объединение ядер ОС

Объединение модели

приложений

Phone Small Tablet

2-in-1s (Tablet or Laptop)

Desktops & All-in-Ones

Phablet LargeTablet

Classic Laptop

Xbox

IoT

Microsoft Surface Hub

Windows 10 для широкого спектра устройств… Devices Platform

HoloLens

…с единой платформой разработки для каждого устройства

Windows Universal Platform

NaturalUser Inputs

Monetization+ Distribution

Adaptive UI + Controls

Full Support for Existing Code

Live Tiles +Notifications

IoT + Wearables

Surface Hub

Xbox

DesktopPhone + Tablet

Devices Platform

Apps

XAML/DirectXC

C++C#

Visual Basic

HTML

JavaScript

Windows Runtime (WinRT)

Универсальные проекты

One project type to rule them all…

Языковые проекции

Объекты (или компоненты) Windows Runtime

Написаны на C++, C#, VB Windows Metadata

C++ AppПро

еки

ця

CLR

C#/VB AppПро

екц

ия

HTML App

Chakra

Про

екц

ия

Object

IInspectableIUnknown

.NET Framework

активных инсталляций

1.8млрд профессиональных

разработчиков.NET6M

От встраиваемых систем 64k, ПК, планшетов, смартфонов до облачных серверов

"DotNet" by Soumyasch - Own work. Licensed under CC BY-SA 3.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:DotNet.svg#/media/File:DotNet.svg

Будущее WPF

Зоны развитияPerformance: For data centric applications, the platform needs to scale to enable the display and manipulation of hundreds and thousands of rows of data. Some key scenarios we are looking to optimize in this context are application startup, scrolling and virtualization performance of ItemsControls.

DirectX interoperability: The primary scenario of interest here is to make it seamless for WPF applications to interoperate with newer versions of DirectX. An example would be native support for DX11 in D3Dimage

Supporting modern hardware: Technologies like touch and high density displays are ubiquitous on modern devices. Making it for existing easy for WPF applications to adapt to these new hardware capabilities is a high priority for us

Tooling: We will continue to co-evolve the tooling for WPF when appropriate, alongside new platforms like .NET/WinRT

http://blogs.msdn.com/b/dotnet/archive/2014/11/12/the-roadmap-for-wpf.aspx

Visual Diagnostics (Inspect & Modify Element Properties While Debugging)

Live Visual Tree

Live Property Explorer

Timeline Tool (WPF Performance Diagnostics)

Blend Improvements

Improved version control support

XAML IntelliSense

Basic debugging capabilities

Что мы слышим от разработчиков…

“Цикл разработки ускоряется”

“Нам нужно разрабатывать кросс-платформенные приложения”

“Open Source – обогащает сообщество и саму платформу”

“…но необходимо поддерживать существующие приложения”

Баланс между инновациями и совместимостью

Модульная структура обновлений

Вовлечение сообщества в развитие платформы

Инновации в .NET

Гибкость / быстрые обновления

Открытость

Новый подход к .NET

OSS

.NET

.NET 2015

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

.NET Core 5 Libraries

.NET Framework 4.6 Libraries

NuGet packagesОбщий слой

.NET Framework 4.6 .NET Core 5

Windows Desktop.NET

История .NET “вертикалей”

App Model

Framework

Runtime

Windows Store Windows Phone ASP.NET 4 ASP.NET 5

App Model

Framework

Runtime

Runtime

App Model

Framework

Runtime

App Model

Framework

Runtime

App

Model

Framework

Что такое .NET Core?

ASP.NET 5 App Model

Universal Windows Apps Model

Любая другая модель приложений

.NET Core Unified BCL (Base Class

Library)

Runtime Adaption Layer.NET Native И Runtime

Core CLR Other Runtime

.NET Core

NuGet используется повсеместно для .NET Core

ASP.NET 5

.NET Framework 4.6 stack and libs .NET Core 5 stack and libs

Универсальный framework для MVC, Web API и SignalR

Полный .NET Framework для любых сценариев и полной поддержкой существующих библиотек

Компактный runtime, оптимизированный для серверных и облачных задач

Какая роль ASP.NET в общей истории?

ASP.NET 5.0Оптимизирован для облака• Компактнее, быстрее, проще • Полностью спроектирован для облака и

кросс-платформенных сценариев

Модульный и открытый• Более гибкий с open source и

модульной реализацией

Улучшенные инструменты и библиотеки• Возможность быстрее получать

результат

.NET 2015 Web и сервисы

Будущее .NET

.NET Native (для Windows 10) ▪ Оптимизировано для устройств ▪ Компиляция в машинный код ▪ Компактность, разные версии ▪ Для разных устройств

ASP.NET Core 5 ▪ Оптимизировано для облака ▪ Высокая производительность ▪ Компактность, разные версии ▪ Кросс-платформенность

Windows Store, WPF, Windows Forms, Windows Phone, Console apps.

ASP.NET 5 and ASP.NET 4.6 (Web Forms, MVC, Web Pages, Web API, SignalR) WCF

Клиент

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

BCL и PCL Entity Framework

БиблиотекиОбщий слой

OSS

.NET Framework 4.6

.NET Core 5

.NET 2015 Web и сервисы

Будущее .NET

.NET Native (для Windows 10) ▪ Оптимизировано для устройств ▪ Компиляция в машинный код ▪ Компактность, разные версии ▪ Для разных устройств

ASP.NET Core 5 ▪ Оптимизировано для облака ▪ Высокая производительность ▪ Компактность, разные версии ▪ Кросс-платформенность

Windows Store, WPF, Windows Forms, Windows Phone, Console apps.

ASP.NET 5 and ASP.NET 4.6 (Web Forms, MVC, Web Pages, Web API, SignalR) WCF

Клиент

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

BCL и PCL Entity Framework

БиблиотекиОбщий слой

OSS

.NET Framework 4.6

.NET Core 5

.NET 2015

.NET Framework vs .NET Core

Common

ASP.NET 5 ASP.NET 4.6 WPF Windows Forms

.NET Framework 4.6

.NET Core 5ASP.NET Core 5 .NET Native (для Windows 10) Windows desktop Windows mobile devices Windows embedded devices ASP.NET Core 5 для Mac и Linux

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

BCL и PCL Entity Framework

Библиотеки

.NET 2015 Web и сервисы

Будущее .NET

.NET Native (для Windows 10) ▪ Оптимизировано для устройств ▪ Компиляция в машинный код ▪ Компактность, разные версии ▪ Для разных устройств

ASP.NET Core 5 ▪ Оптимизировано для облака ▪ Высокая производительность ▪ Компактность, разные версии ▪ Кросс-платформенность

Windows Store, WPF, Windows Forms, Windows Phone, Console apps.

ASP.NET 5 and ASP.NET 4.6 (Web Forms, MVC, Web Pages, Web API, SignalR) WCF

Клиент

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

BCL и PCL Entity Framework

БиблиотекиОбщий слой

OSS

.NET Framework 4.6

.NET Core 5

.NET Native.NET Native Desktop CLR

Visual Studio Одинаковая комфортная разработка в Visual Studio на обоих платформах

Библиотеки, Interop и сериализация

Библиотеки оптимизированы для современных профилей устройств и облака. Генерация кода для сериализации во время компиляции.

Библиотеки работают на широком диапазоне устройств и в облаке. Сериализация и интероперабельность поддерживаются средой выполнения.

Компоновка (linking)

Статическая компоновка требуемых библиотек, позволяет улучшить производительность и совместимость

Не предназначена для статической компоновки. Библиотеки разделяются всеми приложениями.

Оптимизиру-ющая компиляция

Используется оптимизирующий backend компилятора C++

JIT-компилятор должен работать быстро, нет возможности производить сложную оптимизацию

Среда выполнения (runtime)

Компактная нативная среда выполнения со сборкой мусора и безопасностью памяти.

Богатая среда выполнения, поддерживающая большое количество современных и устаревших сценариев.

Зачем нужен .NET Native?Поддержка мобильных клиентов • .NET Framework поддерживает широкий спектр устройств с богатой

функциональностью • 1.8 миллиардов компьютеров используют Desktop .NET, поставляется

вместе с ОС • .NET должен эффективно работать на смартфонах и менее

производительных устройствах. Обновления библиотек не нарушают работу приложений • .NET Native обеспечивает статическую сборку большинства библиотек • Можно использовать обновления библиотек в своем ритме • Инновации в библиотеках осуществляются синхронно для всех устройств • Windows Update не повлияет на работу вашего приложения

Как работает .NET Native

Source Code App.exe (MSIL)

App.exe (machine code)

Language Compiler

App.dll (machine code)

.NET Native (ILC.exe)

Как использовать?

Результаты

.NET Native

RyuJIT vs .NET NativeRyuJIT – новое поколение JIT-компиляторов • Разные JIT-компиляторы в .NET x64 и x86 • X86 – для клиента, x64 – для облака • Более длительное время запуска в случае x64, качественнее оптимизация на основе

C++-компилятора

• RyuJIT основан на ядре x86 и обеспечивает быстрый старт для клиентских устройств

• Текущая версия – только x64, в будущем станет One True JIT Compiler for the .NET Platform

Кодогенерация Свой JIT-компилятор для каждой архитектуры

64-bit JIT концентрируется на качестве оптимизации для серверных сценариев 32-bit JITs концентрируется на скорости компиляции для приложений Два кодогенератора

NGen работает на клиенте, при установке или перед запуском Triton работает в облаке в Windows Phone 8 Store, приложения связываются с библиотеками при установке

Одна среда выполнения для всех сценариев Desktop CLR для клиента и сервера (разные режимы сборки мусора) CoreCLR для мобильных клиентов и целевых серверных задач (тот же исходный код)

Выполнение кода в CLR 4.5

Выполнение кода в .NET 2015

Удобство C# с производительностью C++

C# с поддержкой динамических сценариев

RyuJIT & CLR VM.NET Native

Сегодня: Одна среда выполнения для всех сценариев Завтра: Улучшенная среда выполнения с различными стратегиями выполнения для экстремальных случаев.

.NET 2015 Web и сервисы

Будущее .NET

.NET Native (для Windows 10) ▪ Оптимизировано для устройств ▪ Компиляция в машинный код ▪ Компактность, разные версии ▪ Для разных устройств

ASP.NET Core 5 ▪ Оптимизировано для облака ▪ Высокая производительность ▪ Компактность, разные версии ▪ Кросс-платформенность

Windows Store, WPF, Windows Forms, Windows Phone, Console apps.

ASP.NET 5 and ASP.NET 4.6 (Web Forms, MVC, Web Pages, Web API, SignalR) WCF

Клиент

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

BCL и PCL Entity Framework

БиблиотекиОбщий слой

OSS

.NET Framework 4.6

.NET Core 5

.NET - Open SourceВсе проекты обновлены до MIT License

Проекты • ASP.NET 5 • Entity Framework • .NET Core 5 • .NET Compiler Platform • + проекты сообщества

Как участвовать • .NET Foundation • GitHub

Кросс-платформенная реализация .NET Core

.NET Core будет реализован на различных платформах

Поддержка Linux и Mac от Microsoft c Mono

Поддержка Linux в Visual Studio (напр., отладка, Docker)

Интеграция с Sublime через Kulture

.NET 2015 Web и сервисы

Будущее .NET

.NET Native (для Windows 10) ▪ Оптимизировано для устройств ▪ Компиляция в машинный код ▪ Компактность, разные версии ▪ Для разных устройств

ASP.NET Core 5 ▪ Оптимизировано для облака ▪ Высокая производительность ▪ Компактность, разные версии ▪ Кросс-платформенность

Windows Store, WPF, Windows Forms, Windows Phone, Console apps.

ASP.NET 5 and ASP.NET 4.6 (Web Forms, MVC, Web Pages, Web API, SignalR) WCF

Клиент

След.поколение JIT (“RyuJIT”) SIMD (параллелизм)

Runtime Компиляторы.NET Compiler Platform (“Roslyn”) Инновации в языках

BCL и PCL Entity Framework

БиблиотекиОбщий слой

OSS

.NET Framework 4.6

.NET Core 5

.NET 2015

Языки и IDE

Расширения VS

Open SourceOSS

API

C#

VB

Следующее поколение компиляторов .NET

Новое открытое API Богатые инструменты в IDE (рефакторинг) Анализ / диагностика кода C#/VB (для F# - Folsyn) Компиляторы с открытым исходным кодом

.NET Compiler Platform (“Roslyn”)

Философия версии 6.0:

Нет драматических изменений Много небольших улучшений Упрощение кода

Что нового в C# 6.0

Автоматические свойства «только для чтения»

public class Point { public int X { get; set; } public int Y { get; set; }  public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Автоматические свойства «только для чтения»

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Автоматические свойства «только для чтения»

Инициализаторы свойств

public class Point { public int X { get; } = 5; public int Y { get; } = 7; public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Статические классы и usingusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Статические классы и usingusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Статические классы и usingusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Интерполяция строкusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Sqrt(X * X + Y * Y); } } public override string ToString()

{ return String.Format("({0}, {1})", X, Y); } }

Интерполяция строкusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Sqrt(X * X + Y * Y); } } public override string ToString()

{ return "(\{X}, \{Y})"; } }

Методы-выраженияusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Sqrt(X * X + Y * Y); } } public override string ToString()

{ return "(\{X}, \{Y})"; } }

Методы-выраженияusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Sqrt(X * X + Y * Y); } } public override string ToString() => "(\{X}, \{Y})";

}

Свойства-выраженияusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist

{ get { return Sqrt(X * X + Y * Y); } } public override string ToString() => "(\{X}, \{Y})";

}

Свойства-выраженияusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist => Sqrt(X * X + Y * Y);

public override string ToString() => "(\{X}, \{Y})";

}

Свойства-выраженияusing System.Math;

public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; }

public double Dist => Sqrt(X * X + Y * Y);

public override string ToString() => "(\{X}, \{Y})";

}

Индексные инициализаторыpublic class Point { public int X { get; } public int Y { get; } …

public JObject ToJson()

{

var result = new JObject();

result["x"] = X;

result["y"] = Y;

return result;

} }

Индексные инициализаторыpublic class Point { public int X { get; } public int Y { get; } …

public JObject ToJson()

{

var result = new JObject() { ["x"] = X, ["y"] = Y };

return result;

} }

Индексные инициализаторыpublic class Point { public int X { get; } public int Y { get; } …

public JObject ToJson()

{

return new JObject() { ["x"] = X, ["y"] = Y };

} }

Индексные инициализаторыpublic class Point { public int X { get; } public int Y { get; } …

public JObject ToJson() =>

new JObject() { ["x"] = X, ["y"] = Y }; }

Борьба с Null Reference Exceptionpublic static Point FromJson(JObject json)

{

if (json != null && json["x"] != null &&

json["x"].Type == JTokenType.Integer &&

json["y"] != null &&

json["y"].Type == JTokenType.Integer)

{

return new Point((int)json["x"], (int)json["y"]);

return null;

}

Условные null-операторыpublic static Point FromJson(JObject json)

{

if (json != null && json["x"]?.Type == JTokenType.Integer &&

json["y"]?.Type == JTokenType.Integer)

{

return new Point((int)json["x"], (int)json["y"]);

return null;

}

Условные null-операторыpublic static Point FromJson(JObject json)

{

if (json?["x"]?.Type == JTokenType.Integer &&

json?["y"]?.Type == JTokenType.Integer)

{

return new Point((int)json["x"], (int)json["y"]);

return null;

}

Фильтры исключенийtry

{

… 

}

catch (ConfigurationException e)

{

}

finally

{

}

Фильтры исключенийtry

{

… 

}

catch (ConfigurationException e) if (e.IsSevere)

{

}

finally

{

}

Await в catch и finallytry

{

… 

}

catch (ConfigurationException e) if (e.IsSevere)

{

await LogAsync(e);

}

finally

{

await CloseAsync();

}

Функциональное программирование на платформе .NET

Много улучшений в функциональном стиле в C# Язык преимущественно-функционального программирования F#

Что включает в себя .NET 2015

C# 6 Roslyn .NET Framework 4.6 ASP.NET 5 .NET Native .NET Core 5

Кросс-платформенный .NET

Кросс-платформенный .NET

Mono

Кросс-платформенный .NET Core Мобильная разработка и партнерство .NET/Xamarin

.NET Xamarin

Unity

Сервисы и Веб-приложения Мобильные приложения

Windows Linux Mac OS X

.NET Core

ASP.NET 5

.NET и XamarinОбщая логика между платформами• Нативные приложения Windows, iOS и

Android на .NET

• Продуктивная и мощная платформа для создания нативных приложений

• Максимизация переиспользования кода с Universal Projects & Portable Class Libraries

100% APIs доступно• Все, что вы можете сделать в xCode или ADT

вы можете сделать в Visual Studio

z

C# + XIB C# + AXML C# + XAML

Нативный UI Нативный UI Нативный UI

Общая клиентская логика на C#

Xamarin .NET Core

Phone Small Tablet

2-in-1s (Tablet or Laptop)

Desktops & All-in-Ones

Phablet LargeTablet

Classic Laptop

Xbox

IoT

Microsoft Surface Hub

Windows 10 для широкого спектра устройств… Devices Platform

HoloLens

MICROSOFT CONFIDENTIAL

MICROSOFT CONFIDENTIAL

РесурсыПолезные ссылки http://blogs.msdn.com/b/dotnet/archive/2014/11/12/announcing-net-2015-preview-a-new-era-for-net.aspx

http://www.buildwindows.com

Ромуальд Здебский Руководитель направления по мобильным играм, Microsoft

Платформа .NET сегодня и завтра

©2015 Microsoft Corporation. All rights reserved. Microsoft, Windows, Office, Azure, System Center, Dynamics and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Recommended