Nouveautés de Microsoft .NET 5

La deuxième version candidate de Microsoft .NET 5 est arrivée le 13 octobre, rapprochant la fusion de .NET Framework et .NET Core d'un pas de plus. La nouvelle plate-forme unifiée .NET doit être disponible le 10 novembre 2020. 

Microsoft décrit Release Candidate 2 comme une version quasi-finale et la dernière des deux RC. Un premier RC a été publié le 13 septembre. La version candidate de .NET 5.0 peut être téléchargée à partir de dotnet.microsoft.com.

Les objectifs de haut niveau de .NET 5 incluent la fourniture d'une expérience unifiée du SDK .NET, avec une seule BCL (bibliothèque de classes de base) pour toutes les applications .NET 5, et avec la prise en charge des applications natives et Web sur plusieurs systèmes d'exploitation. Un seul projet d'application native .NET 5 prendrait en charge des cibles telles que Windows, Microsoft Duo (Android) et Apple iOS à l'aide de contrôles natifs sur ces plates-formes.

Les objectifs supplémentaires de .NET 5 incluent la prise en charge de la création d'applications cloud hautes performances, des algorithmes plus rapides dans la BCL, une meilleure prise en charge des conteneurs lors de l'exécution et la prise en charge de HTTP3. .NET 5.0 inclut la prise en charge du format binaire WebAssembly, via le runtime Mono et les bibliothèques .NET. Un ensemble d'annotations de type référence Nullable est également présenté.

.NET 5 promet également de permettre aux développeurs de trouver automatiquement les bogues latents dans le code. Parmi les autres nouvelles fonctionnalités, citons le Halftype, une virgule flottante binaire occupant 16 bits, et le découpage d'assemblage, qui ajuste les assemblages inutilisés pour réduire la taille des applications. Le découpage personnalisé est également mis en évidence. La nouvelle correspondance de modèles en C # 9 couvre les modèles de type relationnels, logiques et simples. L'option de déploiement ClickOnce est désormais prise en charge pour les applications Windows .NET 5.0 et les applications .NET Core 3.1.

La nouvelle plateforme .NET promet également des améliorations de performances. Un bulletin relatif à Preview 7, arrivé le 21 juillet, reconnaît environ 250 demandes d'extraction axées sur les performances dans .NET 5 et note qu'une agréable surprise attend ceux qui ont suivi les performances de .NET Core. 

Autres ajouts et améliorations notés dans le bulletin .NET 5 Preview 7:

  • La nouvelle API JSON System.text.json offre la possibilité d'ignorer les valeurs par défaut des propriétés de type valeur lors de la sérialisation, ce qui permet de réduire les coûts de sérialisation et de câblage. C'est un changement radical. System.text.json a également ajouté la possibilité de gérer les références circulaires lors de la sérialisation, la forme de l'API étant désormais censée être définitive.
  • Le garbage collection expose désormais des données détaillées sur la collection la plus récente, à l'aide de la GetGCMemoryInfométhode, qui retourne une GCMemoryInfostructure. GCMemoryInfofournit des informations sur la mémoire de la machine et du tas et la collection la plus récente, ou la collection la plus récente du type de GC spécifié - éphémère, blocage complet ou arrière-plan. Les cas d'utilisation les plus probables de cette API sont la journalisation / la surveillance ou pour indiquer à un équilibreur de charge qu'une machine doit être retirée de la rotation pour demander un GC complet. Un autre changement de GC, quant à lui, a été apporté pour reporter l'opération coûteuse de réinitialisation de la mémoire aux situations de faible mémoire.
  • Ryujit, le générateur de code d'assemblage pour .NET, bénéficie d'améliorations allant de l'activation de l'élimination de certaines vérifications de limites à l'amélioration de la duplication de queue et à des améliorations pour la suppression des zéro inits redondants. Ryujit présente également les éléments intrinsèques du matériel ARM64 et l'optimisation des API.

.NET 5 Preview 6, publié le 25 juin, a supprimé la prise en charge intégrée de WinRT (Windows Runtime), une collection d'API permettant de créer des applications de la plateforme Windows universelle. C'est un changement radical; Les applications .NET Core 3.x utilisant WinRT doivent être recompilées. Les équipes .NET et Windows ont travaillé pour changer la façon dont WinRT fonctionne avec Windows, en remplaçant la prise en charge de WinRT par la chaîne d'outils C # / WinRT dans .NET 5. C # / WinRT est une boîte à outils NuGet offrant la prise en charge de la projection WinRT pour C #.

Autres changements dans .NET 5 Preview 6: 

  • Le SDK .NET 5 Preview 6 inclut la prise en charge de Windows Forms sur les appareils Windows ARM64. Les travaux se poursuivent pour ajouter la prise en charge de Windows Presentation Foundation sur Windows ARM64.
  • Les améliorations de la qualité du code RyuJIT couvrent la gestion et l'optimisation des structures pour supprimer les initialisations zéro redondantes. En outre, des progrès ont été réalisés dans l'optimisation des intrinsèques du matériel ARM64 ainsi que dans l'amélioration du code généré pour ARM64, avec une taille de code réduite.
  • Les plans de support de la plateforme ont été mis à jour.

.NET 5 Preview 5, publié le 10 juin, contient les nouvelles fonctionnalités suivantes:

  • Le compilateur RyuJIT JIT a une implémentation plus rapide et portable des helpers tailcall. Le JIT demande de l'aide au runtime chaque fois qu'il se rend compte qu'il aura besoin d'une aide pour effectuer un appel arrière. Aussi pour RyuJIT, il y a eu des progrès continus dans l'implémentation des intrinsèques matériels ARM64. D'autres améliorations du RyuJIT impliquent une meilleure vitesse dans un cas qui affectait la compilation d'expressions régulières et une amélioration des performances de l'architecture Intel.
  • Les exportations de binaires natifs avec des appels dans le code .NET ont été activées. L'élément de base de cette fonctionnalité est l'hébergement de la prise en charge des API UnManagedCallersOnlyAttribute. Le projet d'exportations natives permet d'exposer des exportations natives personnalisées. Il ne nécessite pas de technologie d'interopérabilité de niveau supérieur comme COM et est multiplateforme.
  • DirectoryServices.Protocols la prise en charge est étendue à Linux et MacOS.
  • La distribution Linux Alpine 3.12 est désormais prise en charge.

La version candidate .NET 5.0 peut être téléchargée à partir de dot.net.microsoft.com.

.NET 5 Preview 4, publié le 19 mai, a introduit les nouvelles fonctionnalités suivantes:

  • Prise en charge des langages C # 9 et F # 5.
  • Amélioration des performances des appels arrière utilisés par F #.
  • Amélioration des performances ToUpperInvariant, string.ToLowerInvariantet les modèles connexes.
  • Amélioration des performances HTTP 1.1 et HTTP 2.
  • Un mécanisme de comptage d'appels amélioré.
  • Expansion dynamique du dictionnaire générique interne pour éliminer les falaises de performances touchées par le code générique.
  • Un tas d'objets épinglés pour réduire la fragmentation du tas.
  • Applications de fichier unique basées sur un nouveau type de publication de fichier unique qui exécute une application à partir d'un seul binaire.

Les améliorations apportées à .NET 5 Preview 3, dévoilées le 23 avril, sont les suivantes: 

  • La classe BitArray pour la gestion d'un tableau de valeurs de bits a été mise à jour pour inclure une implémentation accélérée par le matériel pour ARM64 utilisant les intrinsèques ARM64. Les améliorations des performances de BitArray sont significatives, a déclaré Microsoft. En outre, le remplacement sur pile (OSR) dans le CLR a été implémenté pour permettre au code exécuté par les méthodes en cours d'exécution d'être modifié au milieu de l'exécution de la méthode, alors que ces méthodes sont actives «sur la pile». Cette capacité, pour améliorer les caractéristiques de performance de la compilation à plusieurs niveaux, est maintenant une fonctionnalité expérimentale opt-in sur x64. Une autre amélioration de RyuJIT améliore la qualité du code pour les structures en tant qu'arguments dans les appels de position «tail call». On s'attend également à ce que RyuJIT offre de meilleures performances des génériques. 
  • L'ajout de la prise en charge de la conservation des références a été ajouté à System.Txt.Json, permettant la gestion des boucles de référence pour la sérialisation JSON. De plus, les classes et structures immuables sont désormais prises en charge pour JsonSerializer. La gestion des valeurs nulles est également prise en charge.
  • Le Kit de développement logiciel (SDK) .NET référencera désormais automatiquement le package NuGet NETFramework.ReferenceAssemblies étant donné un framework cible .NET Framework dans un fichier projet. Cette modification permet la création de projets .NET Framework sur un ordinateur sans pack de ciblage .NET Framework installé. Cette amélioration est spécifique aux packs de ciblage et ne tient pas compte des autres dépendances de projet possibles.

Les améliorations spécifiques de .NET 5 Preview 2, publiées le 2 avril, comprenaient: 

  • Un certain nombre de modifications ont été apportées à RyuJIT pour améliorer la qualité du code machine généré, y compris les initialisations à zéro en double éliminées de manière plus agressive et les optimisations de boîte à nullable invoquées plus tôt.
  • Le garbage collection de serveur sur différents threads peut désormais voler tout en marquant les objets gen0 / 1 tenus en direct par des objets de génération plus ancienne. Le vol de travail entre les threads raccourcit les pauses GC éphémères pour les scénarios où certains threads GC prenaient beaucoup plus de temps à marquer que d'autres. De plus, une partie de la fonctionnalité POH (Pinned Object Heap) a été implémentée, la partie interne au garbage collection, pour permettre au collecteur de gérer les objets épinglés séparément. Cela évite les effets négatifs des objets épinglés sur les tas générationnels.

L'aperçu 1, publié le 16 mars, comprenait des améliorations des performances des expressions régulières ainsi que des améliorations de la qualité du code dans RyuJIT.

En raison d'une sortie de production en novembre 2020, .NET 5 devrait inclure:

  • ASP.NET Core, un framework open source pour les applications Web.
  • Technologie d'accès aux données Entity Framework Core.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Modèle d'appareil d'application mobile Xamarin.
  • ML.NET.

Microsoft a déclaré que .NET 5 fournira une plate-forme unique et unifiée pour la création de tout type d'application. La société dirige la moitié du trafic vers le trafic de son site Web .NET vers une version .NET 5 en tant que scénario de test, à l'aide de l'équilibrage de charge Azure. 

Microsoft recommande aux développeurs de créer de nouvelles applications avec .NET Core 3.1, puis de les migrer vers .NET 5. La société a noté que les applications .NET Framework peuvent être laissées sur .NET Framework, qui restera pris en charge tant que Windows lui-même sera pris en charge.