NIXsolutions: .NET 6 Release Candidate 1 выпущена

Microsoft выпустила первую из двух версий Release Candidate .NET 6, дебют которой запланирован на ноябрь в качестве объединения всех разрозненных компонентов инструментов разработки .NET в рамках одного кроссплатформенного зонтичного предложения с открытым исходным кодом.

Эти многолетние усилия по изменению правил игры должны были завершиться в прошлом году выпуском .NET 5 (который возник из проекта .NET Core, который, в свою очередь, возник на основе .NET Framework). Однако, продолжающаяся пандемия COVID-19 и другие проблемы отложили выпуск на год.

NIXsolutions

Команды разработчиков компании в течение нескольких месяцев вводили новые функции и возможности в .NET 6 в рамках серии предварительных версий, пишет Visual Studio Magazine. В последнее время сосредоточились они только на их доработке, поэтому код уже был признан готовым для реального производственного тестирования. Таким образом, нынешнее объявление о выпуске RC 1 фокусируется не на новых, а на основных функциях .NET 6, многие из которых не будут полностью реализованы в ближайшее время. Сайт Microsoft Themes of .NET дает общее представление о том, чего нам ждать в магазине:

«В каждом релизе мы беремся за несколько проектов, на завершение которых уходит несколько лет и которые (по определению) не приносят всей своей ценности какое-то время», – сказал Ричард Ландер, менеджер программы .NET Team. «Учитывая, что эти функции еще не реализованы в полной мере, вы заметите в этом посте предвзятость по отношению к тому, что мы, будем делать с этими функциями в .NET 7 и последующих версиях».

Вот краткое изложение функций, выделенных NIXsolutions:

  • Сборка исходного кода: в GitHub сказали: «Ключевая цель сборки исходного кода – удовлетворить официальные правила упаковки широко используемых дистрибутивов Linux, таких как Fedora и Debian. Многие дистрибутивы Linux имеют аналогичные правила. Обычно эти правила характеризуются двумя основными принципами: последовательная воспроизводимость и наличие исходного кода для всего».
  • Оптимизация на основе профиля (PGO): в майской «Беседе о PGO» Microsoft сказали: «PGO улучшает производительность приложений, добавляя новую информацию в процесс оптимизации, который зависит от того, как выполняется приложение, а не только от кода”.

Ландер сказал, что разработчики могут использовать PGO для:

  1. Компиляции стартового кода в более высоком качестве.
  2. Уменьшения размера двоичного файла при компиляции малоиспользуемого кода в более низком качестве (или совсем без сборки).
  3. Перегруппировки двоичных файлов приложения таким образом, чтобы используемый при запуске код располагался рядом с началом файла.

Команда создала основу, которая может обеспечить оптимальное взаимодействие с PGO в .NET 6. «В настоящее время пока никто не использует PGO для оптимизации приложений. Это ждет нас в следующей версии .NET», – сказал Ландер.

  • Динамический PGO улучшает то, как JIT-компилятор создает и потребляет данные профиля, делая упор на «динамические» сценарии, в которых все происходит в процессе. «Dynamic PGO – это зеркальное отображение статической системы PGO», – сказал Ландер. «Там, где статический PGO интегрирован с crossgen2, динамический PGO интегрирован с RyuJIT. Если статический PGO требует отдельного учебного действия и с использованием специальных инструментов, динамический PGO является автоматическим и использует запущенное приложение для сбора соответствующих данных. Если статические данные PGO сохраняются, данные динамического PGO теряются после каждого запуска приложения. Динамическое PGO похоже на JIT трассировки”.
  • Crossgen2 заменяет crossgen: Crossgen2 был включен для всех существующих сценариев crossgen, и Microsoft также удалила старый crossgen из SDK, и использовать его теперь нельзя. «Crossgen (1 и 2) позволяет предварительно скомпилировать IL в собственный код на этапе публикации. Предварительная компиляция в первую очередь полезна для улучшения запуска. Crossgen2 – это реализация с нуля, которая уже доказала, что является превосходной платформой для инноваций в области генерации кода. Например, crossgen2 может генерировать код для более широкого набора шаблонов IL, чем crossgen1».
  • Меры безопасности: в этом релизе команда добавила предварительную поддержку двух ключевых мер безопасности, которые будут включены по умолчанию в .NET 7:
  1. CET: Технология Control-Flow Enforcement от Intel, представленная в прошлом году для защиты от распространенных вредоносных программ. Он доступен в некоторых новых процессорах Intel и AMD, и добавляет аппаратным средствам защиты от некоторых распространенных типов атак, связанных с перехватом потока управления.
  2. W^X способен блокировать базовый путь атаки, запрещая страницам памяти быть записываемыми и исполняемыми одновременно. Данное фундаментальное смягчение настолько эффективно, что Microsoft отказалась от использования более продвинутых средств защиты – их можно было обойти из-за отсутствия этой возможности. Вместо этого компания добавит другие дополнительные средства защиты, такие как CET.
  • HTTP/3 официально все еще находится на стадии черновика, однако уже широко задействуется, используя зашифрованный общий транспортный протокол QUIC, который мультиплексирует несколько потоков данных в одном соединении. В качестве официального черновика, представленного в предварительной версии .NET 6, использование QUIC решает существующие функциональные проблемы и проблемы с производительностью. «Мы включили HTTP/3 в .NET 6, чтобы вы могли начать с ним экспериментировать», – сказал Ландер. «Это предварительная версия, поэтому идет без поддержки. Могут быть недочеты, и необходимо провести более широкое тестирование с другими серверами и клиентами для обеспечения совместимости».
  • Рабочие нагрузки SDK: это новая схема для рабочих нагрузок SDK, выделенная в .NET 6 Preview 5, позволяющая Microsoft добавлять поддержку новых типов приложений без увеличения размера SDK. Он заменяет старый монолитный подход к SDK, который был обременен длительным временем сборки и большими размерами дистрибутива. «В будущих выпусках мы намерены удалить больше компонентов и сделать их необязательными, включая ASP.NET и рабочий стол Windows», – сказал Ландер. «В конце концов, можно представить SDK, содержащий только MSBuild, NuGet, языковые компиляторы и функции сбора рабочих нагрузок. Мы очень хотим обслуживать широкую экосистему .NET и предоставлять только программное обеспечение, необходимое для выполнения вашей конкретной работы. Можно убедиться , насколько эта модель лучше для сценариев CI: она позволяет инструментам dotnet приобретать индивидуальный набор компонентов для конкретного создаваемого кода».

«В .NET 6 есть много новых функций и возможностей, которые уже существуют, большинство из которых было исследовано во всех предварительных версиях, а также в следующих публикациях о .NET 6», – сказал в заключение Ландер. «В то же время приятно видеть новые функции .NET 6, которые заложат основу для будущего. Это важные функции, которые будут продвигать платформу как очевидными, так и неочевидными способами.

«Для первых нескольких выпусков команде нужно было сосредоточиться на превращении .NET Core в функциональную и целостную кроссплатформенную систему разработки с открытым исходным кодом. Затем мы сосредоточились на объединении платформы с Xamarin и Mono. Мы отходим от этого стиля проектов к более дальновидным. Приятно видеть, что платформа снова расширяется с точки зрения фундаментальных возможностей времени выполнения, и в этом направлении есть еще много чего».

Компания NIXsolutions предоставляет услуги по разработкам любого рода на базе фреймворка .NET.  Будем рады воплотить именно вашу задумку в жизнь, а если вы еще сомневаетесь в выборе, то здесь можно почитать отзывы на нашу работу.