
Lors de la Microsoft Build 2024, Microsoft a dévoilé un nouvel ensemble de fonctionnalités et d'outils conçus pour rendre le développement .NET plus rapide et plus facile.
Voici un aperçu des mises à jour et annonces :
- Intelligence artificielle : Des scénarios de bout en bout pour construire des applications basées sur l'IA, l'adoption de l'écosystème de l'IA et l'intégration profonde avec les services cloud.
- .NET Aspire : pour la création d'applications distribuées cloud-natives.
- C# 13 : Améliorations des fonctionnalités C# les plus appréciées afin de les rendre encore meilleures pour vous.
- Performance : Réduction de la mémoire et du temps d'exécution à l'aide de points de référence critiques.
- Améliorations apportées aux bibliothèques et frameworks .NET, notamment ASP.NET Core, Blazor, .NET MAUI, et bien plus encore.
.NET et l'intelligence artificielle
.NET fournit des outils pour créer des applications puissantes avec l'IA. Vous pouvez utiliser le noyau sémantique pour orchestrer des plugins d'IA, ce qui vous permet d'intégrer de manière transparente des fonctionnalités d'IA dans vos applications.
Vous pouvez utiliser des bibliothèques de pointe comme OpenAI, Qdrant et Milvus pour améliorer la fonctionnalité de vos applications. Vous pouvez également déployer vos applications dans le cloud avec .NET Aspire, ce qui garantit des performances et une évolutivité optimales.
Principes fondamentaux de l'IA
Microsoft introduit un nouveau type Tensor<T>. Les tenseurs sont des composants fondamentaux de nombreux modèles mathématiques, y compris les algorithmes d'apprentissage profond. Il s'agit de tableaux multidimensionnels qui contiennent des poids, des biais et des calculs intermédiaires au sein des réseaux neuronaux.
Cela permet un traitement efficace des données et un flux d'informations à des fins d'apprentissage et de prédiction. Qu'il s'agisse de reconnaissance d'images, de compréhension du langage ou de prévision des tendances, les tenseurs jouent un rôle crucial dans toutes les facettes de l'IA.
En outre, ils facilitent le partage des données entre des bibliothèques telles que ONNX Runtime, TorchSharp ou ML.NET, la création de vos propres bibliothèques mathématiques ou le développement d'applications utilisant des modèles d'IA. La performance est essentielle et on obtient des efficacités supplémentaires en construisant sur les TensorPrimitives, qui utilisent les instructions SIMD pour optimiser le débit.
Commencez rapidement à créer des applications d'IA
Le monde de l'IA évolue rapidement, et Microsoft souhaite que les développeurs puissent commencer rapidement avec un minimum de changements dans leur code.
Microsoft déclare :
Essayez nos nouveaux échantillons de démarrage rapide de l'IA pour voir comment vous pouvez commencer à utiliser des frameworks LLM comme Semantic Kernel pour accéder rapidement à l'écosystème de l'IA. Semantic Kernel permet aux développeurs d'exploiter différents modèles, de se connecter à des magasins de vecteurs et de simplifier leur processus d'invite avec des modèles.
En plus de nos échantillons, nous avons développé des Smart Components, des contrôles préconstruits avec des fonctionnalités d'IA de bout en bout, conçus spécifiquement pour Blazor et MVC / Razor. Ces composants peuvent être intégrés à vos applications existantes en quelques minutes pour leur insuffler des capacités d'IA.
Avec les Smart Components, les équipes peuvent gagner un temps de développement considérable et éviter la nécessité d'une conception UX étendue ou d'une recherche approfondie sur l'apprentissage automatique et l'ingénierie rapide. Actuellement, nous disposons de trois composants intelligents que vous pouvez intégrer, à savoir : SmartPasteButton, SmartTechnology et SmartPasteButton : SmartPasteButton, SmartTextArea et SmartComboBox.
En plus de nos échantillons, nous avons développé des Smart Components, des contrôles préconstruits avec des fonctionnalités d'IA de bout en bout, conçus spécifiquement pour Blazor et MVC / Razor. Ces composants peuvent être intégrés à vos applications existantes en quelques minutes pour leur insuffler des capacités d'IA.
Avec les Smart Components, les équipes peuvent gagner un temps de développement considérable et éviter la nécessité d'une conception UX étendue ou d'une recherche approfondie sur l'apprentissage automatique et l'ingénierie rapide. Actuellement, nous disposons de trois composants intelligents que vous pouvez intégrer, à savoir : SmartPasteButton, SmartTechnology et SmartPasteButton : SmartPasteButton, SmartTextArea et SmartComboBox.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @page "/" @using SmartComponents <form> <p>Name: <InputText @bind-Value="@name" /></p> <p>Address line 1: <InputText @bind-Value="@addr1" /></p> <p>City: <InputText @bind-Value="@city" /></p> <p>Zip/postal code: <InputText @bind-Value="@zip" /></p> <button type="submit">Submit</button> <SmartPasteButton DefaultIcon /> </form> @code { string? name, addr1, city, zip; } |
Élargissement de l'écosystème IA avec .NET
Microsoft annonce avoir collaboré avec de nombreux partenaires de l'industrie pour permettre aux développeurs d'exploiter l'écosystème de l'IA.
Microsoft :
L'une de nos collaborations les plus intéressantes cette année a été celle avec OpenAI. Nous nous sommes associés à eux pour fournir une bibliothèque .NET officielle, qui devrait être publiée dans le courant du mois. Cette collaboration et ce nouveau SDK garantissent aux développeurs .NET une expérience agréable et une parité avec les bibliothèques d'autres langages de programmation que vous connaissez peut-être. Il prend également en charge les dernières fonctionnalités et modèles OpenAI, tels que GPT4o et Assistants v2, et offre une expérience unifiée entre OpenAI et Azure OpenAI.
Nos partenariats ne s'arrêtent pas là. L'année dernière, nous avons annoncé des clients C# officiels avec Qdrant et Milivus. Nos efforts de collaboration se poursuivent avec des partenaires comme Weavite pour offrir aux développeurs une variété d'options de bases de données vectorielles .NET.
Enfin, nous avons travaillé avec des équipes de Microsoft, notamment Semantic Kernel, Azure SQL et Azure AI Search, afin de garantir que nos développeurs puissent bénéficier d'une expérience native transparente avec leurs capacités d'IA.
L'une de nos collaborations les plus intéressantes cette année a été celle avec OpenAI. Nous nous sommes associés à eux pour fournir une bibliothèque .NET officielle, qui devrait être publiée dans le courant du mois. Cette collaboration et ce nouveau SDK garantissent aux développeurs .NET une expérience agréable et une parité avec les bibliothèques d'autres langages de programmation que vous connaissez peut-être. Il prend également en charge les dernières fonctionnalités et modèles OpenAI, tels que GPT4o et Assistants v2, et offre une expérience unifiée entre OpenAI et Azure OpenAI.
Nos partenariats ne s'arrêtent pas là. L'année dernière, nous avons annoncé des clients C# officiels avec Qdrant et Milivus. Nos efforts de collaboration se poursuivent avec des partenaires comme Weavite pour offrir aux développeurs une variété d'options de bases de données vectorielles .NET.
Enfin, nous avons travaillé avec des équipes de Microsoft, notamment Semantic Kernel, Azure SQL et Azure AI Search, afin de garantir que nos développeurs puissent bénéficier d'une expérience native transparente avec leurs capacités d'IA.
Les applications de grand modèle de langage (LLM) nécessitent des résultats fiables, performants et de haute qualité. Les développeurs doivent mesurer et suivre les résultats et les comportements de leurs applications LLM dans les environnements de développement et de production, et identifier et résoudre les problèmes.
L'équipe .Net de Microsoft travaille sur la manière dont les développeurs peuvent utiliser .NET Aspire, Semantic Kernel et Azure pour surveiller leurs applications d'IA. Ces fonctionnalités sont en cours de prévisualisation.
Les images suivantes montrent comment vous pouvez utiliser .NET Aspire avec un code minimal pour collecter des métriques détaillées et des données de traçage à partir de Semantic Kernel, telles que le modèle, le nombre de jetons, l'invite et la réponse générée, en suivant la convention standard OpenTelemetry pour les LLM qui est actuellement en cours de conception.
De plus, la collecte de ces données télémétriques avec Semantic Kernel devrait être simple, avec seulement quelques lignes de code :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | // Enable the draft OpenTelemetry LLM data to be collected AppContext.SetSwitch("Microsoft.SemanticKernel.Experimental.GenAI.EnableOTelDiagnosticsSensitive", true); // Export the data builder.Services.AddOpenTelemetry() .WithMetrics(m => m.AddMeter("Microsoft.SemanticKernel*")) .WithTracing(t => t.AddSource("Microsoft.SemanticKernel*")); |
Développement cloud-natif avec .NET
En utilisant .NET, vous pouvez créer des applications cloud-natives sécurisées, efficaces, résilientes, observables et configurables. Microsoft annonce avoir amélioré le développement d'apps cloud-natives avec la version reach en proposant :
- Des conteneurs ciselés : Réduction de la taille des images de conteneurs .NET
- NativeAOT & Trimming : Réduction de la taille de l'application tout en améliorant le temps de démarrage de l'application
- De nouvelles fonctionnalités et bibliothèques pour ASP.NET Core afin de rationaliser les scénarios cloud-native.
- Performance : Exploiter chaque goutte de performance dans tous les frameworks et bibliothèques.
.NET Aspire : Simplifier le développement cloud-natif
.NET Aspire est une nouvelle pile qui simplifie le développement d'applications et de services cloud-natifs .NET. .NET Aspire est désormais disponible pour tous.
.NET Aspire permet de créer des applications distribuées, y compris l'orchestration de projets, des composants à intégrer avec des services et des plates-formes de premier plan, la découverte de services, les valeurs par défaut des services, et bien plus encore.
L'un des points forts de .NET Aspire est le tableau de bord, qui offre une vue consolidée des ressources de vos applications, avec des journaux, des traces distribuées et des mesures. Qu'il soit exécuté dans la boucle interne du développeur local ou déployé dans le cloud, le tableau de bord offre une vue en temps réel, centrée sur le développeur, de ce que fait votre application à l'instant même.
Les développeurs doivent déployer des applications distribuées tout au long de leur processus de développement pour effectuer des tests rapides et doivent être en mesure de les déployer facilement en production le moment venu. .NET Aspire est là pour vous aider avec de puissantes fonctionnalités pour amener vos applications dans le cloud, avec la prise en charge du provisionnement et de la connexion aux services cloud dans Azure et AWS pendant le développement et le déploiement d'applications vers Azure Container Apps à l'aide de l'interface CLI du développeur Azure, ou Kubernetes avec Aspirate.
.NET est natif pour Linux
.NET est multiplateforme. Microsoft se donne pour mission de veiller à ce que .NET fonctionne de manière spectaculaire partout où les développeurs créent des applications. Ils ont beaucoup investi dans l'amélioration des flux de travail des développeurs et de la production pour les applications fonctionnant sous Linux.
Microsoft :
Nous travaillons avec Canonical, Red Hat et d'autres mainteneurs pour nous assurer que les paquets .NET sont disponibles à l'installation à partir des flux officiels et mis à jour pour les correctifs de sécurité selon le même calendrier que Microsoft.
Nous travaillons avec Canonical, Red Hat et d'autres mainteneurs pour nous assurer que les paquets .NET sont disponibles à l'installation à partir des flux officiels et mis à jour pour les correctifs de sécurité selon le même calendrier que Microsoft.
Réduction de l'utilisation de la mémoire
La gestion automatique de la mémoire a toujours été une caractéristique clé de .NET, avec un ramasse-miette optimisé pour de nombreux scénarios. En ce qui concerne le développement d'apps cloud-natives, .NET 9 introduit un nouveau mode de ramasse-miette (GC) serveur. Ce nouveau mode réduit l'utilisation de la mémoire, ce qui peut réduire les coûts, tout en offrant les mêmes excellentes performances que celles qui font la réputation de .NET.
Microsoft :
Qu'est-ce que cela signifie pour les applications cloud-natives ? Imaginez que vous ayez un cluster Kubernetes avec deux nœuds. Cette nouvelle fonctionnalité permettra de rester automatiquement dans ces deux nœuds plus longtemps en répondant de manière adaptative au trafic en fonction de l'ampleur des demandes.
Qu'est-ce que cela signifie pour les applications cloud-natives ? Imaginez que vous ayez un cluster Kubernetes avec deux nœuds. Cette nouvelle fonctionnalité permettra de rester automatiquement dans ces deux nœuds plus longtemps en répondant de manière adaptative au trafic en fonction de l'ampleur des demandes.
Chaque version de .NET met l'accent sur les performances, et .NET 9 n'échappe pas à la règle. Cette fois-ci, Microsoft annonce une nouvelle série de changements profonds qui rendront vos applications plus rapides et plus légères en production :
- Les exceptions sont désormais 2 à 4 fois plus rapides, grâce à une implémentation plus moderne.
- Les boucles deviennent plus rapides grâce au loop hoisting et à l'élargissement des variables d'induction.
- Le PGO dynamique est maintenant plus efficace en réduisant le coût des vérifications de type.
- RyuJIT peut offrir de meilleures performances en intégrant davantage de méthodes génériques.
- Le code Arm64 peut être écrit pour être beaucoup plus rapide en utilisant les instructions SIMD SVE/SVE2 sur Arm64.
C# 13
C# 13 met l'accent sur la flexibilité et la performance, en améliorant la plupart de vos fonctionnalités préférées. Microsoft a amélioré les paramètres params pour vous offrir plus de flexibilité. Ils annoncent également les types d'extension, et ajoutent plusieurs fonctionnalités pour améliorer les performances, certaines d'entre elles étant gratuites, sans que vous ayez à modifier votre code.
Amélioration des params C#
Les params ne sont plus limités aux tableaux !
Lorsque le mot-clé params apparaît devant un paramètre, les appels à la méthode peuvent fournir une liste délimitée par des virgules de zéro ou plusieurs valeurs et ces valeurs sont placées dans une collection du type du paramètre. À partir de C# 13, le type de paramètre params peut être n'importe lequel des types utilisés avec les expressions de collection, comme List<T>, Span<T> et IEnumerable<T>. Vous pouvez même utiliser vos propres types de collection s'ils respectent des règles particulières.
Il vous suffit de spécifier un type de collection différent comme type de paramètre :
Code : | Sélectionner tout |
1 2 3 4 5 6 | void PrintList(params IEnumerable<string> list) => Console.WriteLine(string.Join(", ", list)); PrintList("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); // prints "Sun, Mon, Tue, Wed, Thu, Fri, Sat" |
Améliorer les params avec les spans
Un aspect important des performances est la réduction de l'utilisation de la mémoire, et System.Span<T> et System.ReadonlySpan<T> sont des outils permettant de réduire les allocations de mémoire.
Si vous souhaitez utiliser un span, il vous suffit d'utiliser le type de paramètre params pour un type de span. Les valeurs passées au paramètre params sont implicitement converties en ce type de span. Si vous avez deux signatures de méthode qui ne diffèrent que par le fait que l'une est un span et l'autre un tableau et que le code appelant utilise une liste de valeurs, la surcharge span est sélectionnée. Cela signifie que vous exécutez le code le plus rapide disponible et qu'il est plus facile d'ajouter span à vos applications.
De nombreuses méthodes du Runtime .NET ont été mises à jour pour accepter les params Span<T>, de sorte que vos applications fonctionneront plus rapidement, même si vous n'utilisez pas directement les span.
params et interfaces
params prend en charge les interfaces. Si aucun type concret n'est spécifié, comment le compilateur peut-il savoir quel type utiliser ?
À l'instar des expressions de collection en C# 12, lorsque vous spécifiez une interface comme type de paramètre, vous indiquez clairement que vous voulez tout ce qui implémente cette interface. Les interfaces clés sont mises en correspondance avec l'implémentation. Le compilateur peut utiliser un type existant ou en créer un. Vous ne devez pas dépendre du type de collection concret sous-jacent, car il sera modifié si un meilleur type est disponible.
L'avantage de cette conception est que vous pouvez utiliser des interfaces pour vos types de paramètres. Si vous passez une valeur d'un type qui implémente l'interface, elle sera utilisée. Lorsqu'une liste de valeurs ou une expression de collection est passée, le compilateur vous donnera le meilleur type concret.
Types d'extension
Depuis C# 3, les méthodes d'extension vous permettent d'ajouter des méthodes à un type sous-jacent, même si vous ne pouvez pas modifier son code. LINQ est un exemple d'un ensemble de méthodes d'extension sur IEnumerable<T>. Les méthodes d'extension LINQ apparaissent comme des méthodes d'instance du type sous-jacent.
C# 13 passe à l'étape suivante avec les types d'extension. Il s'agit d'un nouveau type qui fournit des membres d'extension pour un type sous-jacent. Ils possèdent des méthodes, des propriétés et d'autres membres qui peuvent être de type instance ou statique. Les types d'extension d'instance ne peuvent pas contenir d'état. Par exemple, ils ne peuvent pas inclure de champs. Ils peuvent accéder à l'état du type sous-jacent ou à un autre emplacement.
Il existe deux types d'extensions : les extensions implicites et les extensions explicites. Les types d'extension implicites s'appliquent à toutes les occurrences du type sous-jacent - de la même manière que les méthodes d'extension aujourd'hui. Les méthodes et propriétés d'extension explicite ne s'appliquent qu'aux instances du type sous-jacent qui ont été converties en type d'extension explicite.
Un type d'extension s'appuie sur un type sous-jacent, qui n'est autre qu'un type C# normal. L'une des raisons pour lesquelles vous pouvez utiliser une extension est que vous ne pouvez pas modifier le code du type sous-jacent.
Du point de vue de l'utilisation, les types d'extension vous permettent de simplifier le code qui fournit le travail important et la logique de votre application. Pour ce faire, ils organisent les extensions et fournissent des extensions qui personnalisent des instances spécifiques des objets sous-jacents.
D'un point de vue technique, les types d'extension constituent une amélioration des méthodes d'extension que vous utilisez aujourd'hui. Vous pourrez les expérimenter dans un futur aperçu de C# 13.
Développement web avec .NET
.NET inclut ASP.NET Core, qui contient ce dont vous avez besoin pour créer des applications web modernes, y compris des applications web basées sur le navigateur ou des services backend évolutifs. Avec .NET, il n'est pas nécessaire d'assembler une solution à partir de plusieurs frameworks différents. .NET est conçu pour la sécurité et optimisé pour les performances, de sorte que vous êtes prêt à gérer n'importe quel scénario de serveur.
Microsoft :
Nous continuons à améliorer l'expérience de développement web avec .NET et ASP.NET Core. Dans .NET 9, nous nous concentrons sur la qualité et les principes fondamentaux, notamment les performances, la sécurité et la fiabilité. Les fonctionnalités ASP.NET Core existantes bénéficient également d'importantes mises à jour pour répondre aux besoins des applications cloud-natives modernes.
Nous continuons à améliorer l'expérience de développement web avec .NET et ASP.NET Core. Dans .NET 9, nous nous concentrons sur la qualité et les principes fondamentaux, notamment les performances, la sécurité et la fiabilité. Les fonctionnalités ASP.NET Core existantes bénéficient également d'importantes mises à jour pour répondre aux besoins des applications cloud-natives modernes.
La spécification OpenAPI permet aux développeurs de définir la forme des API dans un format standardisé qui peut être inséré dans les générateurs de clients, les générateurs de serveurs, les outils de test, la documentation, etc. ASP.NET Core offre désormais une prise en charge intégrée pour la génération de documents OpenAPI représentant des API minimales ou basées sur des contrôleurs.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapGet("/hello/{name}", (string name) => $"Hello {name}"!); app.Run(); |
Mise en cache distribuée améliorée avec HybridCache
La prise en charge de la mise en cache distribuée par ASP.NET Core est améliorée grâce à la nouvelle API HybridCache. HybridCache complète le support IDistributedCache existant dans ASP.NET Core avec de nouvelles capacités, y compris le stockage multi-niveaux, avec un cache in-process (L1) limité complété par un cache out-of-process (L2) séparé (généralement plus grand).
Cette approche "hybride" du stockage en cache offre le meilleur des deux mondes : la plupart des recherches sont servies efficacement à partir de L1, mais les données à démarrage à froid et celles auxquelles on accède moins souvent ne pèsent pas sur le backend sous-jacent, grâce à L2.
HybridCache comprend également une protection contre la "ruée" (pour empêcher les extractions parallèles du même travail) et une sérialisation configurable, tout en simplifiant l'utilisation de l'API pour les scénarios courants.
HybridCache est conçu pour remplacer directement la plupart des scénarios IDistributedCache, tout en offrant davantage de fonctionnalités, une meilleure convivialité et des performances améliorées. Dans les tests de référence de Microsoft, HybridCache est presque 1000 fois plus rapide que l'utilisation d'IDistributedCache dans les scénarios de taux d'accès au cache élevé grâce à son stockage en cache à plusieurs niveaux. Les performances de la mise en cache sont encore améliorées lors de l'utilisation de types immuables.
Interface Web Full Stack avec Blazor
Blazor rend la construction d'une interface web pour vos applications ASP.NET Core simple et productive. Les développeurs Blazor qui sont passés à .NET 8 ont profité des nouvelles fonctionnalités, notamment le rendu statique du serveur, le rendu en continu, l'amélioration de la navigation et de la gestion des formulaires, et bien plus encore.
Microsoft annonce également de nouvelles fonctionnalités :
[LIST][*]Injection de constructeur de composant : Blazor prend désormais en charge l'injection de constructeur pour les composants, en plus de la prise en charge existante de l'injection de propriété avec @inject. L'injection de constructeur prend en charge les services optionnels et fonctionne parfaitement avec la vérification de l'état nul.
[*]Compression WebSocket : Le trafic WebSocket pour le rendu interactif du serveur est désormais compressé par défaut, ce qui réduit considérablement la taille de la charge utile du message.
[*]Rendu statique des pages des applications globalement interactives : Vous pouvez maintenant exclure les pages du routage interactif dans les applications Web Blazor configurées pour l'interactivité globale et les forcer à effectuer un rendu statique à partir du serveur. Ceci est utile lorsque la majeure partie de votre...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.