Pour rappel, Microsoft a partagé sa vision initiale de .NET 9 et a publié le premier aperçu du framework au début de l'année 2024. Selon le communiqué, les domaines d'intérêt les plus importants concernaient le développement d'applications cloud-natives et intelligentes, mais des investissements importants en matière de performance, de productivité et de sécurité, ainsi que des avancées sur l'ensemble de la plateforme ont également été annoncés. Ce 12 novembre 2024, Microsoft présente officiellement les points forts de .NET 9 dans les langages de programmation, les charges de travail et les outils de développement.
Des performances inégalées - des applications plus rapides, et moins de mémoire
.NET 9 est la version la plus performante de .NET à ce jour, avec plus de 1 000 changements liés aux performances dans le temps d'exécution, les charges de travail et les langages, avec des algorithmes plus efficaces qui génèrent un meilleur code. Stephen Toub a effectué une analyse approfondie des améliorations de performances de .NET 9, qu'il faut absolument lire, mais examinons quelques points forts de cette version.
Le GC de serveur a été considérablement modifié pour s'adapter aux besoins en mémoire de l'application plutôt qu'aux ressources (mémoire et CPU) disponibles dans l'environnement (machine/VM/conteneur). Ce changement d'approche a un impact profond dans les environnements à nombre élevé de cœurs, où la mémoire de l'application est faible ou change considérablement au fil du temps. Jusqu'à présent, les implémentations GC des stations de travail et des serveurs fournissaient des résultats distincts et obligeaient les utilisateurs à faire des compromis entre les deux. Ce changement devrait être particulièrement intéressant pour tous ceux qui utilisent le GC sur station de travail pour contrôler l'utilisation de la mémoire des applications cloud. L'avantage de la mémoire s'accompagne d'un coût modeste en termes de débit, qui peut être observable ou non. Le GC de serveur peut être configuré pour utiliser l'ancienne implémentation, ce qui peut s'avérer utile pour les tests.
Le benchmark TechEmpower n'a rien à envier à .NET 9, avec un débit plus élevé et une baisse spectaculaire de l'utilisation de la mémoire. La baisse de la mémoire est due aux changements apportés au GC de serveur.
Le runtime est revenu à la vectorisation, en ajoutant le support pour les nouveaux siliciums, à la fois Arm64 SVE, Intel AVX10, et l'accélération matérielle du runtime. RyuJIT améliore les performances pour Arm64, les boucles, PGO, et les vérifications de limites. Les exceptions sont 50% plus rapides, grâce à l'adoption du même modèle d'exception que celui utilisé par Native AOT.
L'optimisation guidée par profil (PGO) dynamique a été mise à jour pour optimiser davantage de modèles de code. Le JIT génère désormais du code à trajectoire rapide pour les casts de type courants et inédits dans une application. Les casts, tels que (IFoo)myFoo et myFoo is IFoo sont très courants en C#. Il peut également dérouler et vectoriser certaines opérations sur les tampons pour les longueurs de tampons courantes qu'il observe. Cette modification permet d'accélérer l'exécution de 70 %, mais nécessite la désactivation de ReadyToRun.
LINQ a été optimisé pour une variété de cas courants. Des méthodes telles que Take et DefaultIfEmpty renvoient désormais des résultats jusqu'à 10 fois plus rapides lorsque le tableau, la collection ou l'énumérable sous-jacent est vide. Enumerable.SequenceEqual traite déjà les entrées de tableaux en déléguant l'opération à MemoryExtensions.SequenceEquals, ce qui permet une itération et une vectorisation efficaces en passant les tableaux en tant qu'étendues. Cette fonctionnalité est désormais disponible pour List<T>.
Les détails de bas niveau de System.Text.Json ont été considérablement optimisés, avec des améliorations de plus de 50 % pour diverses opérations. JsonProperty.WriteTo peut désormais écrire directement des octets UTF8 pour éviter l'allocation d'un string. La nouvelle API JsonMarshal.GetRawUtf8Value renvoie des octets UTF8, au lieu de JsonElement.GetRawText, qui renvoie une chaîne et nécessite un encodage et une allocation. JsonObject peut maintenant dimensionner correctement son historique sous-jacent si un nombre peut être récupéré à partir de l'énumérable qui lui est donné, évitant ainsi les coûts d'allocation et de redimensionnement.
En plus de ces améliorations fondamentales de .NET, vous trouverez des améliorations de performance pour tous les types d'applications.
.NET Aspire - Des éléments de base pour créer de meilleures applications
.NET Aspire est un ensemble d'outils, de modèles et de paquets puissants pour le développement transparent d'applications observables et prêtes pour la production. Six mois seulement se sont écoulés depuis la première version de .NET Aspire, et des améliorations ont déjà été apportées à toutes les parties de la pile, depuis les nouvelles fonctionnalités du tableau de bord de télémétrie et de métrologie jusqu'au déploiement plus rationalisé des applications dans le cloud. Il a été intéressant de voir l'adoption de .NET Aspire dans des applications de tous types et de voir la communauté adopter les intégrations et les outils pour leurs scénarios. En outre, Microsoft l'a très bien adopté : les équipes Xbox et Copilot ont intégré .NET Aspire à leurs services existants, resserrant ainsi leur boucle de développement interne grâce à des informations facilement accessibles et à diverses intégrations Azure compatibles.
La sortie de .NET Aspire 9 apporte certaines des fonctionnalités les plus demandées pour aider à rationaliser le développement des applications. Il est désormais possible de démarrer et d'arrêter des ressources à partir du tableau de bord, de maintenir les conteneurs en vie entre les sessions de débogage et d'accéder à de nouvelles API, notamment WaitFor, afin de mieux gérer le démarrage des ressources. Microsoft a travaillé en étroite collaboration avec la communauté pour lancer de nouvelles intégrations transparentes pour OpenAI, Ollama, Milvus et bien d'autres. L'acquisition de .NET Aspire a été simplifiée afin de faciliter son adoption dans les applications, les scénarios de déploiement ont été améliorés avec Azure Container Apps et la prise en charge d'Azure Functions avec .NET Aspire a été annoncée en avant-première.
Intelligence artificielle - Un écosystème d'IA en pleine croissance et prospère
Microsoft continue d'étendre les capacités .NET pour la création et l'intégration d'applications avec l'IA. Il y a de nouveaux matériels d'apprentissage et échantillons, des intégrations simplifiées dans l'écosystème, des collaborations avec des partenaires pour construire une communauté d'IA dynamique, et il est plus facile que jamais de déployer des solutions d'IA dans le cloud. Des entreprises de tout le secteur ont adopté .NET pour créer des expériences d'IA de premier plan pour leurs clients, notamment H&R Block, Blip et KPMG. .NET fait fonctionner l'assistant de codage GitHub Copilot et la toute nouvelle expérience Microsoft Copilot a été reconstruite à partir du groupe avec .NET.
Il est essentiel que les développeurs aient accès aux dernières avancées lorsqu'ils créent des services et des applications d'IA. C'est pourquoi Microsoft a travaillé avec des partenaires comme Azure, OpenAI, LlamaIndex, Qdrant, Pinecone, Milvus, AutoGen, OllamaSharp, ONNX Runtime, et bien d'autres dans tout l'écosystème de l'IA pour fournir un ensemble robuste d'offres aux développeurs .NET.
En outre, il est désormais plus facile d'intégrer des contrôles infusés par l'IA dans les applications .NET, grâce à la mise en place d'un écosystème de composants intelligents avec la communauté et les partenaires fournisseurs de contrôles de Microsoft.
Éléments de base de l'IA pour .NET
Un écosystème robuste signifie qu'il y a plus de choix que jamais pour les développeurs qui doivent décider ce qui convient parfaitement à leur scénario. Microsoft a cherché à rationaliser ces intégrations et à supprimer la barrière à l'entrée avec le nombre croissant d'API et de fonctionnalités dans l'écosystème. C'est pourquoi, en collaboration avec Semantic Kernel, elle a introduit un ensemble d'abstractions dans l'écosystème .NET sous Microsoft.Extensions.AI et Microsoft.Extensions.VectorData qui fournissent une couche unifiée d'abstractions C# pour interagir avec les services d'IA, tels que les modèles de langage de petite et grande taille (SLM et LLM), les embeddings, les entrepôts de vecteurs et les intergiciels. Cette nouvelle approche rationalisée donne déjà d'excellents résultats chez les premiers utilisateurs, notamment Pieces et OllamaSharp.
Tenseurs et tokenizers
Microsoft.Extensions.AI et VectorData ne sont qu'un sous-ensemble des blocs de construction que Microsoft propose dans .NET 9, car elle a également apporté d'importantes améliorations aux bibliothèques et aux types primitifs afin d'améliorer le développement de l'IA. Microsoft.ML.Tokenizers est un tokenizer amélioré pour les familles de modèles les plus populaires, notamment GPT (4,o1,etc), Llama, Phi et Bert, en plus d'une nouvelle prise en charge des algorithmes de tokenisation, notamment BPE au niveau de l'octet, SentencePiece et WordPiece.
Avec l'avènement des modèles de langage en tant que service, la barrière à l'entrée pour les développeurs utilisant l'IA a drastiquement diminué. Tensor<T> bénéficie également d'un coup de pouce pour le développement de l'IA avec un nouveau type pour représenter les données multidimensionnelles afin de simplifier l'interopérabilité entre les bibliothèques et l'application des opérations.
Améliorations de GitHub Copilot pour les développeurs .NET
GitHub Copilot permet d'améliorer la productivité en offrant de meilleurs résultats dans les expériences d'édition et en proposant une assistance AI dans les flux de travail réguliers pour les développeurs .NET. Cette expérience est encore meilleure avec les dernières versions de Visual Studio et Visual Studio Code ainsi que les mises à jour de GitHub Copilot. Get up copilot et les IDE ont été infusés avec l'IA tout au long pour aider dans chaque partie du cycle de vie du développeur, de l'écriture du code, à l'écriture des tests, à et au débogage de vos applications. Voici quelques fonctionnalités que vous pouvez attendre avec impatience dans la dernière version :
- Inspection intelligente des variables par l'IA : les utilisateurs peuvent optimiser leur flux de travail de débogage grâce à l'inspection intégrée des variables par l'IA.
- Visualiseur IEnumerable optimisé par l'IA : Expressions modifiables LINQ optimisées par l'IA dans le visualiseur IEnumerable.
- Corriger le code avec GitHub Copilot : GitHub Copilot aide les développeurs à résoudre les problèmes de code.
- Meilleures complétions AI pour C# : GitHub Copilot apporte un contexte supplémentaire à partir de fichiers source pertinents afin d'améliorer les complétions pour C#.
- Débogage des tests avec GitHub Copilot : les utilisateurs peuvent obtenir de l'aide pour déboguer les tests qui ont échoué en utilisant Debug Tests with GitHub Copilot.
Développement web full stack avec ASP.NET Core et Blazor
ASP.NET Core est le framework web full stack de Microsoft pour .NET, qui fournit tout ce dont les utilisateurs ont besoin pour créer des applications web modernes et des services backend évolutifs. .NET est chargé de nouvelles fonctionnalités et d'améliorations notables en matière de performances, d'accessibilité et de sécurité. Les applications ASP.NET Core construites avec .NET 9 sont sécurisées par défaut, bénéficient d'une prise en charge étendue de la compilation anticipée, d'une surveillance et d'un traçage améliorés, et grâce aux améliorations de performances intégrées, le débit est plus élevé, le temps de démarrage est plus rapide, et tout cela avec une utilisation moindre de la mémoire.
Gestion optimisée des fichiers statiques dans ASP.NET Core
Les actifs web statiques, tels que les fichiers JavaScript et CSS, font partie de presque toutes les applications web. ASP.NET Core dans .NET 9 optimise désormais ces fichiers pendant la construction et la publication pour un déploiement efficace. Au cours de la construction, ASP.NET Core identifie toutes les ressources web statiques et génère des versions avec empreinte digitale de ces fichiers en ajoutant un hachage basé sur le contenu au nom du fichier. L'empreinte garantit que le nom du fichier est unique, ce qui évite l'utilisation d'une version périmée du fichier et permet aux fichiers d'être mis en cache de manière agressive. Les fichiers sont également précompressés à l'aide de Brotli lors de la publication de l'application, ce qui réduit considérablement leur taille de téléchargement et évite de surcharger le serveur avec le travail de compression. Les fichiers sont gérés au moment de l'exécution en utilisant le routage des points de terminaison, ce qui signifie que les développeurs peuvent maintenant utiliser d'autres fonctionnalités sensibles aux extrémités avec leurs fichiers statiques, comme l'autorisation par point de terminaison.
Améliorations de Blazor dans .NET 9
Blazor est plus performant que jamais dans .NET 9 pour permettre aux développeurs de créer de superbes applications Web et hybrides modernes. Cette version apporte des améliorations de performance dans tous les domaines de Blazor, un nouveau modèle d'application hybride et Web Blazor, et de nouvelles API pour les développeurs afin de créer des expériences agréables.
Blazor peut maintenant détecter le mode de rendu des composants au moment de l'exécution en utilisant la nouvelle API RendererInfo et ajuster le rendu des composants en conséquence. Il est possible de désactiver ou de masquer les éléments interactifs pendant le pré-rendu, puis de les activer une fois que le composant est interactif.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | @if (RendererInfo.IsInteractive) { <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> } else { <p>One moment, please</p> } |
Les applications Blazor utilisant le rendu interactif du serveur (Blazor Server) bénéficient d'une nouvelle expérience de reconnexion avec une interface plus conviviale, une reconnexion plus rapide au serveur et un rechargement automatique de la page en cas de perte de connexion de l'utilisateur.
Améliorations de l'OpenAPI dans ASP.NET Core
Les API construites avec ASP.NET Core alimentent des services à travers la planète à grande échelle, et Microsoft a continué à améliorer l'expérience de leur construction à chaque version. L'un des points forts de .NET 9 pour les développeurs d'API est la nouvelle prise en charge intégrée de la génération de documents OpenAPI à l'aide du package Microsoft.AspNetCore.OpenAPI. Les métadonnées sont extraites automatiquement du code de l'application, des attributs et des méthodes d'extension. Le document peut ensuite être personnalisé à l'aide de transformateurs qui agissent sur les opérations, les schémas ou le document dans son ensemble. Dans les applications Minimal API, la fonction est compatible avec l'AOT en natif, ce qui permet d'optimiser les performances de l'application. En outre, le document OpenAPI peut être généré au moment de la construction et intégré dans les flux de développement locaux et les pipelines de construction qui tirent parti de l'outillage OpenAPI.
Sécurité améliorée dans ASP.NET Core
La sécurité continue d'être au cœur d'ASP.NET Core et plusieurs améliorations ont été apportées pour garantir que les applications sont sécurisées par défaut. Il est désormais plus facile de configurer un certificat de développement fiable sur Linux pour activer HTTPS pendant le développement. Blazor dispose désormais d'une API intégrée pour transmettre l'état d'authentification au client, et l'extensibilité pour l'ajout de paramètres supplémentaires aux demandes d'autorisation OAuth et OIDC est disponible, ainsi que la prise en charge des demandes d'autorisation poussées (PAR). Enfin, la prise en charge de la protection des données d'ASP.NET Core a été renforcée et les métriques de connexion de Kestrel ont été améliorées afin de faciliter la détection des raisons de l'échec d'une connexion.
.NET MAUI - Améliorer le développement d'applications multiplateformes
.NET MAUI est le meilleur moyen de créer des applications multiplateformes pour les mobiles et les ordinateurs de bureau avec .NET. Outre une couche d'abstraction unifiée permettant d'accéder aux fonctionnalités natives à partir d'une API unique et de créer de superbes interfaces utilisateur multiplateformes à partir d'une seule base de code, .NET MAUI comprend les bases permettant de créer des applications pour Android, iOS, macOS et Windows en accédant aux API natives de .NET. L'objectif principal de .NET MAUI à l'aube de .NET 9 a été d'améliorer la qualité et la fiabilité afin que les développeurs puissent plus facilement livrer leurs applications en production. Au cours de l'année écoulée, les applications créées avec .NET MAUI ont plus que doublé dans le Google Play Store, l'utilisation par les développeurs a augmenté de plus de 30 % pour atteindre un niveau record, et l'engagement et les contributions de la communauté ont été remarquables.
Les contributions de Syncfusion, l'un des principaux fournisseurs de composants de l'écosystème .NET, ont récemment été intégrées à .NET MAUI. Depuis que Syncfusion a commencé à contribuer à .NET MAUI de juillet à septembre, il a représenté plus de 55 % de toutes les contributions de la communauté, ce qui représente également une augmentation de 557 % par rapport aux trois mois précédents, grâce à un groupe de contributions déjà extraordinaire. Dans .NET 9, la communauté est mise en avant en introduisant un tout nouveau modèle de projet qui inclut 14 contrôles Syncfusion libres et gratuits et d'autres bibliothèques populaires de la communauté qui démontrent les pratiques recommandées pour MVVM, l'accès à la base de données, la navigation, le rafraîchissement de la vue et d'autres modèles d'application courants.
.NET 9 offre des performances et une fiabilité accrues, ainsi que des intégrations plus poussées pour les applications de bureau et mobiles. Des améliorations considérables des performances sont apportées à l'ensemble de .NET MAUI, notamment une nouvelle mise en œuvre de CollectionView et CarouselView pour iOS et Mac Catalyst, des mises à jour des contrôles existants et du cycle de vie des applications, ainsi que des améliorations de l'AOT native et du découpage qui permettent d'élaborer des applications plus petites et plus rapides. En plus de la prise en charge des derniers systèmes d'exploitation iOS, macOS et Android, plusieurs fonctionnalités liées aux plateformes natives ont été ajoutées à .NET 9, notamment les Asset Packs Android, l'amélioration de l'interopérabilité avec les bibliothèques natives et la rationalisation de l'intégration entre Xcode et Visual Studio Code via le nouvel outil Xcode Sync dotnet.
Développement Windows avec .NET 9
Avec .NET 9, les applications Windows ont accès aux dernières fonctionnalités et capacités du système d'exploitation, tout en étant plus performantes et plus accessibles que jamais. Que vous lanciez une nouvelle application moderne avec WinUI 3 et le Windows App SDK ou que vous modernisiez vos applications WPF et WinForms existantes, les applications Windows fonctionneront mieux avec .NET 9. Microsoft a collaboré étroitement avec la communauté des développeurs Windows pour apporter les fonctionnalités demandées. Cela inclut le support AOT natif pour WinUI 3 pour des applications plus petites et plus performantes, des améliorations de thématisation modernes avec Fluent UI pour WPF, et WinForms reçoit un coup de pouce avec un nouveau Dark Mode, des API d'icônes modernes, et un accès API asynchrone amélioré avec Control.InvokeAsync.
C# et F# - Les langages de programmation s'améliorent encore
C# est l'un des langages de programmation les plus populaires et les plus appréciés au monde. Dans C# 13, Microsoft s'est concentré sur des fonctionnalités qui facilitent, sécurisent et accélèrent l'écriture de code dans les styles que vous connaissez et appréciez. L'utilisation du modificateur params dans les signatures de méthodes est renforcée en C# 13 par l'ajout des expressions de collections. Cela signifie que les développeurs ne sont plus limités à l'utilisation de types de tableaux avec params et qu'ils peuvent utiliser n'importe quel type de collection pris en charge.
C# 13 débloque encore plus de code haute performance en introduisant de nouvelles façons d'utiliser les valeurs ref struct et facilite le travail avec des applications multithreads grâce à System.Threading.Lock :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | Lock myLock = new(); void Concat<T>(params List<T> items) { lock (myLock) Console.WriteLine(string.Join("\e[1mItem: \e[0m", items)); } |
F# continue d'offrir la meilleure programmation fonctionnelle aux développeurs .NET. F# 9 apporte une série d'améliorations au langage, aux bibliothèques et aux outils, conçues pour rendre les programmes plus sûrs, plus résistants et plus performants. Les types de référence annulables apportent une sécurité de type aux interactions avec les bibliothèques C#, les plages d'intégrales optimisées accélèrent les boucles for et autres compréhensions, et les vérifications d'égalité optimisées évitent la mise en boîte et augmentent les performances de nombreuses opérations courantes. Les unions discriminées bénéficient de propriétés .Is* autogénérées pour des tests de cas rapides. La bibliothèque standard comprend désormais des fonctions aléatoires pour les collections, qui s'avèrent pratiques pour la science des données et le développement de jeux. La productivité des développeurs est stimulée par l'amélioration des diagnostics, la récupération de l'analyseur syntaxique et diverses améliorations des outils.
Code : | Sélectionner tout |
1 2 3 4 5 6 | // FS3261: Nullness warning: The types 'string' and 'string | null' do not have equivalent nullability. let methodArgument (s: string | null) = File.Create s let matchNullableString(s: string | null) = match s with // `s` is of type string | null | null -> 0 | notNull -> notNull.Length // `notNull` is of type string |
Les meilleurs outils de développement au monde
La sortie de .NET 9 s'accompagne de mises à jour des outils de développement de Microsoft pour vous rendre plus productif que jamais. Tout d'abord, la sortie de Visual Studio 2022 17.12 s'accompagne d'une série d'améliorations de la productivité dans tous les aspects du flux de travail de développeur, avec une forte augmentation des performances, des expériences de débogage et de diagnostic améliorées, une intégration plus étroite avec .NET Aspire, des intégrations cloud plus approfondies, la prise en charge de l'analyseur pour C# 13, une prise en charge améliorée de Git, et bien plus encore ! En fait, cette version de Visual Studio 2022 contient plus de fonctionnalités demandées par les utilisateurs que jamais auparavant. Il y en a pour tous les goûts dans cette version.
C# Dev Kit pour Visual Studio Code continue d'évoluer en améliorant la fiabilité de l'édition, la gestion des packages NuGet, l'adaptateur de test et les résultats de couverture de code, la prise en charge du développement .NET MAUI et les configurations de lancement/débogage de projet.
Dans .NET 9, Microsoft a apporté des améliorations considérables à l'enregistreur de terminal, notamment des liens cliquables, des minuteries de durée, des codes de couleur, etc. La sortie du logger est plus condensée et des résumés du nombre total d'échecs et d'avertissements sont désormais disponibles à la fin de la construction, ce qui la rend plus utilisable que jamais. dotnet restore a également été mis à jour pour auditer les dépendances de premier niveau et transitives à la recherche de vulnérabilités dans les paquets. Cette fonctionnalité s'associe bien avec la gestion centrale des paquets, permettant de déployer rapidement des mises à jour de paquets dans tous les projets d'un repo. `dotnet restore` vous alerte dans votre terminal, Visual Studio, et le pipeline CI/CD, en fonction des vulnérabilités des paquets dans la base de données GitHub Advisory.
Microsoft conclut :
Nous aimons la formidable communauté .NET et sans votre soutien et vos contributions, .NET 9 n'aurait pas été possible. Il y a eu plus de 26 000 contributions de la part de plus de 9 000 membres de la communauté ! Nous vous remercions pour chaque issue, commentaire, révision de code et demande d'extraction que vous avez fait pour aider à faire de cette version la meilleure de .NET à ce jour. Nous apprécions également votre amour pour .NET et le classement de .NET comme le framework le plus admiré avec ASP.NET Core et C# en tant que meilleurs frameworks web et langages de programmation lors de l'enquête Stack Overflow de cette année auprès des développeurs. Merci de nous aider à construire cette étonnante communauté mondiale de développeurs.
Source : Microsoft
Et vous ?
Que pensez-vous de .NET 9 et de ses fonctionnalités ? Les trouvez-vous utiles et intéressantes pour vos projets de développement logiciel ?
Voir aussi :
Microsoft partage sa vision initiale de .NET 9 et publie le premier aperçu de la nouvelle version du framework, dont les domaines d'intérêt sont le développement d'apps cloud-natives et intelligentes
Microsoft annonce .NET 8 avec des améliorations en matière de performances, de stabilité et de sécurité, ainsi que des améliorations de la plateforme et des outils pour accroître la productivité