Chaque année apporte son lot d’innovations majeures et de ruptures qui obligent les développeurs à constamment se former pour rester à la pointe. Dans ce contexte où la mobilité et le temps réel prennent une place grandissante, Microsoft présente .NET 5. Ce nouveau framework, successeur de .NET Core, introduit des changements importants. À quels défis veut-il répondre ? Quelles nouvelles fonctionnalités propose-t-il ? Décryptage d’une version qui marque un tournant pour .NET.
Qu’est-ce que .NET 5 ?
Avec .NET 5, Microsoft opère un virage stratégique vers l’avenir de .NET. Ce nouveau framework se positionne comme l’aboutissement de plusieurs années d’évolution de la plateforme .NET Core et le point de départ d’une nouvelle ère.
Tout d’abord, .NET 5 résulte de la fusion entre .NET Core, qui était dédié aux applications cross-plateform, et .NET Framework, qui ciblait Windows. Désormais, .NET 5 constitue l’implémentation de référence pour le développement d’applications .NET et ce, quel que soit l’OS cible.
S’inscrivant dans la continuité de .NET Core, .NET 5 conserve toutefois le même moteur d’exécution multi-plateforme et open source. Malgré tout, cette version repousse les limites en termes de performances et de capacités ; elle intègre de nouveaux composants optimisés pour le cloud et les workloads gourmands en calcul.
L’unification de .NET 5 permet également de simplifier le développement d’applications .NET. Finies les bifurcations entre .NET Framework et .NET Core : les frameworks, langages et outils convergent désormais vers .NET 5. Les développeurs bénéficient d’un socle commun, stable et unifié.
Avec .NET 5, Microsoft souhaite livrer une plateforme moderne, flexible et performante pour répondre aux besoins actuels : cloud, containers, edge computing… Cette version ouvre un nouveau chapitre et dessine l’avenir de .NET pour les années à venir.
Quelles sont les dernières nouveautés de .NET 5 ?
Cette nouvelle mouture introduit de nombreuses améliorations afin d’enrichir l’expérience des développeurs. En voici les principales :
Mises à jour C#
Avec la version 9, C# continue d’évoluer pour répondre aux besoins des développeurs. Dans le détail, trois améliorations majeures sont à souligner.
Tout d’abord, l’arrivée des records, qui sont des types immuables focalisés sur les données. Les records bénéficient d’une syntaxe simplifiée et de fonctionnalités intégrées pour l’égalité des membres. Cette nouveauté facilite la modélisation des DTOs et autres structures de données :
// Déclaration d'un record
public record Person(string FirstName, string LastName);
// Instanciation
var person = new Person("John", "Doe");
// Les membres sont en lecture seule
person.FirstName = "Jane"; // Erreur
// Égalité des membres implémentée par défaut
Person person2 = new Person("John", "Doe");
Console.WriteLine(person == person2); // True
// Nouvelle instance avec membres modifiés
var updatedPerson = person with { FirstName = "Jane" };
// Utile pour les DTOs
public record OrderDTO(int Id, string Status, decimal Total);
Ensuite, les top-level statements permettent d’écrire du code C# en dehors des classes. Pratique pour tester rapidement des bouts de code ou décomposer un programme en fonctionnalités. Cette évolution signe la fin du code englobé dans une classe factice.
Enfin, les performances des structs sont optimisées grâce à l’allocation sur le stack plutôt que le heap. Les copies de structs sont plus rapides, ce qui booste les types de données orientées performance.
À noter également que côté interopérabilité, C# 9 améliore l’interaction avec Java et Objective-C. De quoi faciliter le partage de code sur plusieurs plateformes.
Mises à jour Visual Basic
Malgré une adoption moindre que C#, Visual Basic continue d’évoluer dans .NET 5. Au programme : des gains de productivité et des optimisations.
En outre, l’inférence de variables autorise l’utilisation de variables sans expliciter leur type, que le compilateur déduit. Cette fonctionnalité réduit la verbosité du code et le risque d’erreurs.
Côté performances, le compilateur VB est optimisé pour générer un code machine plus rapide, notamment via de meilleures instructions SIMD vectorielles.
En outre, VB bénéficie d’améliorations de l’interopérabilité avec C#, rendant plus simple le partage de code entre les deux langages.
Bien que moins populaire, Visual Basic reste pertinent pour maintenir des applications existantes ou prototyper rapidement. Ces évolutions démontrent l’engagement de Microsoft pour pérenniser VB au sein de son univers de programmation.
Nouvelles fonctionnalités de System.Text.Json
Avec .NET 5, l’API System.Text.Json gagne en maturité et devient l’outil de sérialisation JSON de référence.
En effet, la personnalisation du processus de sérialisation est désormais possible. On peut contrôler le formatage, ignorer certains membres, gérer les valeurs null, etc. De quoi adapter finement la sérialisation à chaque cas d’usage.
De plus, des attributs permettent de mapper les noms de propriétés aux noms de clés JSON pour plus de flexibilité. Les enums peuvent être sérialisés sous forme de string plutôt que d’entier.
La sérialisation générique permet de tester facilement la sérialisation de n’importe quelle classe, sans mapper explicitement chaque propriété. Cette fonction est très utile pour le débogage et les POCs.
En découlent des performances excellentes grâce à la génération de code spécialisé pour chaque type sérialisé : le code est optimisé en fonction des types et des options choisies.
Applications à fichier unique
.NET 5 introduit également la possibilité de compiler des applications en un seul fichier exécutable, via l’outil DOTNET Publish. Toutes les dépendances sont incluses dans ce fichier, y compris le runtime .NET.
Cette fonctionnalité simplifie le déploiement d’applications .NET sur des environnements tiers, sans avoir à installer le SDK .NET. Le fichier exécutable contient tout ce dont l’application a besoin pour s’exécuter.
Les applications à fichier unique sont idéales pour le déploiement dans des containers Docker. Elles limitent la taille des images et les vulnérabilités liées aux dépendances.
Amélioration des performances
Les optimisations apportées au runtime se traduisent par des gains significatifs :
- Le Garbage Collector a été profondément optimisé. Ses algorithmes de ramasse-miettes ont été repensés pour minimiser les pauses lors de la récupération de mémoire. Microsoft a également retravaillé sa gestion de la mémoire pour réduire l’empreinte globale du GC. Ces améliorations sont particulièrement bénéfiques dans les containers, où le GC a été spécifiquement optimisé pour mieux fonctionner avec une mémoire limitée.
- Les performances de System.Text.Json ont fait un bond en avant grâce à plusieurs stratégies. Tout d’abord, le compilateur génère désormais du code dédié pour chaque classe sérialisée afin de maximiser la vitesse. Ensuite, les allocations mémoire ont été minimisées en réutilisant des structures de données existantes plutôt que d’allouer de nouveaux objets. Enfin, le parsing lui-même a été accéléré en traitant les données JSON par batches pour tirer parti des CPU modernes.
- Les expressions régulières voient leurs performances décuplées grâce à de nouvelles techniques d’optimisation JIT, qui génèrent un code machine extrêmement optimisé. Le moteur d’expressions régulières met également en cache intelligemment les résultats pour éviter de répéter les calculs. Enfin, les algorithmes sous-jacents de matching ont été améliorés, apportant des gains non négligeables sur les regexp complexes.
- L’empreinte mémoire réduite des containers provient de trois facteurs. Premièrement, le runtime .NET a été allégé et contient moins de dépendances inutiles dans ce contexte. De plus, le Garbage Collector optimisé occupe également moins de place. Enfin, il est possible de construire des images Docker ne contenant que le strict nécessaire pour l’application, limitant la taille globale des containers.
Conclusion
Avec .NET 5, Microsoft opère un tournant décisif pour sa plateforme phare. Ce nouveau framework unifie le monde .NET en fusionnant les forces de .NET Framework et .NET Core. Il apporte de nombreuses améliorations en matière de performances, de productivité des développeurs et de cloud-readiness.
Les gains en performances ouvrent la voie à des applications toujours plus ambitieuses. La prise en charge des containers et du JSON accélère le développement moderne d’API et de microservices. Les évolutions des langages augmentent la productivité au quotidien.
.NET 5 constitue une base solide pour l’avenir de la plateforme. Les prochaines versions continueront à étendre le support du cloud et des nouveaux paradigmes comme l’edge computing. L’écosystème open source participe activement à cette dynamique d’innovation.