- PVSM.RU - https://www.pvsm.ru -

Представляем .NET 5

6 мая было объявлено, что следующим после .NET Core 3.0 [1]релизом будет .NET 5. Это будет следующий большой релиз в семействе .NET.

В будущем останется только один .NET, и вы сможете использовать его для разработки под Windows, Linux, macOS, iOS, Android, tvOS, watchOS, WebAssembly и другие платформы.

Мы представим новые .NET API, возможности исполняющей среды и возможности языка как части .NET 5.

Представляем .NET 5 - 1

С момента запуска проекта .NET Core мы добавили в платформу около 50 тысяч API .NET Framework. .NET Core 3.0 с помощью .NET Framework 4.8 дополняется большинством недостающих возможностей, благодаря ему стали доступны Windows Forms, WPF и Entity Framework 6. .NET 5 перенял эстафету, в его основу легли .NET Core [2]и всё лучшее из проекта Mono [3], в результате чего получилась единая платформа, которую можно использовать для всего вашего современного .NET-кода.

Мы намерены выпустить .NET 5 в ноябре 2020 года, а первая preview-версия станет доступной уже в первой половине 2020 года. Платформа станет доступна вместе с будущими обновлениями Visual Studio 2019, Visual Studio for Mac и Visual Studio Code.

.NET 5 = .NET Core vNext

.NET 5 — следующий шаг в .NET Core. Проект призван улучшить .NET в нескольких ключевых аспектах:

  • Создать единые исполняющую среду и фреймворк, которые можно использовать везде, с одинаковым поведением в runtime и опытом разработки.
  • Расширить возможности .NET за счёт лучших наработок из .NET Core, .NET Framework, Xamarin и Mono.
  • Собрать продукт из единой кодовой базы, над которой разработчики (из Microsoft и сообщества) могут вместе работать и расширять её, что позволит улучшить все возможные сценарии.

Этот новый проект и направление полностью изменят ситуацию с .NET. Благодаря .NET 5 ваш код и файлы проектов будут выглядеть единообразно, вне зависимости от типа создаваемого приложения. Из каждого приложения у вас будет доступ к той же исполняющей среде, тем же API и возможностям языка, включая новые улучшения производительности [4], которые внедряются в corefx практически ежедневно.

Сохранилось всё, что вам нравится в .NET Core:

  • Open source и ориентированность на сообщество GitHub.
  • Кроссплатформенная реализация.
  • Поддержка использования специфических платформозависимых возможностей, таких как Windows Forms и WPF под Windows, а также нативных привязок (bindings) к каждой нативной платформе из Xamarin.
  • Высокая производительность.
  • Side-by-side инсталляция.
  • Маленький размер файлов проектов (SDK-стиль).
  • Интерфейс командной строки (CLI) с широкими возможностями.
  • Интеграция с Visual Studio, Visual Studio for Mac и Visual Studio Code.

Нововведения:

  • У вас будет больше возможностей исполняющей среды (подробнее об этом ниже).
  • Возможность вызова кода Java из .NET 5 будет доступна на всех платформах.
  • Вызов кода Objective-C и Swift из .NET 5 будет поддерживаться в нескольких операционных системах.
  • CoreFX будет расширен, чтобы поддерживать статическую компиляцию .NET (ahead-of-time – AOT), для уменьшения потребления ресурсов (footprints) и поддержки большего количества операционных систем.

.NET Core 3.0 будет доступен в сентябре этого года, а .NET 5 — в ноябре 2020-го. После этого мы собираемся выпускать основные версии .NET раз в год, каждый ноябрь:

Представляем .NET 5 - 2

Мы пропускаем четвёртую версию, потому что у пользователей может возникнуть путаница с .NET Framework, который уже давно выпускается в версии 4.x. Кроме того, мы хотели ясно дать понять, что .NET 5 — это будущее платформы .NET.

Также мы решили воспользоваться случаем и упростить порядок наименований. Мы считаем, что если развиваться будет только один .NET, то нам не понадобится поясняющий термин “Core”. Короткое название проще, оно говорит о том, что возможности и поведение .NET 5 унифицированы. Если хотите, то можете и дальше пользоваться названием “.NET Core”.

Исполняющие среды

Mono [5] — первоначальная кроссплатформенная реализация .NET. Она начиналась как open-source альтернатива .NET Framework, и позднее, с ростом популярности iOS- и Android-устройств, мы переориентировали её на мобильный сегмент. Mono — это исполняющая среда, используемая как часть Xamarin.

CoreCLR [6] — это исполняющая среда, используемая как часть .NET Core. Изначально была ориентирована на поддержку облачных приложений, включая крупнейшие сервисы в Microsoft, а сегодня она также используется для настольных Windows-приложений, IoT и машинного обучения.

У исполняющих сред .NET Core и Mono много общего (все же, обе они — исполняющие среды .NET), но у каждой есть и свои уникальные возможности. Поэтому имеет смысл дать вам возможность выбирать тот опыт использования, который вам нужен. Сейчас мы работаем над тем, чтобы сделать CoreCLR и Mono подключаемыми заменами друг для друга. Процесс будет таким же простым, как переключение сборки для выбора между разными опциями исполняющей среды.

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

Высокая производительность и продуктивность

С самого начала .NET опирался на JIT-компилятор [7] для преобразования Intermediate [8] Language кода в оптимизированный машинный код. Мы создали лучшую в отрасли среду исполнения с JIT, обладающую очень высокой производительностью, в то же время позволяющую разработчикам писать код легко и быстро.

JIT-компиляторы хорошо подходят для долго работающих облаков и клиентских сценариев. Они способны генерировать код, учитывающий особенности аппаратной конфигурации, в том числе специфические процессорные инструкции. Также JIT может заново генерировать методы во время исполнения [9], эта методика позволяет компилировать с высокой скоростью, в то же время создавая тонко настроенную версию кода, если какие-то методы используются часто.

Наши усилия по ускорению работы ASP.NET Core, проявившиеся в результатах бенчмарков TechEmpower [10], являются хорошим примером возможностей JIT и являются нашим вкладом в CoreCLR. Мы постарались подготовить .NET Core для использования контейнеров [11], это демонстрирует возможности исполняющей среды динамически адаптироваться к ограниченным средам.

Инструменты разработчиков — ещё одна сфера, в которой JIT прекрасно себя зарекомендовала, например, dotnet watch или режим “edit and continue”. Для работы инструментов часто требуется многократно компилировать и загружать код в одном и том же процессе без перезапуска, и делать это нужно очень быстро.

Разработчики, использующие .NET Core или .NET Framework, в первую очередь полагаются на JIT. Так что им это должно казаться привычным.

Стандартным подходом для большинства рабочих нагрузок .NET 5 будет использование CoreCLR исполняющей среды с JIT. Два важных исключения — iOS и клиентская Blazor (WebAssembly), они требуют нативной предварительной (ahead-of-time) компиляции.

Быстрый запуск, низкое потребление ресурсов процессора (footprint) и уменьшение потребления памяти

В рамках проекта Mono большинство усилий было нацелено на мобильный сегмент и игровые приставки. Главная возможность и результат этого проекта — AOT-компилятор для .NET, разработанный на основе компилятора LLVM [12]. AOT-компилятор Mono позволяет собирать .NET-код в единый нативный исполняемый код, который может работать на любой машине, как и код на C++. Заранее скомпилированные (AOT) приложения могут эффективно исполняться при ограниченных ресурсах (small places), и при необходимости жертвуют производительностью ради своего запуска.

Проект Blazor [13]уже использует Mono AOT и одним из первых перейдёт на .NET 5. Мы используем его как один из способов доказательства своих планов.

Есть два типа AOT-решений:

  • Требующие полной AOT-компиляции.
  • Решения, большая часть кода которых AOT-скомпилирована, но всё же позволяющие использовать JIT или интерпретатор для таких паттернов кода, которые не дружат с AOT (например, дженерики).

Mono AOT поддерживает оба типа. AOT первого типа нужны для iOS и некоторых игровых приставок, в основном это обусловлено требованиями к безопасности. Решения второго типа более предпочтительны, поскольку они обладают всеми преимуществами AOT без его недостатков.

.NET Native — это AOT-компилятор, который мы используем для Windows UWP-приложений. Он относится к первому типу AOT-решений. В этой конкретной реализации мы ограничили .NET API и доступные вам возможности. Это помогло нам понять, что AOT-решения должны покрывать полный спектр .NET API и паттернов.

AOT-компиляция останется необходимой для iOS, WebAssembly и некоторых игровых приставок. Мы сделаем её опциональной для приложений, которые встраиваются в технику (appliance-like), для которых требуется быстрый запуск и/или низкое потребление ресурсов процессора.

Основы и схожие требования

Для нас критически важно продолжать развиваться как платформа со средствами управления запуском, производительностью, потреблением памяти, надёжностью и диагностики. В то же время целесообразно сосредоточить наши усилия. Мы станем больше работать над повышением производительности и надежности в CoreCLR, а также над улучшением запуска и снижением размера файлов компиляторе Mono AOT. Нам это кажется хорошим сочетанием. Производительность и надежность идут рука об руку, как и скорость запуска со снижением размера файлов.

В улучшение одних характеристик целесообразно вкладывать разные ресурсы, а в улучшение других — нет.

Возможности диагностики должны быть одинаковыми в рамках всего .NET 5, это касается и функциональности, и производительности. Также важно поддерживать одни и те же процессоры и ОС (за исключением iOS и WebAssembly).

Мы продолжим оптимизировать .NET 5 под все виды рабочих нагрузок и сценариев, для которых это имеет смысл. Наибольший акцент будет сделан на оптимизациях, особенно в тех случаях, когда разные нагрузки налагают схожие требования.

Все .NET 5-приложения будут использовать фреймворк CoreFX [14]. Мы удостоверимся, что CoreFX хорошо работает там, где он сегодня не используется, в основном это Xamarin клиентские Blazor-задачи.

Все .NET 5-приложения можно будет собирать с помощью .NET CLI [15], так что во всех проектах у вас будет единый инструментарий на основе командной строки.

C# будет развиваться вместе с .NET 5. Разработчики, пишущие .NET 5-приложения, получат доступ к самой свежей версии C# и его свойствам.

Рождение проекта

Как техническая команда мы собрались в декабре 2018-го в Бостоне, чтобы начать данный проект. Ведущие архитекторы из команды .NET (Mono/Xamarin и.NET Core) и Unity [16] рассказали о различных технических возможностях и направлении развития архитектуры.

Теперь мы двигаем проект как единая команда. С декабря мы далеко продвинулись в нескольких проектах:

  • Определили минимальный уровень, который определяет взаимодействие среды исполнения и уровня управляемого кода (managed code layer), с целью сделать >99 % CoreFX общим кодом.
  • Теперь MonoVM может использовать CoreFX и его библиотеки классов.
  • Прогнали на MonoVM все тесты CoreFX, используя его реализацию.
  • Запустили приложения ASP.NET Core 3.0 на MonoVM.
  • Запустили MonoDevelop и Visual Studio for Mac на CoreCLR.

Стремление к единой реализации .NET поднимает важные вопросы. Каким будет конечный фреймворк? Останутся ли прежними правила совместимости с пакетами NuGet? Какую нагрузку будет поддерживать из коробки .NET 5 SDK? Как нужно писать код для специфической архитектуры? Нужен ли нам .NET Standard? Сейчас мы работаем над всем этим и скоро сможем поделиться с вами проектной документацией, чтобы вы могли ее прочитать и дать отзывы.

Заключение

Проект .NET 5 — важное и вдохновляющее новое направление для .NET. Вы увидите, что .NET станет проще, но при этом станет использоваться шире, обретёт более широкие возможности. Все новые возможности разработки станут частью .NET 5, в том числе новые версии C#.

Впереди у нас светлое будущее, в котором вы сможете использовать те же .NET API и языки для широкого спектра приложений, операционных систем и архитектур процессоров. Вы сможете легко менять конфигурацию сборки, собирая приложения как вам удобно — в Visual Studio, Visual Studio for Mac, Visual Studio Code, Azure DevOps или из командной строки.

Автор: Сергей

Источник [17]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/news/317115

Ссылки в тексте:

[1] .NET Core 3.0 : https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/

[2] .NET Core : https://docs.microsoft.com/en-us/dotnet/core/

[3] Mono: https://www.mono-project.com/

[4] лучшения производительности: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-2-1/

[5] Mono: https://github.com/mono/mono

[6] CoreCLR: https://github.com/dotnet/coreclr

[7] JIT-компилятор: https://ru.wikipedia.org/wiki/JIT-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F

[8] Intermediate: https://ru.wikipedia.org/wiki/Common_Intermediate_Language

[9] аново генерировать методы во время исполнения: https://devblogs.microsoft.com/dotnet/tiered-compilation-preview-in-net-core-2-1/

[10] TechEmpower: https://www.techempower.com/benchmarks/

[11] .NET Core для использования контейнеров: https://devblogs.microsoft.com/dotnet/using-net-and-docker-together-dockercon-2019-update/

[12] LLVM: http://llvm.org/

[13] Blazor : https://blazor.net

[14] CoreFX: https://github.com/dotnet/corefx

[15] .NET CLI: https://github.com/dotnet/cli

[16] Unity: https://unity.com/

[17] Источник: https://habr.com/ru/post/451136/?utm_source=habrahabr&utm_medium=rss&utm_campaign=451136