- PVSM.RU - https://www.pvsm.ru -
6 мая было объявлено, что следующим после .NET Core 3.0 [1]релизом будет .NET 5. Это будет следующий большой релиз в семействе .NET.
В будущем останется только один .NET, и вы сможете использовать его для разработки под Windows, Linux, macOS, iOS, Android, tvOS, watchOS, WebAssembly и другие платформы.
Мы представим новые .NET API, возможности исполняющей среды и возможности языка как части .NET 5.
С момента запуска проекта .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. Проект призван улучшить .NET в нескольких ключевых аспектах:
Этот новый проект и направление полностью изменят ситуацию с .NET. Благодаря .NET 5 ваш код и файлы проектов будут выглядеть единообразно, вне зависимости от типа создаваемого приложения. Из каждого приложения у вас будет доступ к той же исполняющей среде, тем же API и возможностям языка, включая новые улучшения производительности [4], которые внедряются в corefx практически ежедневно.
Сохранилось всё, что вам нравится в .NET Core:
Нововведения:
.NET Core 3.0 будет доступен в сентябре этого года, а .NET 5 — в ноябре 2020-го. После этого мы собираемся выпускать основные версии .NET раз в год, каждый ноябрь:
Мы пропускаем четвёртую версию, потому что у пользователей может возникнуть путаница с .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) компиляции.
В рамках проекта Mono большинство усилий было нацелено на мобильный сегмент и игровые приставки. Главная возможность и результат этого проекта — AOT-компилятор для .NET, разработанный на основе компилятора LLVM [12]. AOT-компилятор Mono позволяет собирать .NET-код в единый нативный исполняемый код, который может работать на любой машине, как и код на C++. Заранее скомпилированные (AOT) приложения могут эффективно исполняться при ограниченных ресурсах (small places), и при необходимости жертвуют производительностью ради своего запуска.
Проект Blazor [13]уже использует Mono AOT и одним из первых перейдёт на .NET 5. Мы используем его как один из способов доказательства своих планов.
Есть два типа 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] рассказали о различных технических возможностях и направлении развития архитектуры.
Теперь мы двигаем проект как единая команда. С декабря мы далеко продвинулись в нескольких проектах:
Стремление к единой реализации .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
Нажмите здесь для печати.