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.0 Preview 8 est estampillée comme "feature complete" et apporte de nombreuses fonctionnalités
Ainsi que le support de Windows ARM64 et Web Assemby

Le , par Stéphane le calme

197PARTAGES

7  0 
Microsoft a indiqué : « Aujourd'hui, nous publions .NET 5.0 Preview 8. La version .NET 5.0 est désormais estampillée "feature complete", ce qui signifie que presque toutes les fonctionnalités sont dans leur forme finale (à l'exception des corrections de bogues à venir). La Preview 8 est, à juste titre, la dernière Preview. Nous prévoyons de publier deux Release Candidate avant la version finale de .NET 5.0 en novembre. »

.NET 5.0 inclut de nombreuses améliorations, notamment des applications à fichier unique, des images de conteneur plus petites, des API JsonSerializer plus performantes, un ensemble complet d'annotations de type référence Nullable et la prise en charge de Windows ARM64. Les performances ont été considérablement améliorées, dans les bibliothèques NET, dans le GC et le JIT. ARM64 était un objectif clé pour l'investissement dans les performances, ce qui se traduisait par un meilleur débit et des binaires plus petits. .NET 5.0 inclut de nouvelles versions de langage, notamment C# 9 et F# 5.0.

.NET 5.0 inclut également la prise en charge de Web Assembly, à l'aide du runtime Mono et des bibliothèques .NET. C'est la base de Blazor Web Assembly dans .NET 5.0. Il s'agit d'un changement par rapport à Blazor 3.2, qui utilisait le runtime Mono et les bibliothèques Mono. L'année dernière, Microsoft a présenté une vision d'une plateforme .NET unifiée, avec un ensemble de bibliothèques et d'outils pour tous les types d'applications .NET. Les avantages de ce changement sont une expérience de développement unique pour .NET, une compatibilité beaucoup plus élevée entre les différents types d'applications .NET et la maintenance et l'amélioration d'une seule base de code.

Maintenant que la version est feature complete, passons en revue quelques nouveautés de .NET 5.0.

Langages

C# 9 et F# 5 font partie de la version .NET 5.0 et sont inclus dans le SDK .NET 5.0. Visual Basic est également inclus dans le SDK 5.0. Il n'inclut pas les modifications de langage, mais a des améliorations pour prendre en charge le Visual Basic Application Framework sur .NET Core.

Les générateurs de sources C# sont une nouvelle fonctionnalité importante du compilateur C# qui ne fait pas techniquement partie de C# 9 car il n'a pas de syntaxe de langage.

C# 9

C# 9 est une version importante du langage, axée sur la simplicité du programme, l'immuabilité des données et plus de modèles. Voici quelques éléments que les développeurs pourraient trouver intéressants.


Programmes de haut niveau

Les programmes de haut niveau offrent une syntaxe plus simple pour les programmes, avec beaucoup moins de cérémonie. Cette syntaxe aidera les gens à apprendre le langage en premier lieu. L'éditeur s'attend à ce que la syntaxe du programme de haut niveau devienne plus simple dans les versions ultérieures, comme la suppression des instructions using par défaut.

Voici la version C# 9 de « hello world ».

Code C# : Sélectionner tout
1
2
3
using System; 
  
Console.WriteLine("Hello World!");

Les programmes de haut niveau peuvent être étendus pour utiliser plus de fonctionnalités, telles que la définition et l'appel d'une méthode ou d'une classe dans le même fichier.

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System; 
using System.Runtime.InteropServices; 
  
Console.WriteLine("Hello World!"); 
FromWhom(); 
Show.Excitement("Top-level programs can be brief, and can grow as slowly or quickly in complexity as you'd like", 8); 
  
void FromWhom() 
{ 
    Console.WriteLine($"From {RuntimeInformation.FrameworkDescription}"); 
} 
  
internal class Show 
{ 
    internal static void Excitement(string message, int levelOf) 
    { 
        Console.Write(message); 
  
        for (int i = 0; i < levelOf; i++) 
        { 
            Console.Write("!"); 
        } 
  
        Console.WriteLine(); 
    } 
}

Ce programme produit la sortie suivante :

Citation Envoyé par sortie
[rich@taumarunui test]$ ~/dotnet/dotnet run
Hello World!
From .NET 5.0.0-preview.8
Top-level programs can be brief, and can grow as slowly or quickly in complexity as you'd like!!!!!!!!

Pattern matching

Il s'agit ici de procéder à des tests pour voir si une valeur a une certaine forme et d'extraire des informations de la valeur lorsqu'elle a la forme correspondante. De nouvelles améliorations de pattern matching ont été ajoutées dans les dernières versions de C#.

Voici deux exemples : le premier montre l'utilisation des propriétés dans le pattern matching. Il vérifie la valeur null (avec is) avant de comparer context de l'objet à un modèle (pattern) spécifique.

Code C# : Sélectionner tout
1
2
3
4
if (context is {IsReachable: true, Length: > 1 }) 
{ 
    Console.WriteLine(context.Name); 
}

Ce qui est équivalent à :

Code C# : Sélectionner tout
1
2
3
4
if (context is object && context.IsReachable && context.Length > 1 ) 
{ 
    Console.WriteLine(context.Name); 
}

Mais est aussi équivalent à :

Code C# : Sélectionner tout
1
2
3
4
if (context?.IsReachable && context?.Length > 1 ) 
{ 
    Console.WriteLine(context.Name); 
}

L'exemple suivant utilise des modèles relationnels (comme <, <=) et logiques (comme and, or et not). Le code suivant produit le péage routier (sous forme décimale) pour un camion de livraison en fonction de son poids brut. Pour ceux qui ne sont pas familiers, m après un littéral numérique indique au compilateur que le nombre est sous forme de decimal et non double.

Code C# : Sélectionner tout
1
2
3
4
5
6
DeliveryTruck t when t.GrossWeightClass switch 
{ 
    < 3000 => 8.00m, 
    >= 3000 and <= 5000 => 10.00m, 
    > 5000 => 15.00m, 
},

F# 5

S'appuyant sur les mises à jour de la Preview F# 5 publiées plus tôt cette année, cette dernière mise à jour de F# 5 conclut la prise en charge des langages et ajoute deux nouvelles fonctionnalités, les chaînes interpolées et les déclarations de type ouvert. Voici un aperçu de ce que vous pouvez en faire:

Chaînes interpolées

Les chaînes interpolées en F# sont l'une des fonctionnalités les plus demandées. Les gens qui les connaissent en C# et JavaScript (et peut-être dans d'autres langages) en sont venus à les aimer dans ces langages. En F#, l'éditeur présente des chaînes interpolées de manière non typée comme elles existent dans d'autres langages, mais également avec des trous interpolés typés où l'expression dans un contexte interpolé doit correspondre à un type donné par un spécificateur de format de chaîne.

Code F# : Sélectionner tout
1
2
3
4
5
6
7
8
9
// Basic interpolated string 
let name = "Phillip" 
let age = 29 
let message = $"Name: {name}, Age: {age}" 
  
// Typed interpolation 
// '%s' requires the interpolation to be of type string 
// '%d' requires the interpolation to be an integer 
let message2 = $"Name: %s{name}, Age: %d{age}"

Déclarations de type ouvert

Les déclarations de type ouvert en F# sont similaires à la possibilité d'ouvrir des classes statiques en C#, mais avec une syntaxe légèrement différente. Elles sont également étendues pour permettre l'ouverture de types spécifiques à F#.

Code F# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
open type System.Math 
  
let x = Min(1.0, 2.0) 
  
module M = 
    type DU = A | B | C 
  
    let someOtherFunction x = x + 1 
  
// Open only the type inside the module 
open type M.DU 
  
printfn "%A" A

Outils de diagnostic d'exécution

Microsoft.Extensions.Logging

Microsoft a amélioré le fournisseur de journaux de la console dans la bibliothèque Microsoft.Extensions.Logging. Les développeurs peuvent désormais implémenter un ConsoleFormatter personnalisé pour exercer un contrôle complet sur le formatage et la colorisation de la sortie de la console. Les API du formateur permettent un formatage riche en implémentant un sous-ensemble des séquences d'échappement du VT-100 (pris en charge par la plupart des terminaux modernes). L'enregistreur de console peut analyser les séquences d'échappement sur des terminaux non pris en charge, ce qui vous permet de créer un formateur unique pour tous les terminaux.

En plus de la prise en charge des formateurs personnalisés, Microsoft a également ajouté un formateur JSON intégré qui émet des journaux JSON structurés vers la console.

Débogage dump

Le débogage du code managé nécessite une connaissance particulière des objets gérés et des constructions. Le composant d'accès aux données (DAC - Data Access Component) est un sous-ensemble du moteur d'exécution de runtime qui connaît ces constructions et peut accéder à ces objets gérés sans exécution. Depuis la Preview 8, Microsoft a commencé à compiler le DAC Linux sur Windows. Les vidages de processus .NET Core collectés sous Linux peuvent désormais être analysés sous Windows à l'aide de WinDBG ou dotnet dump analyze..

Technologie runtime

De nombreuses nouvelles fonctionnalités ont été ajoutées dans .NET 5.0. Une petite sélection est décrite ci-dessous.

Windows ARM64

Microsoft a ajouté la prise en charge de Windows ARM64 dans le cadre de cette version. L'éditeur a pris la décision relativement tardive de retarder le composant Windows Desktop (Windows Forms, WPF). Windows Forms est presque prêt, mais WPF ne l'est pas, et Microsoft ne veut pas publier seulement la moitié du composant Windows Desktop, en partie parce que les tests ne sont pas effectués dans une configuration fractionnée.

Exportations natives

Vous pouvez désormais exporter des méthodes gérées vers du code natif. Le bloc de construction de la fonctionnalité héberge la prise en charge de l'API pour UnmanagedCallersOnlyAttribute.

Télécharger .NET 5.0 Preview 8

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 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 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 02/09/2020 à 14:01
Jamais vu de dotNet sur un µcontrolleur. C'est C + ASM.

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.
0  4 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 04/09/2020 à 14:12
Citation Envoyé par redcurve Voir le message
Toujours à coté de la plaque

Top pour nos programmes de machine learning
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 ?
1  5 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 02/09/2020 à 11:55
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.
1  7