Firma Microsoft wprowadziła znaczącą wersję otwartej platformy .NET 7, stworzonej dzięki unifikacji produktów .NET Framework, .NET Core i Mono. Na podstawie .NET 7 można tworzyć aplikacje wieloplatformowe dla przeglądarek, systemów chmurowych, desktopów, urządzeń IoT i platform mobilnych, używając jednolitych bibliotek i wspólnego procesu budowania, który nie zależy od rodzaju aplikacji. Pakiety .NET SDK 7, .NET Runtime 7 i ASP.NET Core Runtime 7 są dostępne dla systemów Linux, macOS i Windows. .NET Desktop Runtime 6 jest dostarczany tylko dla Windows. Związane z projektem materiały są udostępniane na licencji MIT. Wsparcie dla wersji .NET 7 będzie realizowane przez 18 miesięcy do 14 maja 2024 roku.
W skład .NET 7 wchodzi runtime CoreCLR z kompilatorem JIT RyuJIT, biblioteki standardowe, biblioteki CoreFX, WPF, Windows Forms, WinUI, Entity Framework, interfejs wiersza poleceń dotnet, a także narzędzia do tworzenia mikrousług, bibliotek, aplikacji serwerowych, graficznych i konsolowych. Oddzielnie opublikowano stos do tworzenia aplikacji webowych ASP.NET Core 7.0, warstwę ORM Entity Framework Core 7.0 (sterowniki są dostępne, w tym dla SQLite i PostgreSQL), bibliotekę WPF 7 (Windows Presentation Foundation), framework Windows Forms 7 do tworzenia GUI, platformę Orleans 7 do realizacji aplikacji Cloud Native, framework MAUI 7 do wieloplatformowych interfejsów użytkownika, a także wydania języków C# 11 i F# 7. Wsparcie dla .NET 7.0 i C# 11 jest dostępne w darmowym edytorze kodu Visual Studio Code.
Cechy nowego wydania:
- Przeprowadzono unifikację podstawowej biblioteki klas (BCL, Base Class Library) do użytku w różnych typach aplikacji, w tym programach dla systemów desktopowych, aplikacjach webowych, platformach chmurowych, aplikacjach mobilnych, grach, programach wbudowanych oraz systemach uczenia maszynowego. Do tworzenia różnych typów aplikacji można wykorzystać jeden wspólny SDK, Runtime i zestaw bibliotek.
- Zapewniono możliwość powiązania aplikacji z API przypisanym do wydania .NET 7 poprzez zdefiniowanie docelowej platformy „net7.0”, na przykład „net7.0”. Aby powiązać się ze specyficznymi dla jakiejś platformy API, można szczegółowo określić typ platformy, na przykład wskazując „net7.0-android.”
- Zdecydowanie poprawiono wsparcie dla architektury ARM64 oraz kontynuowano prace nad osiągnięciem parytetu w wydajności aplikacji .NET na architekturach x86 i ARM64. W runtime zwiększono efektywność wykorzystania pamięci cache trzeciego poziomu w systemach ARM64. Wykorzystano instrukcje LSE do rozgraniczenia dostępu do pamięci z równoległych wątków, co doprowadziło do zmniejszenia opóźnień o 45%. W bibliotece dodano obsługę typów wektorowych Vector64, Vector128 i Vector256, a także na podstawie instrukcji wektorowych przepisano funkcje EncodeToUtf8 i DecodeFromUtf8, co zapewniło wzrost ich wydajności do 60% (dla funkcji NarrowUtf16ToAscii i GetIndexOfFirstNonAsciiChar wzrost wydajności osiąga 35%). Ogólnie, prędkość przejścia testów na platformie ARM64 wzrosła o 10-60%.

- Poprawiono wsparcie dla platformy Linux, w tym do standardowych repozytoriów Ubuntu 22.04 dodano pakiety .NET 6 oraz dostarczono zoptymalizowany, kompaktowy i gotowy do użycia obraz dockerowy do szybkiego wdrożenia kontenerów z aplikacjami opartymi na .NET.
- Dodano wsparcie dla 64-bitowej architektury IBM Power (ppc64le).
- Zaprezentowano narzędzie .NET Upgrade Assistant w celu uproszczenia migracji starych aplikacji do gałęzi .NET 6 lub .NET 7. W nowej wersji rozszerzono wsparcie dla migracji aplikacji z ASP.NET do ASP.NET Core, dodano analizatory i poprawiacze kodu dla WinForms, WPF oraz bibliotek klas, zrealizowano wsparcie dla analizy plików wykonywalnych, dodano wsparcie dla platformy UWP (Universal Windows Platform).
- Rozszerzono możliwości tworzenia aplikacji dla systemów chmurowych (cloud-native) oraz platform PaaS (platforma jako usługa). Umożliwiono tworzenie aplikacji zapakowanych w izolowane kontenery za pomocą polecenia „dotnet publish”.
- Rozszerzono narzędzia do monitorowania stanu aplikacji oraz zbierania metryk dotyczących ich działania. Dodano nowe zdarzenia i metody do analizy aktywności i wydajności aplikacji.
- W języku C# 11 dodano wsparcie dla surowych literałów tekstowych, które mogą zawierać znaki specjalne bez konieczności ich eskalacji (takie literały są wyróżniane trzema cudzysłowami). Zaproponowano uogólnione interfejsy (generic) dla funkcji matematycznych oraz wprowadzono możliwość definiowania statycznych elementów w wirtualnych interfejsach, co pozwoliło na zastosowanie metod programowania ogólnego do przeprowadzania operacji matematycznych bez dokładnych informacji o typie wartości.
- Rozszerzono możliwości standardowej biblioteki. Dodano API System.Formats.Tar do pracy z archiwami w formacie Tar. W funkcjach związanych z czasem (TimeStamp, DateTime itp.) dodano wsparcie dla mikrosekund i nanosekund. W System.Text.Json wdrożono możliwość zarządzania serializacją i deserializacją typów .NET.
- W interfejsie wiersza poleceń "dotnet new" dodano wsparcie dla automatycznego uzupełniania szablonów typowych projektów przez naciśnięcie klawisza Tab.
- W .NET SDK wprowadzono możliwość ograniczenia stosowania dostarczanych szablonów projektów, na przykład można określić, w jakich systemach operacyjnych dany szablon jest dozwolony.
- W NuGet dodano tryb centralnego zarządzania pakietami, umożliwiający zarządzanie zależnościami jednocześnie dla kilku projektów.
- Zwiększono wydajność kompilatora JIT. Dodano wsparcie dla mechanizmu OSR (On Stack Replacement) do modyfikacji kodu już wykonywanych metod, co pozwala na wprowadzenie optymalizacji w metodach o dużym czasie wykonywania, bez czekania na zakończenie bieżącego wywołania (w teście TechEmpower zauważono wzrost wydajności przetwarzania pierwszych zapytań o 10-30%).
- Zwiększono efektywność optymalizacji opartych na wynikach profilowania kodu (PGO — Profile-guided optimization), co pozwala na uwzględnienie cech definiowanych w czasie wykonywania programu.
- Dodano wsparcie dla kompilacji do samodzielnych plików wykonywalnych (Native AOT), w których cały projekt jest początkowo kompilowany do kodu maszynowego docelowej platformy bez użycia kodu pośredniego i bez zastosowania JIT.
Źródło: opennet.ru

