.NET 7 fait partie de Visual Studio 2022 17.4
La version stable de .NET 7 a été officiellement publiée mardi, jour d'ouverture de l'événement en ligne .NET Conf, en tant que sa plateforme de développement multiplateforme open source de Microsoft.
.NET 7 fait enfin ce que .NET 5 était censé faire en 2020 : couronner les efforts déployés par Microsoft depuis des années pour unifier des produits de développement disparates avec « un seul .NET à l'avenir ». Microsoft estime que les mots clés de cette version sont « unifié », « moderne » et « simple ». Le terme « unifié » signifie que .NET 7 est basé sur une seule bibliothèque de classes de base (Base Class Library - BCL). Toutefois, cela ne signifie pas que les fonctions spécifiques à la plateforme ne sont pas disponibles, et les API spécifiques au système d'exploitation sont accessibles en spécifiant le moniker de trame cible (TFM) suivant.
En matière de « modernité », .NET MAUI, une bibliothèque d'interface utilisateur multiplateforme, fait désormais partie de .NET 7. .NET 7 est conçu pour les applications natives modernes, les clients mobiles, les services périphériques et les technologies de bureau. Créez des expériences mobiles à l'aide d'une base de code unique sans compromettre les performances natives grâce à .NET MAUI. Créez des applications à page unique (SPA) réactives qui s'exécutent dans votre navigateur et hors ligne en tant qu'applications Web progressives (PWA) à l'aide de technologies familières comme C# et les modèles Razor.
Ces expériences modernes plus rapides ne sont pas uniquement destinées aux nouvelles applications. L'assistant de mise à niveau .NET vous fournira des informations sur la compatibilité et, dans certains cas, assurera la migration complète de vos applications vers .NET 6 et .NET 7. Quant au mot "simple", Microsoft a mentionné des améliorations du langage : la BCL a introduit une interface générique liée aux mathématiques qui permet d'effectuer des opérations mathématiques de manière générique, c'est-à-dire indépendamment du type exact. Il n'est pas nécessaire de surcharger les méthodes pour chaque type.
« .NET 7 apporte à vos applications des performances accrues et de nouvelles fonctionnalités pour C# 11/F# 7, .NET MAUI, ASP.NET Core/Blazor, les API Web, WinForms, WPF, etc. Avec .NET 7, vous pouvez aussi facilement conteneuriser vos projets .NET 7, mettre en place des flux de travail CI/CD dans les actions GitHub et obtenir une observabilité cloud-native », ont écrit Jon Douglas, Jeremy Likness et Angelos Petropoulos dans un billet de blogue mardi.
Améliorations apportées dans le support de C++
MSVC
L'un des principaux investissements pour cette version a été l'amélioration des diagnostics du compilateur. Les nouvelles fonctionnalités C++ telles que les concepts et les plages offrent la possibilité d'un code plus expressif et d'API mieux définies. Cependant, pour en tirer le meilleur parti, de meilleurs diagnostics sont nécessaires à partir de l'outillage afin que les défaillances de contraintes puissent être identifiées et résolues. Voici un exemple rapide de l'amélioration, montrant des informations plus complètes sur les échecs de résolution de surcharge et des informations sur les raisons pour lesquelles une contrainte donnée a échoué :
Code C++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | struct cat {}; struct dog {}; // can pet cats and dogs void pet(cat); void pet(dog); template <class T> concept has_member_pettable = requires (T t) { t.pet(); }; // allow calling as a non-member template <has_member_pettable T> void pet(T); int main() { pet(0); //oh no } |
Erreur dans la version 17.3
Envoyé par Affichage à l'écran
Envoyé par Affichage à l'écran
En plus des diagnostics améliorés, Microsoft a étendu les capacités d'optimisation de la valeur de retour nommée (NRVO) du compilateur. Les principales améliorations consistent à activer NRVO pour les cas impliquant la gestion des exceptions ou des boucles. Par exemple, dans la version 17.3, la copie/déplacement du résultat lors de son retour ne serait pas élidé, mais dans la version 17.4, elle le sera désormais.
Code C++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 | Foo ReturnInALoop(int iterations) { for (int i = 0; i < iterations; ++i) { Foo result; if (i == (iterations / 2)) { return result; //copy/move elided } } } |
CMake et multiplateforme
Les conteneurs sont un excellent moyen de tout regrouper pour exécuter une application. Grâce à un Dockerfile, tous les prérequis sont capturés afin qu'il existe un environnement d'exécution cohérent partout où le conteneur est déployé et exécuté. Les conteneurs de développement étendent ce concept pour capturer tout ce qui est nécessaire au développement et à la création d'une application dans le conteneur. Vous pouvez désormais utiliser Dev Containers pour vos projets C++ dans Visual Studio.
Outils groupés
Microsoft a effectué plusieurs mises à jour des outils supplémentaires fournis avec Visual Studio dans certaines charges de travail.
Si vous utilisez Visual Studio sur des machines Arm64, vous obtiendrez désormais les versions Arm64 de CMake et Ninja via les composants CMake du programme d'installation de Visual Studio.
Microsoft a mis à jour la version de CMake : Visual Studio 2022 17.4 embarque CMake en version 3.24.1. Cette version comprend de nombreuses nouvelles fonctionnalités, notamment un indicateur CLI –fresh pour supprimer le cache CMake, la comparaison de chemin dans les expressions if et la version 5 de CMakePresets.json. Microsoft va ajouter la prise en charge de CMakePresets.json version 5 dans la version 17.5 de Visual Studio 2022, mais 17.4 est livré avec une prise en charge supplémentaire de la version 4.
Productivité
Lors de l'utilisation de la fonction "Créer une déclaration/définition", le nouveau code s'ouvrait dans une petite fenêtre pour vous donner un "aperçu". Ceci est maintenant configurable*: vous pouvez choisir entre jeter un coup d'œil (par défaut), ou ouvrir le document, ou pas de navigation. Le paramètre se trouve sous Options > Éditeur de texte > C/C++ > Avancé > Refactoring.
Arm64
Il s'agit de la première version en disponibilité générale de Visual Studio qui prend en charge de manière native la création et le débogage d'applications Arm64 sur des processeurs basés sur Arm. Cette version est lancée avec les charges de travail suivantes activées*:
- Développement desktop .NET
- Développement NET et web
- Développement desktop avec C++
- Développement UWP (Universal Windows Platform)
- Développement d'extensions Visual Studio
- Développement de jeux en C++
- Développement js
Cette version inclut des performances natives pour le SDK Windows (Win UI 2 et UWP) ainsi qu'une prise en charge native du SDK Win App (Win UI 3)*!
L'industrie s'est orientée vers les processeurs ARM, tout comme .NET. L'un des principaux avantages des processeurs ARM est l'efficacité énergétique. Cela permet d'obtenir les meilleures performances avec la plus faible consommation d'énergie. Autrement dit, vous pouvez faire plus avec moins. Dans .NET 5, Microsoft a décrit les initiatives qu'il a prises en matière de performances pour ARM64. Aujourd'hui, deux versions plus tard, l'entreprise partage le chemin parcouru. Son objectif permanent est d'atteindre la parité de performances entre x64 et ARM64 afin d'aider les clients à transférer leurs applications .NET vers ARM.
Améliorations du temps d'exécution
Selon Microsoft, l'une des difficultés rencontrées lors des recherches sur x64 et ARM64 a été de découvrir que la taille du cache L3 n'était pas correctement lue sur les machines ARM64. L'équipe a modifié l'heuristique pour renvoyer une taille approximative si la taille du cache L3 ne pouvait pas être récupérée à partir du système d'exploitation ou du BIOS de la machine. Elle peut maintenant mieux évaluer le nombre de cœurs par taille de cache L3. Ensuite, elle a compris l'atomique de LSE. Ce qui, si vous n'êtes pas familier, fournit des API atomiques pour obtenir un accès exclusif aux régions critiques.
Sur les machines x86-x64 à architecture CISC, les opérations de lecture-modification-écriture (RMW) sur la mémoire peuvent être effectuées par une seule instruction en ajoutant un préfixe de verrouillage. Cependant, sur les machines à architecture RISC, les opérations RMW ne sont pas autorisées et toutes les opérations sont effectuées par le biais de registres. Par conséquent, pour les scénarios de concurrence, ils ont une paire d'instructions. L'instruction "Load Acquire" (ldaxr) permet d'obtenir un accès exclusif à la région de mémoire de telle sorte qu'aucun autre cœur ne puisse y accéder et l'instruction "Store Release" (stlxr) libère l'accès pour les autres cœurs.
Entre ces paires, les opérations critiques sont effectuées. Si l'opération stlxr a échoué parce qu'un autre processeur a opéré sur la mémoire après avoir chargé le contenu à l'aide de ldaxr, il existe un code pour réessayer (cbnz saute en arrière pour réessayer) l'opération. ARM a introduit les instructions atomiques LSE dans la version 8.1. Avec ces instructions, de telles opérations peuvent être effectuées en moins de code et plus rapidement que la version traditionnelle. Lorsque l'équipe a activé cette fonction pour Linux, puis l'a étendue à Windows, elle a constaté un gain de performance d'environ 45 %.
Améliorations des bibliothèques
Pour optimiser les bibliothèques qui utilisent des intrinsèques, l'équipe a ajouté de nouvelles aides multiplateformes. Il s'agit notamment d'aides pour Vector64, Vector128 et Vector256. Les aides multiplateformes permettent d'unifier les algorithmes de vectorisation en remplaçant les intrinsèques spécifiques au matériel par des intrinsèques agnostiques au matériel. Cela profitera aux utilisateurs de toutes les plateformes, mais l'équipe s'attend à ce que la plateforme ARM64 en bénéficie le plus, car les développeurs sans expertise ARM64 pourront toujours utiliser les aides pour tirer parti des intrinsèques du matériel Arm64.
Prise en charge d'Arm64 pour les développeurs managés
.NET 6 offre une prise en charge native d'Arm64 depuis le premier jour, et Microsoft étend la prise en charge native d'Arm64 pour .NET Framework sous la forme du runtime .NET Framework 4.8.1 et du SDK. Vous pouvez désormais créer des applications desktop Arm gérées en utilisant à la fois .NET 7/6 et .NET Framework 4.8.1.
La version 17.4 GA prend en charge Windows Forms, WPF, Win UI 3, Win UI 2 et la plateforme Windows universelle (UWP). La prise en charge de.NET MAUI sera disponible dans une future préversion de Visual Studio.
Prise en charge d'Arm64 pour les développeurs natifs
L'ensemble d'outils MSVC, y compris le compilateur C++, les bibliothèques et le runtime, prend en charge le ciblage d'Arm64 depuis un certain temps maintenant. Cependant, lorsqu'ils s'exécutaient directement sur des appareils Arm64, les compilateurs s'exécutaient de manière émulée. Avec la version d'aujourd'hui, vous avez accès au nouvel ensemble d'outils de compilateur natif Arm64 MSVC, y compris ses capacités d'analyse de code C++, tout en ciblant toutes les plates-formes actuellement prises en charge par MSVC.
Vcpkg s'exécute en mode natif sur Arm64, et bien que certains outils tiers dépendants puissent encore être émulés, vous pouvez créer et consommer avec succès plus de 600 bibliothèques C++ directement dans votre environnement de construction ARM64 natif.
Cette version regroupe également les versions Arm64 de CMake et Ninja.
Les charges de travail de développement de bureau et de jeu C++ activent C++, avec MSBuild ou CMake, et toutes les fonctionnalités d'édition, de création et de débogage que vous connaissez déjà dans Visual Studio sur votre matériel Arm64.
Possibilité d'annuler une mise à jour de Visual Studio
Envoyé par Microsoft
Source : Microsoft
Voir aussi :
C# 11 est disponible et apporte les littéraux de chaîne UTF-8, les littéraux de chaîne bruts, ainsi que l'abstraction sur les membres statiques
.NET 7 est maintenant disponible en tant que plateforme de développement unifiée de Microsoft, et apporte des améliorations pour .NET MAUI et le support de .NET pour ARM64