Co nowego w Microsoft .NET 5

Drugi kandydat do wydania .NET 5 firmy Microsoft pojawił się 13 października, przybliżając fuzję .NET Framework i .NET Core o jeden krok bliżej do zakończenia. Nowa ujednolicona platforma .NET będzie ogólnie dostępna 10 listopada 2020 r. 

Microsoft opisuje Release Candidate 2 jako prawie ostateczne wydanie i ostatnie z dwóch RC. Wstępna wersja RC została opublikowana 13 września. Kandydat do wydania .NET 5.0 można pobrać z witryny dotnet.microsoft.com.

Wysokopoziomowe cele dla .NET 5 obejmują zapewnienie ujednoliconego środowiska .NET SDK z pojedynczą biblioteką BCL (biblioteką klas bazowych) we wszystkich aplikacjach .NET 5 oraz z obsługą zarówno aplikacji natywnych, jak i aplikacji internetowych w wielu systemach operacyjnych. Pojedynczy projekt aplikacji natywnej .NET 5 obsługiwałby obiekty docelowe, takie jak Windows, Microsoft Duo (Android) i Apple iOS, przy użyciu natywnych formantów na tych platformach.

Dodatkowe cele .NET 5 obejmują obsługę tworzenia wysokowydajnych aplikacji w chmurze, szybsze algorytmy w BCL, lepszą obsługę kontenerów w środowisku wykonawczym i obsługę protokołu HTTP3. .NET 5.0 obejmuje obsługę formatu binarnego WebAssembly za pośrednictwem środowiska wykonawczego Mono i bibliotek .NET. Przedstawiono również zestaw adnotacji typu odwołania dopuszczającego wartość null.

NET 5 obiecuje również umożliwić programistom automatyczne znajdowanie ukrytych błędów w kodzie. Inne nowe funkcje obejmują Halftyp, binarną zmiennoprzecinkową zajmującą 16 bitów oraz przycinanie zespołu, które przycina nieużywane zespoły w celu zmniejszenia rozmiaru aplikacji. Podświetlane jest również przycinanie niestandardowe. Nowe dopasowywanie wzorców w C # 9 obejmuje relacyjne, logiczne i proste wzorce typów. Opcja wdrażania ClickOnce jest teraz obsługiwana dla aplikacji .NET 5,0 systemu Windows i aplikacji .NET Core 3.1.

Nowa platforma .NET obiecuje również poprawę wydajności. W biuletynie dotyczącym wersji zapoznawczej 7, który pojawił się 21 lipca, potwierdzono około 250 żądań ściągnięcia zorientowanych na wydajność w .NET 5 i zauważono, że czeka nas miła niespodzianka dla tych, którzy śledzą wydajność platformy .NET Core. 

Inne dodatki i ulepszenia odnotowane w biuletynie .NET 5 Preview 7:

  • Nowy interfejs API JSON System.text.json zapewnia możliwość ignorowania wartości domyślnych właściwości typu wartości podczas serializacji, co jest przydatne w celu zmniejszenia kosztów serializacji i połączeń. To przełomowa zmiana. W przypadku System.text.json dodano również możliwość obsługi odwołań cyklicznych podczas serializacji, przy czym kształt interfejsu API powinien być teraz ostateczny.
  • Wyrzucanie elementów bezużytecznych ujawnia teraz szczegółowe dane dotyczące najnowszej kolekcji przy użyciu GetGCMemoryInfometody, która zwraca GCMemoryInfostrukturę. GCMemoryInfopodaje informacje o pamięci maszyny i sterty oraz o najnowszej kolekcji lub najnowszej kolekcji określonego rodzaju GC - efemerycznej, pełnej blokowania lub w tle. Najbardziej prawdopodobne przypadki użycia tego interfejsu API to rejestrowanie / monitorowanie lub wskazanie systemowi równoważenia obciążenia, że ​​maszyna powinna zostać wyłączona z rotacji, aby zażądać pełnego GC. W międzyczasie dokonano kolejnej zmiany GC, aby odłożyć kosztowną operację resetowania pamięci do sytuacji z małą ilością pamięci.
  • Ryujit, generator kodu asemblerowego dla .NET, zyskuje ulepszenia, począwszy od umożliwienia wyeliminowania niektórych kontroli ograniczeń, a skończywszy na poprawie powielania i usuwaniu zbędnych zerowych initów. Ryujit zawiera również elementy sprzętowe ARM64 i optymalizację API.

.NET 5 Preview 6, wydana 25 czerwca, usunęła wbudowaną obsługę WinRT (Windows Runtime), zbioru interfejsów API do tworzenia aplikacji Universal Windows Platform. To przełomowa zmiana; Aplikacje .NET Core 3.x używające WinRT muszą zostać ponownie skompilowane. Zespoły .NET i Windows pracują nad zmianą sposobu działania WinRT w systemie Windows, zastępując obsługę WinRT łańcuchem narzędzi C # / WinRT w .NET 5. C # / WinRT to pakiet narzędzi NuGet oferujący obsługę projekcji WinRT dla języka C #.

Inne zmiany w .NET 5 Preview 6: 

  • Zestaw SDK .NET 5 Preview 6 obejmuje obsługę Windows Forms na urządzeniach Windows ARM64. Trwają prace nad dodaniem obsługi Windows Presentation Foundation w systemie Windows ARM64.
  • Ulepszenia jakości kodu RyuJIT obejmują obsługę i optymalizację struktury w celu usunięcia zbędnych zerowych inicjalizacji. Poczyniono również postępy w optymalizacji wewnętrznych elementów sprzętowych ARM64, a także w ulepszaniu generowanego kodu dla ARM64, przy zmniejszonym rozmiarze kodu.
  • Plany wsparcia platformy zostały zaktualizowane.

NET 5 Preview 5, wydana 10 czerwca, zawiera następujące nowe funkcje:

  • Kompilator RyuJIT JIT ma szybszą, przenośną implementację pomocników wywołań ogonowych. JIT prosi środowisko wykonawcze o pomoc za każdym razem, gdy zdaje sobie sprawę, że będzie potrzebować pomocnika, aby wykonać wywołanie ogonowe. Również w przypadku RyuJIT odnotowano ciągły postęp we wdrażaniu wewnętrznych elementów sprzętowych ARM64. Inne ulepszenia w RyuJIT obejmują lepszą prędkość w przypadku, który wpływał na kompilację wyrażeń regularnych i poprawioną wydajność architektury Intela.
  • Włączono eksport natywnych plików binarnych z wywołaniami do kodu .NET. Elementem konstrukcyjnym tej możliwości jest obsługa interfejsu API dla platformy UnManagedCallersOnlyAttribute. Projekt eksportu natywnego umożliwia udostępnianie niestandardowych eksportów natywnych. Nie wymaga technologii międzyoperacyjnej wyższego poziomu, takiej jak COM, i jest wieloplatformowa.
  • DirectoryServices.Protocols wsparcie jest rozszerzane na Linux i MacOS.
  • Obsługiwana jest teraz dystrybucja Linuksa Alpine 3.12.

Kandydat do wydania .NET 5.0 można pobrać ze strony dot.net.microsoft.com.

NET 5 Preview 4, wydana 19 maja, wprowadziła następujące nowe możliwości:

  • Obsługa języków C # 9 i F # 5.
  • Poprawiona wydajność połączeń końcowych używanych przez język F #.
  • Lepsza wydajność ToUpperInvariant, string.ToLowerInvariantoraz związane z nimi stanie.
  • Poprawiona wydajność HTTP 1.1 i HTTP 2.
  • Ulepszony mechanizm zliczania połączeń.
  • Dynamiczne rozszerzenie wewnętrznego słownika ogólnego w celu wyeliminowania spadków wydajności, na które wpływa kod ogólny.
  • Przypięty sterta obiektu w celu zmniejszenia fragmentacji sterty.
  • Aplikacje jednoplikowe oparte na nowym typie publikowania pojedynczego pliku, który wykonuje aplikację z pojedynczego pliku binarnego.

Ulepszenia w .NET 5 w wersji zapoznawczej 3, zaprezentowane 23 kwietnia, obejmują: 

  • Klasa BitArray do zarządzania tablicą wartości bitowych została zaktualizowana w celu uwzględnienia implementacji przyspieszanej sprzętowo dla ARM64 przy użyciu elementów wewnętrznych ARM64. Microsoft powiedział, że ulepszenia wydajności BitArray są znaczące. Ponadto zaimplementowano funkcję zamiany na stosie (OSR) w środowisku CLR, aby umożliwić zmianę kodu wykonywanego przez aktualnie uruchomione metody w trakcie wykonywania metody, podczas gdy metody te są aktywne „na stosie”. Ta możliwość, aby poprawić charakterystykę wydajności kompilacji warstwowej, jest teraz eksperymentalną funkcją opt-in na x64. Kolejne ulepszenie RyuJIT poprawia jakość kodu dla struktur jako argumentów w wywołaniach pozycji „tail call”. Oczekuje się również, że RyuJIT zapewni lepszą wydajność leków generycznych. 
  • Dodano obsługę zachowywania odwołań do System.Txt.Json, umożliwiając obsługę pętli referencyjnych dla serializacji JSON. Ponadto niezmienne klasy i struktury są teraz obsługiwane dla JsonSerializer. Obsługiwana jest również obsługa wartości null.
  • NET SDK będzie teraz automatycznie odwoływać się do pakietu NuGet NETFramework.ReferenceAssemblies, biorąc pod uwagę platformę docelową .NET Framework w pliku projektu. Ta zmiana umożliwia tworzenie projektów .NET Framework na komputerze bez zainstalowanego pakietu .NET Framework. To ulepszenie jest specyficzne dla pakietów docelowych i nie uwzględnia innych możliwych zależności projektu.

Konkretne ulepszenia w .NET 5 w wersji zapoznawczej 2, wydanej 2 kwietnia, obejmowały: 

  • W RyuJIT wprowadzono szereg zmian w celu poprawy jakości generowanego kodu maszynowego, w tym bardziej agresywną eliminację duplikatów zerowych inicjalizacji i przywołaną wcześniej optymalizację pola zerowego.
  • Wyrzucanie elementów bezużytecznych serwera w różnych wątkach może teraz wykradać dane podczas oznaczania obiektów gen0 / 1 utrzymywanych na żywo przez obiekty starszej generacji. Praca polegająca na kradzieży między wątkami skraca efemeryczne przerwy w GC w scenariuszach, w których oznaczanie niektórych wątków GC trwało znacznie dłużej niż innych. Ponadto zaimplementowano część funkcji Pinned Object Heap (POH), część wewnętrzną dla czyszczenia pamięci, aby umożliwić kolektorowi osobne zarządzanie przypiętymi obiektami. Pozwala to uniknąć negatywnych skutków przypiętych obiektów na stosach pokoleń.

Wersja zapoznawcza 1, wydana 16 marca, zawierała ulepszenia wydajności wyrażeń regularnych, a także ulepszenia jakości kodu w RyuJIT.

Planowane wydanie produkcyjne w listopadzie 2020 roku .NET 5 ma obejmować:

  • ASP.NET Core, platforma typu open source dla aplikacji internetowych.
  • Entity Framework Core technologia dostępu do danych.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Model urządzenia aplikacji mobilnej Xamarin.
  • ML.NET.

Microsoft powiedział, że .NET 5 zapewni pojedynczą, ujednoliconą platformę do budowania dowolnego typu aplikacji. Firma kieruje połowę ruchu do swojej witryny .NET na wersję .NET 5 jako przypadek testowy, korzystając z równoważenia obciążenia platformy Azure. 

Firma Microsoft zaleca programistom tworzenie nowych aplikacji w środowisku .NET Core 3.1, a następnie migrację ich do .NET 5. Firma zauważyła, że ​​aplikacje .NET Framework można pozostawić na platformie .NET Framework, która będzie obsługiwana tak długo, jak będzie obsługiwany sam system Windows.