Microsoft a livré une troisième preview de .NET 5, la future plateforme unifiée résultant de la fusion de .NET Framework avec .NET Core, et annoncée comme « l'avenir de .NET » par l'éditeur. La seconde preview de .NET 5, livrée le 2 avril, apporte des améliorations à la qualité du code du compilateur Ryujit et au niveau de la collecte des déchets dans la mémoire.

.NET 5 a d’autres objectifs importants, notamment la fourniture d'un SDK .NET unifié, avec une seule BCL (bibliothèque de classes de base) pour toutes les applications .NET 5, et le support des applications natives et web par plusieurs systèmes d'exploitation. Pour le développement natif, un seul projet sur la même machine pourrait prendre en charge une application fonctionnant sur des appareils Windows, Microsoft Duo (Android) et Apple iOS, et pourrait utiliser des contrôles natifs sur ces plates-formes. Les applications clouds à hautes performances font aussi partie des objectifs de .NET 5, tout comme les algorithmes plus rapides de la BCL, une meilleure prise en charge des conteneurs dans le runtime et le support du HTTP3.

Voici quelques-unes des améliorations apportées à cette troisième preview de .NET 5 :

- La classe BitArray pour la gestion d'un tableau de bits a été mise à jour pour inclure une accélération au niveau du hardware pour ARM64 utilisant les intrinsèques ARM64. « Les améliorations de performances de BitArray sont significatives », a déclaré Microsoft. En outre, le remplacement de la pile (On Stack Replacement - OSR) dans le Common Language Runtime (CLR) a été implémenté pour permettre au code exécuté par les méthodes actuelles 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é, qui vise à améliorer les caractéristiques de performance de la compilation par tier, est désormais une fonctionnalité expérimentale, optionnelle sur x64. RyuJIT bénéficie d’une amélioration de la qualité du code pour les types de valeur Structs comme arguments dans les appels de position « tail call ». RyuJIT devrait également offrir de meilleures performances pour les génériques.

- Le support de la préservation 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 les structures immuables sont désormais supportées pour JsonSerializer. La gestion des valeurs null est également prise en charge.

- Le SDK .NET permet désormais l'auto-référencement du package NETFramework.ReferenceAssemblies NuGet avec un framework cible .NET Framework dans un fichier de projet. Ce changement permet de construire des projets .NET Framework sur une machine sans avoir besoin d’installer un paquet cible .NET Framework. Cette amélioration est spécifique aux « Targeting Packs » et ne tient pas compte des autres dépendances possibles du projet.

Les informations de chargement des assemblages pour une simple application de test. (Crédit MS)

Améliorations spécifiques à la seconde preview .NET 5, livrée le 2 avril :

- Plusieurs changements ont été apportés à RyuJIT pour améliorer la qualité du code machine généré, notamment l'élimination plus radicale des initialisations zéro en double et l'optimisation des boîtes null invoquées plus tôt.

- La collecte des déchets du serveur sur différents threads peut désormais fonctionner en mode « work-steal » tout en marquant les objets gen0/1 de l'ancienne génération comme actifs. Le « work stealing » sur les threads raccourcit les pauses éphémères du collecteur de déchets (Garbage Collector – GC) dans les scénarios où certains threads GC prenaient beaucoup plus de temps à marquer que d'autres. De plus, une partie de la fonction « Pinned Object Heap » (POH) a été implémentée, celle liée à la collecte de déchets, pour permettre au collecteur de gérer séparément les objets épinglés. Cela permet d'éviter les effets négatifs des objets épinglés sur les « Generational Heaps ».

La première preview de .NET 5, livrée le 16 mars, comportait des améliorations dans les performances des expressions régulières et dans la qualité du code de RyuJIT.

La version de production de .NET 5, dont la sortie est prévue pour novembre 2020, devrait inclure :

- ASP.NET Core, un framework open source pour les applications web.

- La technologie d'accès aux données Entity Framework Core.

- WinForms.

- WPF (Windows Presentation Foundation).

- Xamarin, intégré à .NET 5, permettra de développer des applications mobiles sans ajout.

- ML.NET.

Microsoft offre un aperçu du SDK .NET 5 avec celui du runtime associé. La firme de Redmond a déclaré que .NET 5 offrira une plate-forme unique et unifiée pour la création de tout type d'application. L’éditeur dirige la moitié du trafic de son site web .NET vers une version .NET 5 à titre de test, en utilisant l'équilibrage de charge Azure. Microsoft recommande aux développeurs de créer de nouvelles applications avec .NET Core 3.1 et de les migrer ensuite vers .NET 5. L’entreprise a précisé que les applications .NET Framework pouvaient rester sur .NET Framework, lequel sera supporté aussi longtemps que Windows lui-même sera pris en charge.