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

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

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

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

ugw7zjo96o89vjb_yzl1usznvju.png
С момента запуска проекта .NET Core мы добавили в платформу около 50 тысяч API .NET Framework. .NET Core 3.0 с помощью .NET Framework 4.8 дополняется большинством недостающих возможностей, благодаря ему стали доступны Windows Forms, WPF и Entity Framework 6. .NET 5 перенял эстафету, в его основу легли .NET Core и всё лучшее из проекта Mono, в результате чего получилась единая платформа, которую можно использовать для всего вашего современного .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 и возможностям языка, включая новые улучшения производительности, которые внедряются в 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 раз в год, каждый ноябрь:

cp3o4yir2ib5ihl6ctyc_pnfxss.png

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

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

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


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

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

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

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

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


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

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

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

Инструменты разработчиков — ещё одна сфера, в которой 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. AOT-компилятор Mono позволяет собирать .NET-код в единый нативный исполняемый код, который может работать на любой машине, как и код на C++. Заранее скомпилированные (AOT) приложения могут эффективно исполняться при ограниченных ресурсах (small places), и при необходимости жертвуют производительностью ради своего запуска.

Проект Blazor уже использует 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. Мы удостоверимся, что CoreFX хорошо работает там, где он сегодня не используется, в основном это Xamarin клиентские Blazor-задачи.

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

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

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


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

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

  • Определили минимальный уровень, который определяет взаимодействие среды исполнения и уровня управляемого кода (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 или из командной строки.

© Habrahabr.ru