IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Visual Studio 2022 17.4 est en disponibilité générale et s'accompagne de la prise en charge native d'Arm64
Ainsi que de la possibilité de revenir à votre version précédemment installée de VS

Le , par Stéphane le calme

6PARTAGES

6  0 
Marc Goodner Program Manager, C++, a annoncé la disponibilité générale de Visual Studio 2022 17.4 : « Nous sommes heureux d'annoncer que Visual Studio 2022 17.4 est désormais généralement disponible. Il s'agit de notre première version GA prenant en charge Arm64. En outre, certaines des autres fonctionnalités importantes qu'il inclut sont .NET 7, le support d'entreprise pour la configuration, y compris la restauration, et beaucoup d'autres ».

.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

Citation Envoyé par Affichage à l'écran
<source>(16,10): error C2665: 'pet': none of the 2 overloads could convert all the argument types
pet(0); //oh no
^
<source>(6,6): note: could be 'void pet(dog)'
void pet(dog);
^
<source>(5,6): note: or 'void pet(cat)'
void pet(cat);
^
<source>(16,5): note: 'void pet(cat)': cannot convert argument 1 from 'int' to 'cat'
pet(0); //oh no
^
<source>(16,10): note: No constructor could take the source type, or constructor overload resolution was ambiguous
pet(0); //oh no
^
<source>(5,6): note: see declaration of 'pet'
void pet(cat);
^
<source>(16,10): note: while trying to match the argument list '(int)'
pet(0); //oh no

Erreur dans la version 17.4 :

Citation Envoyé par Affichage à l'écran
<source>(16,5): error C2665: 'pet': no overloaded function could convert all the argument types
pet(0); //oh no
^
<source>(6,6): note: could be 'void pet(dog)'
void pet(dog);
^
<source>(16,5): note: 'void pet(dog)': cannot convert argument 1 from 'int' to 'dog'
pet(0); //oh no
^
<source>(16,9): note: No constructor could take the source type, or constructor overload resolution was ambiguous
pet(0); //oh no
^
<source>(5,6): note: or 'void pet(cat)'
void pet(cat);
^
<source>(16,5): note: 'void pet(cat)': cannot convert argument 1 from 'int' to 'cat'
pet(0); //oh no
^
<source>(16,9): note: No constructor could take the source type, or constructor overload resolution was ambiguous
pet(0); //oh no
^
<source>(13,6): note: or 'void pet(T)'
void pet(T);
^
<source>(16,5): note: the associated constraints are not satisfied
pet(0); //oh no
^
<source>(12,11): note: the concept 'has_member_pettable<int>' evaluated to false
template <has_member_pettable T>
^
<source>(9,48): note: the expression is invalid
concept has_member_pettable = requires (T t) { t.pet(); };
^
<source>(16,5): note: while trying to match the argument list '(int)'
pet(0); //oh no

Dans le cadre de ce travail, Microsoft a également ajouté un support expérimental pour la sortie des diagnostics du compilateur en tant que SARIF. Il est accessible avec le drapeau expérimental /experimental:log<répertoire>.

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...
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.

Une erreur dans cette actualité ? Signalez-nous-la !