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 !

.NET 5 Preview 1 est disponible et apporte des améliorations des performances d'expression régulière
Ainsi que des améliorations de la qualité du code dans RyuJIT

Le , par Stéphane le calme

192PARTAGES

12  0 
À la fin de l'année dernière, Microsoft a livré .NET Core 3.0 et 3.1. Ces versions ont ajouté les modèles d'applications de bureau Windows Forms (WinForms) et WPF, ASP.NET Blazor pour la création d'applications à page unique et gRPC pour la messagerie multiplateforme basée sur des contrats. Microsoft a également ajouté des modèles pour la création de services, une riche génération de code client pour parler à gRPC, des services d'API REST et bien plus encore. .NET Core 3 est devenu la version la plus rapide jamais adoptée de .NET et l’outil a gagné un autre million d'utilisateurs supplémentaires au cours de la dernière année seulement.

Microsoft a annoncé la disponibilité de la première préversion de .NET 5, mais n’a pas manqué de rappeler certains éléments au préalable :

« Alors que nous attendons avec impatience la prochaine version majeure, .NET 5, nous continuerons à unifier .NET en une seule plateforme en incluant notre modèle d'application pour appareil mobile .NET (Xamarin) dans .NET 5. .NET 5 inclura ASP.NET Core, Entity Framework Core, WinForms, WPF, Xamarin et ML.NET. Pour la première fois, la plateforme entière utilisera un BCL (Base Class Library) unifié pour tous les modèles d'application. Avoir une version 5 supérieure à .NET Core et .NET Framework montre également clairement que .NET 5 est l'avenir de .NET, qui est une plateforme unifiée unique pour la construction de tout type d'application.

« Nous l'avons dit à maintes reprises, mais nous le réitérons; .NET Core puis .NET 5 est le .NET avec lequel vous devez créer toutes vos NOUVELLES applications. .NET Framework restera pris en charge tant que Windows lui-même est pris en charge. Nous continuerons de fournir des correctifs de sécurité et de bogues et de mettre à jour les API de mise en réseau et de chiffrement. Il restera sécurisé et pris en charge pour conserver vos anciennes applications sur .NET Framework ».

Microsoft a présenté certains des objectifs de haut niveau pour .NET 5 :
  • Expérience du SDK .NET unifié :
    • BCL (Base Class Library) unique dans toutes les applications .NET 5. Aujourd'hui, les applications Xamarin utilisent le Mono BCL, mais vont utiliser le .NET Core BCL, améliorant la compatibilité entre nos modèles d'application.
    • Le développement mobile (Xamarin) est intégré dans .NET 5. Cela signifie que le SDK .NET prend en charge les mobiles. Par exemple, vous pouvez utiliser « dotnet new XamarinForms » pour créer une application mobile.
  • Native Applications prenant en charge plusieurs plateformes : projet Single Device prenant en charge une application pouvant fonctionner sur plusieurs appareils, par exemple Windows Desktop, Microsoft Duo (Android) et iOS à l'aide des contrôles natifs pris en charge sur ces plateformes.
  • Web Applications prenant en charge plusieurs plateformes: projet Single Blazor qui prend en charge une application pouvant fonctionner dans les navigateurs, sur les appareils mobiles et en tant qu'application de bureau native (Windows 10x par exemple)
  • Cloud Native Applications: hautes performances, fichier unique (.exe) <50 Mo de microservices et prise en charge de la création de plusieurs projets (API, web front end, conteneurs) à la fois localement et dans le cloud.
  • Améliorations continues, telles que: algorithmes plus rapides dans la BCL, meilleure prise en charge des conteneurs lors de l'exécution, prise en charge de HTTP3.

Microsoft reconnait que la première préversion qui est proposée ne contient pas encore tout le travail nécessaire pour atteindre ces objectifs de haut niveau, mais l’éditeur assure qu’il va continuer d'annoncer davantage de capacités et de fonctionnalités dans les préversions futures.

Améliorations apportées par la Preview 1

Améliorations des performances d'expression régulière

Microsoft a investi dans des améliorations significatives du moteur Regex : « sur de nombreuses expressions que nous avons essayées, ces améliorations entraînent régulièrement des améliorations de débit de 3 à 6 fois, et dans certains cas, bien plus encore. Nous publierons prochainement un article de blog qui décrira ces améliorations de manière beaucoup plus détaillée ».

Améliorations de la qualité du code dans RyuJIT

Chaque version inclut un ensemble d'améliorations des performances du code généré par le JIT. Microsoft appelle ce type d'améliorations «CQ» ou code quality (qualité du code). Dans la plupart des cas, ces améliorations s'appliquent également au code généré pour les images prêtes à fonctionner.

Les améliorations suivantes sont dans la préversion 1 :
  • Améliorations pour le pliage des contrôles null : supprime la nécessité de générer des contrôles de null dans plus de cas en observant plus de modèles où les contrôles null sont manifestement inutiles.
  • Ajustement des common subexpression evaluation (CSE)  : Le JIT recherche et réduit les expressions en double qui n'ont besoin d'être évaluées qu'une seule fois.
  • Optimisation de “constant_string”.Length : optimisation de ce modèle et réduction du code à la valeur entière correcte.
  • JIT: construction des listes de prédiction de bloc de base avant le morphing : réorganise les phases dans le JIT pour permettre l'utilisation des optimisations clés plus tôt, résultant en une meilleure qualité de code et moins de travail pour les phases suivantes, ce qui augmente le débit JIT.

Diagnostics de la charge de l'assemblage ajoutés au pipeline d'évènement

Microsoft a ajouté des informations sur la charge de l'assemblage au pipeline d'évènements. Cette amélioration est le début de la mise à disposition de fonctionnalités de diagnostic similaires, comme cela fait partie de .NET Framework avec Fusion Log Viewer. Vous pouvez maintenant utiliser dotnet-trace pour collecter ces informations, à l'aide de la commande suivante:

Code C# : Sélectionner tout
dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:4:4 --process-id [process ID]

Vous pouvez voir les informations de chargement d'assemblage pour une application de test simple.


API profileur pipeline d'évènement

Le pipeline d'évènement est un nouveau sous-système et une nouvelle API que Microsoft a ajoutée dans .NET Core 2.2 pour permettre d'effectuer des performances et d'autres investigations de diagnostic sur n'importe quel système d'exploitation. Dans .NET 5.0, le pipeline d'évènement a été étendu pour permettre aux profileurs d'écrire des évènements sur le pipeline d'évènement. Ce scénario est critique pour l'instrumentation des profileurs qui s'appuyaient auparavant sur ETW pour surveiller le comportement et les performances des applications.

Consolidation du référentiel GitHub

Dans le cadre de la version .NET 5, Microsoft a réduit le nombre de dépôts GitHub qu'il utilise pour créer et empaqueter .NET. Les limites du référentiel ont un impact significatif sur de nombreux aspects d'un projet, y compris les builds et la gestion des problèmes. « Avec .NET Core 1.0, nous avions plus de 100 référentiels sur ASP.NET, EF et .NET Core. Avec cette dernière version, nous pouvons désormais compter les dépôts principaux d'une part. Nous avons également déplacé presque tous les référentiels vers l'organisation dotnet ».

Preview 1 inclut la prise en charge de Windows ARM64 pour la première fois. La version d'aujourd'hui inclut le runtime .NET Core. Microsoft prévoit que la Preview 2 inclue le SDK (ASP.NET Core mais pas WPF ou Windows Forms). Une préversion ultérieure inclura WPF et Windows Forms. La prise en charge de Windows ARM64 sera également rétroportée vers .NET Core 3.1.

La disponibilité générale de .NET 5 est prévue pour novembre de l'année en cours.

.NET 5.0 Preview 1 SDK
.NET 5.0 Preview 1 Runtime

Source : Microsoft

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

Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 17/11/2020 à 17:07
Je suis en train de regarder cette série de benchmarks Java (OpenJDK 15) vs C# (.NET 5) et je dois bien avouer que C# a prit les devants sur Java concernant le temps d'exécution et la consommation mémoire.
5  0 
Avatar de Captain Spic
Membre à l'essai https://www.developpez.com
Le 02/09/2020 à 13:37
Citation Envoyé par CaptainDangeax
Je ne vois pas trop l'intérêt de la chose. dotNet ne tourne qu'en environnement windows, donc sur nos PC windows. Et nos PC sont 32/64 bits, c'est à dire qu'un registre du processeur sera toujours en 32 bits. Un LD ou un MOV en assembleur se fera sur un registre en 32 bits. Sur un microcontrolleur où la place est limitée, je vois bien l'intéret de la chose, pour avoir un peu plus de précision avec 16 bits... Mais sur un PC / Windows, non vraiment je ne vois pas.
Même si le programme tourne en 32 ou 64 bits, et utilisera ces 32 ou 64 bits par cycle, en RAM, les valeurs sont stockées par lots de 8 bits (un octet).
On divise par deux l'espace nécessaire.
Pour un programme classique, je ne suis pas sûr que l'impact soit significatif.
Mais pour un programme qui manipule beaucoup de données de ce genre (Big Data, BDD, etc) ça peut faire beaucoup d'économie :
  • Pour un million d'entrée, on gagne 16 Mo
  • Pour un milliard, on gagne 16 Go !


Voilà pourquoi c'est intéressant

P.S. Sinon .NET est cross-plateforme depuis maintenant un certain temps (d'abord Roslyn, Xamarin, puis .Net Core et enfin .NET 5 qui va fusionner .Net Core et .Net Framework)
4  0 
Avatar de redcurve
Membre extrêmement actif https://www.developpez.com
Le 02/09/2020 à 12:11
Citation Envoyé par CaptainDangeax Voir le message
Je ne vois pas trop l'intérêt de la chose. dotNet ne tourne qu'en environnement windows, donc sur nos PC windows. Et nos PC sont 32/64 bits, c'est à dire qu'un registre du processeur sera toujours en 32 bits. Un LD ou un MOV en assembleur se fera sur un registre en 32 bits. Sur un microcontrolleur où la place est limitée, je vois bien l'intéret de la chose, pour avoir un peu plus de précision avec 16 bits... Mais sur un PC / Windows, non vraiment je ne vois pas.
Toi t'as rien capté depuis 10 ans
5  3 
Avatar de redcurve
Membre extrêmement actif https://www.developpez.com
Le 02/09/2020 à 16:28
Citation Envoyé par CaptainDangeax Voir le message
Prends un programme compilé et regarde les instructions MOV ou LD : elles sont toutes en 32 bits. Alors si c'est pour charger 2 fois 16 bits puis faire un SWAP pour accéder à l'autre mot, non je ne vois pas l'intérêt. Mais bon je parle à des développeurs dotNet, pas à des développeurs C ou ASM.
Toujours à coté de la plaque

Top pour nos programmes de machine learning
2  0 
Avatar de LinxBe
Membre à l'essai https://www.developpez.com
Le 05/09/2020 à 1:01
Citation Envoyé par CaptainDangeax Voir le message
C'est bien ce petit ton moqueur depuis le début. Et sinon, c'est quand la dernière fois que tu as pondu un programme en ASM ?
Pourquoi parlez-vous de ASM ?
Il ne s'agit pas d'un problème de programmation, mais de STOCKAGE !
1  0 
Avatar de gstratege
Membre actif https://www.developpez.com
Le 22/07/2020 à 12:21
Je comprend pas trop l'idée derrière .Net 5, au lieu d'avoir .Net Core et .Net Framework séparés, on les réunis, mais comment ? juste on les mets côtes à côtes dans un même package ?
0  0 
Avatar de Pol63
Expert éminent sénior https://www.developpez.com
Le 22/07/2020 à 13:27
.net 5 est surtout un .net core 4, qui inclut la clr de xamarin et celle de .net framework
les apps windows sont encore en package séparés (mais inclus) comme sur .net core 3
mais les framework (qui ne sont qu'un ensemble de classes codées en c#) contiennent des pans entiers identiques (même si certaines choses de .net 4.8 ne seront pas dans .net 5 car déclarées obsolètes)

le but devant être entre autre de faire comprendre avec le 5 que c'est la version la plus récente au dessus du fx 4.8 parce que .net core et .net framework sont actuellement sur une branche chacun.
et ceux qui sont sur .net core suivent donc sauront que .net 5 est la suite de .net core 3.1 (alors que ceux qui sont sur 4.8 ne sont peut etre pas au fait concernant .net core et seront peut etre tenté de migré et seront forcés de se renseigner)
0  0 
Avatar de redcurve
Membre extrêmement actif https://www.developpez.com
Le 23/07/2020 à 7:02
Citation Envoyé par gstratege Voir le message
Je comprend pas trop l'idée derrière .Net 5, au lieu d'avoir .Net Core et .Net Framework séparés, on les réunis, mais comment ? juste on les mets côtes à côtes dans un même package ?
Hein .Net Framework est figé depuis l'an dernier MS fait juste des patch de sécu dessus

.NET5 prend la suite de .Net Core (le Core dans le nom était la juste pour éviter la confusion avec .Net Framework 1,2,3,4)
0  0 
Avatar de Kropernic
Expert confirmé https://www.developpez.com
Le 22/09/2020 à 9:18
C'est bien beau de fusionner tout ça mais quid des types spatiaux ?

Aux dernières nouvelles, ils ne sont toujours pas supporté par .Net Core. Enfin il y a bien un moyen détourner en utilisant Net Topology Suite mais pour avoir tester cette librairie, je ne suis pas convaincu du tout...

Est-ce que cette fusion .Net Fx et .Net Core fera qu'on pourra utiliser la librairie Microsoft.SqlServer.Types (SqlServerSpatial140.dll) ?
0  0 
Avatar de JackIsJack
Membre éclairé https://www.developpez.com
Le 15/11/2020 à 7:52
Très content que cette série ".net Core" se termine...
0  0