Nouveautés du .Net framework 4

by Jean-Pierre Camalot November 24, 2009 04:38

Cet article est juste une lecture du  What's New in the .NET Framework Version 4(beta 2) et de quelques autres articles dont les articles des techdays 2009 : Les nouveautés du CLR 4.0,

Préambule

Le .net framework 4 est une version à part entière comme le framework 2.0 par rapport au 1.1. En effet, les versions 3.0 et 3.5 n’étaient que des surcouches par rapport à la 2.0 (pour simplifier que de nouveaux assemblies comme WCF, WF et WPF).

http://www.microsoft.com/france/vision/mstechdays09/Webcast.aspx?EID=6cfcccea-50e8-4ce9-a5ae-d534234229a2

Déploiement et compatibilité

.NET Framework Client Profile

la fonctionnalité client profile qui permet de déployer des application clientes offre de nouvelles fonctionnalités

  • support des packages locaux en plus des installations en mode Web
  • s’ouvre à toutes les plate formes qui supporte le .net 4 (en dehors des I64). Avant, seuls les PC XP x86 étaient autorisés.
  • Fait parti du framework.

N’ayant jamais été confronté à ce genre de problématique je vous laisse lire la suite.

In-Process Side-by-Side Execution

à l’aide d’un fichier de configuration associé au programme, on peut spécifier dans quelle version du framework exécuter l’assembly.

Ceci est particulièrement utile pour les add-in Office. En effet, un add-in pourra être compatible 4.0 et un autre 2.0 et pourtant s’exécuter dans le même Word.

http://blogs.msdn.com/blogfiles/clrteam/WindowsLiveWriter/InProcessSidebySidePart1_10960/clip_image002_16e18d3b-a82d-482f-984d-e1c40153100e.gif

Pour en savoir plus voir In-Process Side by Side (Part1)et  Les nouveautés du CLR 4.0pour un exemple de ce qui pourrait ne plus marcher entre la 2.0 et la 4.0.

Questions que je me pose à chaud (mais tant que je n’y suis pas confronté, les réponses ne sont pas urgentes):

  • mémoire : est ce que de charger le runtime 2.0 et le runtime 4.0 est gourmant ?
  • communication : peut-on avoir le cas tordu d’un assembly “4.0” qui a besoin de communiquer avec un assembly “2.0” ou inversement ?
  • Quand est ce que la technologie COM sera abandonnée (ou même un début de migration) ? Je suis d’accord il ya du boulot : Office, Explorateur de fichier, Internet Explorer ne sont pas des développement anecdotiques…

programmation parallèle

Avec l’utilisation de plus en plus courante des multi cœur, ces évolutions permettent de faire du multi threading très facilement. Microsoft propose un nouveau Framework, non seulement des instructions pour faciliter la programmation mais aussi des add-ins visual studio pour faciliter le débogage (voir futur article ainsi que La programmation parallèle pour les développeurs ... )

L’intérêt c’est qu’il est plus simple d’écrire de faire du multi thread (voir les exemples suivants tirés de Les nouveautés du CLR 4.0).

.net2

Mais le framework s’occupe de tout en fonction de la machine (nombre de cœurs, etc).

A noter que pour la beta 2, beaucoup de pages d’aide du MSDN sont vides. Est ce que ça veut dire que ce n’est pas totalement mature ?

Le MSDN distingue toutefois

  • le data parralelism : on a besoin de faire un traitement sur chaque élément d’une liste. Bien entendu, il faut que chaque donnée soit indépendante l’une de l’autre.
  • le task parralelism : dans ce cas, certaines tâches distinctes peuvent être parallélisées.

Note de JPC : est ce que si on considère une tâche comme une donnée, ça ne revient pas à faire du data parralelism. D’un autre coté, si on manipule une data c’est bien pour faire une tâche dessus… J’ai l’impression que c’est comme la théorie des dualités des ondes – particules : on prend ce que l’on veut selon son feeling…

à noter TPL and Traditional .NET Asynchronous Programming

Les occasions de faire du multi thread du coté client sont quand même assez rares. Pour l’instant je n’ai pas eu beaucoup l’occasion d’en faire et je ne suis pas certain d’utiliser ce nouveau framework sauf en de rares occasions. Pour l’instant les occasions que j’ai eus :

  • séparer un traitement de l’interface graphique. Si le traitement est long (récupérer une page web, accéder à des fichiers dans une arborescence), cela permet d’afficher une boite de progression et d’offrir l’opportunité d’annuler. Mais là aucun besoin d’un framework massivement parallèle : un nouveau thread suffit. De plus le framework offre en général un mécanisme transparent : les méthodes async de System.net et de system.io…
  • cloner des objets en mémoire (dans le cadre d’une gestion de undo/redo). Pas besoin de massivement parallèle…

Par contre, j’aurais pu avoir une opportunité c’est quand j’ai fait un petit injecteur de données/messages en parallèle. J’ai fait une bête boucle for “à la main”…

Bref, je pense qu’il faut attendre pour voir car même en cas de traitement serveur le nombre de cas restera assez limité. En effet, aujourd’hui le défit est de bien penser sa conception pour éviter d’arriver dans ce genre de situation…

Reste à voir les avancées de Visual Studio pour le débogage.

Sécurité

La sécurité a été simplifiée : plus (dans le sens plus du tout et pas encore plus) de sécurité “machine”. Les applications clients lourd (native) s’exécutent en mode full trust ainsi que les application venant d’un partage réseau (YES!!!!!!). Les applications hostées (Sandbox) s’exécutent dans un contexte de sécurité propre au programme (Internet Explorer, clickonce, etc).

Security Changes in the .NET Framework 4

Core

Diagnostics and Performance

On peut maintenant monitorer mémoire et cpu par AppDomain. En mode “client”, les applications avec plusieurs AppDomain sont assez limités. Par contre, en mode serveur, ça peut être utile :

  • des applications web IIS. Avant pour monitorer, il fallait faire plusieurs applications pool. Perso, je vais toujours garder cette logique ne serait ce que pour les autres intérêt : isolation, si un tombe pas l’autre, etc…
  • Dans Biztalk. On peut donc surveiller plusieurs “application”. Mais l'à encore Biztalk propose déjà des moyens d’isolation (par processus/service)

==> intérêt ????

Garbage Collection

Je dois avouer que j’ai pas tout compris So, what’s new in the CLR 4.0 GC? . J’ai pas compris le principe technique mais pas les enjeux, les problèmes et … les solutions.

Par contre, l’explication de Les nouveautés du CLR 4.0est relativement claire.

Code Contracts

voilà un truc que j’attendais depuis très très longtemps. Pour moi une des principales limitations actuelles de .net.

Les codes contracts permettent de spécifier des pré conditions, des post conditions, et des objects invariants. Avant on pouvait insérer des Debug.Assert ou utiliser d’utiliser d’autres artifices mais rien de bien pratique. Perso je trouve que cette nouvelle fonctionnalité s’inspire de l’écriture de tests unitaires dans Visual Studio Test Edition (classe Assert). Cette nouvelle fonctionnalité va faciliter l’écriture de tests unitaires, la documentation,  …

Plutôt qu’un long discours, voici un exemple de code qui explique tout.

Certaines contraintes et possibilités :

  1. chaque membre d’un pré condition doit avoir au moins le même niveau de visibilité que la méthode elle même (autrement la pré condition risque de na pas être comprise par l’appelant).
  2. possibilité de lever une exception custo lors de la pré/post condition
  3. possibilité lors d’une post condition de faire référence à la valeur AVANT d’entrer dans la méthode (OldValue).
  4. Les conditions d’invariance sont des conditions que l’objet DOIT respecter tout au long de sa durée de vie (par exemple des cordonnées ne peuvent pas être négatives).
  5. possibilité de mettre les contract séparément de la classe (voir l’attribut ContractClassAttributeet l’exemple dans le MSDN ) ==> on peut mettre des contrat sur des interfaces…
  6. l’héritage a été prévu : les contraintes sont hérités et il est impossible de modifier la contrainte dans les “override”
  7. les vérifications s’activent ou pas selon le type et les options de compilation. Plutôt qu’un long discourt une copie d’écran de la doc (documentation en PDF ; non vous ne rêvez pas Microsoft utilise le format “ennemi” ).
    .net3 Et puis une capture d’écran de Visual Studio (doit y a avoir encore quelques bugs car j’arrive pas à accéder à l’écran d’option)
    Donc, comme on peut le voir, on peut faire des versions “sans trop de vérifications” pour ne pas impacter les performances. (Note de JPC : de nos jours, je suis persuadé que plus de la moitié de la CPU est consacré par les vérifications – avant d’appeler la couche basse et si une couche haute nous appelle - et le fait de pouvoir les désactiver tout ou partie m’enchante).

La doc est pour l’instant assez limitée. Attention à l’édition : la vérification statique n’est disponible que dans VSTS Ultimate.

Questions que je me suis posé :

  • est ce que le compilateur détecte et signale qu’une pré condition est TOUJOURS fausse ?
    réponse : Oui à condition d’activer les vérifications statiques. D’après la doc ça reste assez limité (ForAll, Exists et c# iterators).
  • est ce que le compilateur détecte et n’effectue pas le test au moment de l’exécution d’une pré condition qui est TOUJOURS vraie ?
    réponse : si le test est activé dans l’option de génération de build alors le test est toujours fait
  • Peut on arriver à modifier l’état d’un objet lors de ces pré/post conditions ?
    prévu : le framework fait certains checks mais en surface. En particulier tous les accesseurs Get sont considérés comme “purs”. Mais rien n’interdit le codeur de modifier l’objet à l’intérieur d’un Get.
  • Peut-on propager les contraintes ?
    Cas le plus fréquent, une méthode/un constructeur est surchargé
    Autre cas, je construit un wrapper “visuel” sur un objet métier
    Autre cas, y a t-il moyen de faire un “ContractValidator” qui détecte tout seul sur une appli les erreurs sur un objet bindé
    Autrement dit, le rêve de TOUT développeur : les contraintes décrites dans la base de donnée sont “générés” par le DAL et propagées jusqu’à la couche UI.

Donc, très prometteur mais il manque certaines choses :

  • propagation des contraintes surtout jusqu’à la couche UI.

Design-Time-Only Interop Assemblies

You no longer have to ship primary interop assemblies (PIAs) to deploy applications that interoperate with COM objects.

jamais été confronté à cette problématique ==> je passe

Dynamic Language Runtime

Permet d’offrir un certain nombre de service pour les langages dynamiques. Permet également d’offrir certains services à des langages “statiques”. Le MSDN cite l’exemple d’incrémenter une variable XML
.net4

(à noter que moi j’aurait fait “ XMLNode node = ….. node.InnerText = ….” Bref à chacun sa sauce)

Question de JPC : pourra-t-on facilement permettre aux utilisateurs de nos applications d’utiliser LEURS macros comme dans Word, etc…

Dd233052.DLR_ArchOverview(en-us,VS.100)[1]

Covariance and Contravariance

L’intérêt de ces fonctionnalités me semble assez limité et ne s’appliquer qu’à certains cas particuliers.
Vous pouvez voir aussi Tour d'horizon des nouveautés de C# 4.0; c’est très très bien expliqué

BigInteger and Complex Numbers

Bon c’est plutôt réservé aux scientifiques.

Ce que je ne comprends pas c’est que l'a problématique BingInteger est connu depuis plus de 10 ans (j’en ai fait durant ma thèse). Pourquoi n’était-est pas inclus dans le .net ?

Tuples

La possibilité de créer de nouveaux à la fois simples et pratiques sans avoir besoin d’écrire une nouvelle classe.

Qui n’a pas eu besoin d’avoir une variable qui contient 2 ou plus variables. Bref d’avoir une structure mais en plus light…
Merci les tuples…
Le plus fort ce sont les Equals et Comparer qui marchent …

.net5

File System Enumerations

Qui n’a pas eu la problématique d’énumérer tous les fichier *.extension d’une arborescence et d’être frustré : pas moyen d’obtenir la liste au fur et à mesure qu’elle est construite. C’est à dire : pas de barre de progression, pas de moyen de remplir une liste au fur et à mesure…

Un exemple que j’ai testé
.net6

Les résultats
.net7

Memory-Mapped Files

La possibilité d’avoir des gros fichiers en mémoire et de pouvoir y accéder très simplement.

64-Bit Operating Systems and Processes

On peut savoir si on est sur une plateforme 64 bits et d’accéder au registre 32 ou 64 bits…

Other New Features

que ce qui m’intéresse :

Networking

Améliorations sur l’authentification intégrée (attention Windows 7/Windows 2008 R2 nécessaire ==> pas avant 50 ans chez certains de nos clients :-) ou même chez Atos :-( )

Amélioration du support NAT en IPv6 et teredo.

De nouveaux compteurs pour le HttpWebRequest

D’autres améliorations…

Web

Parmi toutes les nouveautés d’ASP.Net 4, je ne retiens que quelques points :

  • Auto-Start Web Applications ==> yes la fonctionnalité la plus intéressante. Qui n’a pas ralé car le premier accès à une application est lent… Plus d’excuse pour supprimer le recyclage. Par contre, seulement sur W2008R2.
    .net8
    Et en plus on peut si on le veut, précharger des données ou autre.
    .net9
  • Permanently Redirecting a Page
    .net10
  • ASP.NET Web Forms. Nombreuses améliorations : meta tags, More control over view state, More control over generated IDs, The ability to persist selected rows in data controls, Filtering support for data source controls,
  • ASP.NET Chart Control : YESS!!!! (avec Ajax )
  • Microsoft Ajax Functionality : Yes !!! Json and Co…
  • au moment du déploiement, il est maintenant prévu de manipuler le web.config…
  • Support for MVC-Based Web Applications
  • Automatic validation that is based on constraints that are defined in the data model. YES !!!!!!! A TESTER ABSOLUMENT.

Client

WPF

Nouveaux contrôles : DataGrid, Calendar et DatePicker (Enfin !!! plus besoin de hoster le contrôle Winform)
Visual State Manager : améliorations dans les Controltemplate.
Touch and Manipulation : support des écrans tactiles.
Graphics and Animations : comprends pas tout ; je ne suis pas graphiste.
Text : même le rendu de texte a été amélioré.
Binding : Bind to commands on InputBinding, Bind to Dynamic Objects, Bindable Text Run
XAML Browser Applications
WPF and Windows : support de la barre des tâche de Windows 7

Managed Extensibility Framework

The Managed Extensibility Framework (MEF) is a new library in the .NET Framework 4 Beta 2 that helps you build extensible and composable applications. MEF enables you to specify points where an application can be extended, to expose services to offer to other extensible applications and to create parts for consumption by extensible applications. It also enables easy discoverability of available parts based on metadata, without the need to load the assemblies for the parts. For more information, see Managed Extensibility Framework. For a list of the MEF types, see the System.ComponentModel.Composition namespace.

JPC : à tester et surtout lire des Guidance à l’occasion

Data

ADO.NET provides new features for the Entity Framework, including Persistence-Ignorant Objects, functions in LINQ queries, and Customized Object Layer Code Generation.

ADO.NET Entity Framework

à tester sur un micro projet et un plus gros. Lire avant des guidance et le Entity Framework Overview.

Communications and Workflow

Comme je n’ai jamais fait de Windows Workflow, je vais pas comprendre les nouveautés.

Pour les nouveautés WCF, je n’ai vu aucune modification qui aurait pu améliorer mon code existant.

 

à suivre dans le prochain article les nouveautés c# 4 puis les nouveautés de Visual Studio 2010 et enfin les nouveautés de TFS.

Tags:

Comments

3/20/2010 1:16:14 AM #

Agnes Glow

This is a useful post, but I was wondering how do I suscribe to the RSS feed? For your URL -> % BLOGURL %

Agnes Glow United States

3/20/2010 1:47:36 AM #

Enda Wakeley

I don't agree with everything in this summary, but you do make some very good points. I'm very interested in this matter and I myself do alot of research as well. Either way it was a well thoughtout and nice read so I figured I would leave you a comment. Feel free to check out my website sometime and let me know what you think.

Enda Wakeley

3/21/2010 4:28:06 AM #

Damion Mynhier

I'm happy I located this web page, I couldnt get any info on this topic prior to. Also operate a website and if you want to ever serious in a little bit of guest writing for me you should feel free to let me know, i'm always look for people to check out my web page. Please stop by and leave a comment sometime!

Damion Mynhier United States

3/26/2010 11:05:15 AM #

low fee payday loans

I was very pleased to find this site.I wanted to thank you for this great read!! I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post.

low fee payday loans United States

3/27/2010 1:40:37 PM #

24 hour cash advance

I keep listening to the news talk about getting free online grant applications so I have been searching around for the best site to get one.

24 hour cash advance United States

3/30/2010 5:48:09 AM #

quick in loans

This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article!

quick in loans United States

3/30/2010 3:35:50 PM #

bad credit payday loan

Keep working ,great job!

bad credit payday loan United States

5/9/2010 1:18:47 AM #

Mariana

Would it be cool to provide some more info on this in the future? Thanks

Mariana United States

5/20/2010 10:11:30 AM #

Wahdo Tech

I have a good fresh joke for you! How do you get holy water? Boil the hell out of it.

Wahdo Tech United States

6/5/2010 8:02:23 AM #

Page Trusello

I'm happy I found this website, I couldnt get any knowledge on this subject before. Also manage a website and if you wish to ever interested in doing some guest writing for me please feel free to let me know, im always look for people to check out my blog page. Please stop by and leave a comment sometime!

Page Trusello United States

7/5/2010 4:45:01 PM #

payday loans

Quality is remembered long after the price is forgotten. http://www.clicknpayday.com

payday loans United States

8/27/2010 3:48:17 AM #

hard money loan

Hey - nice blog, just looking around some blogs, seems a pretty nice platform you are using. I'm currently using Wordpress for a few of my sites but looking to change one of them over to a platform similar to yours as a trial run. Anything in particular you would recommend about it?

hard money loan United States

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



Powered by BlogEngine.NET 1.6.0.0
Theme by Mads Kristensen | Modified by Mooglegiant

About the author

Infos publiques de Jean-Pierre Camalot (donc pas grand chose car je suis très "vie privée").

Merci à QSH pour l'hébergement gratuit (un des rares hébergeurs gratuits en .Net).

Merci également à BlogEngine.net (lien en bas de page) pour le moteur de Blog (il faudra que je participe au projet mais je le trouve très bien comme ça... Merci aux auteurs)