Opinion : que pensez vous du Framework .NET 10 ans après ?

Le , par Hinault Romaric, Responsable .NET
Ce mois marque le 10e anniversaire du .net Framework et oui difficile de croire que ça fait déjà dix ans que le .net Framework existe ; il a été présenté pour la première fois à Orlando en Floride lors de la conférence Microsoft PDC (Professional Developpers Conference) de juillet 2000.

Bref historique

Microsoft a commencé le développement du. NET Framework dans la fin des années 1990 à l'origine sous le nom de la prochaine génération de services Windows (NGWS). La pré-beta du .net Framework est sorti officiellement le 11 juillet 2000, les versions qui ont suivi sont les suivantes :

13/02/2002 sortie de .net version 1.0 : Livrée avec Visual Studio 2002 la version 1.0 du .net framework est assez anecdotique car remplacée très rapidement par la version 1.1.

24/04/2003 sortie de .net version 1.1 : livrée avec Visual Studio 2003 ou en version redistribuable, Elle apportait beaucoup plus de stabilité, de performance et de sécurité que la précédente version et d'ailleurs c'est elle qui a réellement fait découvrir .NET aux développeurs.

07/11/2005 sortie de .net version 2.0 : Cette version apporte des modifications importante tant au niveau des différents éléments constituant la plate-forme qu'au moteur d'exécution lui-même

06/11/2006 sortie de .net version 3.0 : Cette version débarque avec beaucoup de nouveau concept tel que Windows Presentation Foundation(WPF), Windows Workflow Foundation (WF), Windows Communication Foundation(WCF).

19/11/2007sortie de .net version 3.5 : Livrée avec visual studio 2008 cette version intègre de nouvelles fonctionnalités tel que: Entity Framework; LINQ; ASP.NET Dynamic Data .

12/04/2010 sortie de .net version 4.0 : Livrée avec visual studio 2010 cette version intègre des nouvelles fonctionnalités pour le diagnostic et les performances, Dynamic Language Runtime(DLR), le Contrats de code...

Avec .net Framework on a vu l'arrivée du langage C# et bien sur le nouveau Visual Basic (VB.net) beaucoup plus orienté objet et robuste que VB6 l'on est aussi passé de l'ASP à l'ASP.net.

Source : Le blog de lilroma

Pour plus de détails lire le point sur les différentes version du .net framework

Je me souviens avoir découvert le .net Framework pour la première fois lors d’un projet Winforms avec VB.net pour moi ça été ma meilleur découverte dans le développement.

Et vous ?

Quel est votre opinion du .net framework 10 ans après

Comment avez-vous découvert le .net framework et Quesque cella à changer dans votre vie de développeurs?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de cinemania cinemania - Membre expérimenté https://www.developpez.com
le 30/08/2010 à 0:11
c'est malheureusement le cas de nombre de ceux que j'ai pu rencontrer
c'est triste et donne un piètre constat.
Avatar de tomlev tomlev - Rédacteur/Modérateur https://www.developpez.com
le 30/08/2010 à 1:19
Citation Envoyé par OsoNet  Voir le message
Merci pour ta réponse. Je repars, content d'être "normal".

Hum... si tu considères l'audience de cette discussion comme des gens "normaux", tu es effectivement normal... mais honnêtement, je pense qu'ici on est tous un peu azimuthés (moi compris, et je l'assume )
Avatar de B.AF B.AF - Membre chevronné https://www.developpez.com
le 30/08/2010 à 20:33
Citation Envoyé par tomlev  Voir le message
Hum... si tu considères l'audience de cette discussion comme des gens "normaux", tu es effectivement normal... mais honnêtement, je pense qu'ici on est tous un peu azimuthés (moi compris, et je l'assume )

Oui normaux, tout à fait !!!!
Avatar de davcha davcha - Membre expérimenté https://www.developpez.com
le 01/09/2010 à 18:02
Citation Envoyé par tomlev  Voir le message
Hum... si tu considères l'audience de cette discussion comme des gens "normaux", tu es effectivement normal... mais honnêtement, je pense qu'ici on est tous un peu azimuthés (moi compris, et je l'assume )

J'allais dire "Ben, pas forcément non", puis parler de mon cas. Mais après y avoir réfléchi environ 3 fractions de secondes, je vais m'abstenir.

Pour le reste de la discussion, quelques trucs que j'ai noté :

Les pointeurs dans un langage de haut niveau... En fait pourquoi pas. Mais le souci est de trouver un sens à l'utilisation d'un pointeur. J'entends un sens "sémantique" et non une raison technique.
Or un pointeur, ça me parait quand même clairement technique : un moyen de se balader dans la mémoire d'un système ?... Pas très abstrait, tout ça.

Les templates C++, je les regrette en .NET. Ceci dit... Ils peuvent être plus ou moins remplacés plus ou moins facilement via des expressions Linq compilées, CodeDom ou au pire Emit.

Pour le reste, je commenterais (peut-être) plus tard. Là, je rentre chez moi.
Avatar de tomlev tomlev - Rédacteur/Modérateur https://www.developpez.com
le 01/09/2010 à 20:47
Citation Envoyé par davcha  Voir le message
Les templates C++, je les regrette en .NET. Ceci dit... Ils peuvent être plus ou moins remplacés plus ou moins facilement via des expressions Linq compilées, CodeDom ou au pire Emit.

C'est vrai que les templates C++ offrent des possibilités intéressantes, qui n'ont pas d'équivalent en .NET. D'un autre côté, vu qu'en C++ l'instanciation des templates se fait à la compilation, tu ne peux pas utiliser un template dynamiquement à l'exécution, alors que c'est possible avec les génériques en .NET via la réflexion. Par exemple :

Code : Sélectionner tout
1
2
3
4
5
6
object MakeList(Type elementType) 
{ 
    Type openType = typeof(List<>); 
    Type closedType = openType.MakeGenericType(new[] { elementType }); 
    return Activator.CreateInstance(closedType); 
}
(mais c'est vrai qu'il est rarement utile de faire ce genre de choses...)

Par contre je ne vois pas trop ce que tu veux dire concernant les expressions Linq...
Avatar de cinemania cinemania - Membre expérimenté https://www.developpez.com
le 02/09/2010 à 0:26
effectivement tomlev... un bon exemple, dont on ne se sert que rarement...
note: les activateurs c'est pas bien... c'est lent ces sales bêtes... la LCG par contre, mais bon j'avoue pour un exemple, ca ne le ferait pas

davcha euh oui là j'avoue que pour les expressions Linq ou les lambda expressions, je vois pas bien le rapport avec les templates...
Avatar de tomlev tomlev - Rédacteur/Modérateur https://www.developpez.com
le 02/09/2010 à 0:58
Citation Envoyé par cinemania  Voir le message
note: les activateurs c'est pas bien... c'est lent ces sales bêtes... la LCG par contre, mais bon j'avoue pour un exemple, ca ne le ferait pas

En quoi c'est lent ? ça va juste créer l'objet avec le constructeur par défaut, non ? en tout cas je vois pas de moyen plus simple de créer un objet à partir de son type...

Sinon je vois pas bien comment ça pourrait être plus rapide avec la LCG ? Enfin en même temps j'ai jamais utilisé ça...
Avatar de B.AF B.AF - Membre chevronné https://www.developpez.com
le 02/09/2010 à 11:57
Citation Envoyé par tomlev  Voir le message
En quoi c'est lent ? ça va juste créer l'objet avec le constructeur par défaut, non ? en tout cas je vois pas de moyen plus simple de créer un objet à partir de son type...

Sinon je vois pas bien comment ça pourrait être plus rapide avec la LCG ? Enfin en même temps j'ai jamais utilisé ça...

En passant un coup de Reflector sur l'utilisation d'un activator tu devrais comprendre. Ca provoque une succession de casts et surtout la réflection donne un niveau d'abstraction, ce qui n'arrange pas la choucroute.

LCG te permet de gérer de la IL directement, donc un niveau de contrôle supérieur plus "close to the metal".

Codedom lui émet du code, donc nécessite une compilation et une invocation.

Quant aux génériques, il suffit de voir ce que donne le new T() pour avoir froid dans le dos ....Il passe par un Activator..Ce qui se chunte par..L'utilisation des lambdas...Comme quoi, tous les sujets se recoupent !
Avatar de davcha davcha - Membre expérimenté https://www.developpez.com
le 02/09/2010 à 13:49
On peut obtenir plus ou moins le même comportement avec des expressions linq qu'avec les templates C++. Au même titre que de l'emit et/ou du LCG, en fait.

La différence est qu'avec des expressions Linq, tu n'auras pas à t'embêter avec le code msil.

Typiquement, je m'en sers pour remplacer les appels à Activator et à la reflection lors de l'initialisation de types dont je ne connais pas les membres à la compilation.

Code c# : Sélectionner tout
1
2
Expression p = Expression.Parameter(typeof(InputData)); 
Func<InputData,T> ctor = Expression.Lambda(Expression.MemberInit(Expression.New(typeof(T).GetConstructor(...).... blablabla...
En très très gros et de très loin, hein. Je me rappelle pas précisément des signatures de ces méthodes. :p

Mais c'est assez agréable à utiliser, ça permet de faire beaucoup de choses très facilement.
Avatar de tomlev tomlev - Rédacteur/Modérateur https://www.developpez.com
le 02/09/2010 à 14:09
Citation Envoyé par B.AF  Voir le message
Quant aux génériques, il suffit de voir ce que donne le new T() pour avoir froid dans le dos ....Il passe par un Activator..

Effectivement, je viens de vérifier, c'est dingue ça

Mais bon, après faut voir ce qu'on appelle "lent"... je viens de faire un petit test : pour créer 1000000 instances de List<int>, ça prend entre 100 et 300ms. Donc bon, a priori c'est pas ça qui va foutre par terre les performances de toute une appli...

Sinon je viens de tester la LCM, c'est vrai que ça marche bien... à condition de générer la méthode une seule fois et de la réutiliser à chaque fois ! Donc si c'est pour créer plein d'instances en boucle, la LCM c'est bien, mais si c'est pour en créer une seule, ça va plus vite avec Activator.CreateInstance.
Avatar de cinemania cinemania - Membre expérimenté https://www.developpez.com
le 02/09/2010 à 14:32
c'est sure tomlev... la LCG c'est un peu l'artillerie lourde... c'est sure que c'est pas fait pour une instanciation, mais quand tu instancie en masse... les temps économisés sont plutôt sympa. bien qu'il faut admettre que l'activateur ne soit pas le plus long des process de la reflexion...
le Invoke sur une méthode, là c'est chaud... alors une méthode de temps en temps ca passe inaperçu, des appels dynamiques partout... c'est plus du tout la même histoire... je te parle même pas des accès aux propriétés...
faudrait que je fasse un ptit reflector sur un serialiseur pour voir ce qu'il fait mais je serait pas surpris qu'il utilise la reflexion lol...

effectivement davcha passer par les lambda-expressions et tout particulièrement par leur compilation permet de s'affranchir les migraines nécessaires quand on n'a pas l'habitude de msil et qu'on souhaite faire un truc simple.
perso je me suis fait mon lot de classes et de process qui passe par la LCG, mais bon ils ont été écrits avant que je ne découvre les arbres de construction des lambda, et puis je viens du monde assembleur, alors le MSIL me dérange pas trop
Les lambda, c'est très sympa dans certains cas, comme obtenir le nom d'une propriété pour faire de la reflexion ... (voir les exemples qui sont dans le code de la DvP pour cela)
Une autre alternative aux lambda et la LCG c'est d'utiliser le célèbre CreateDelegate quand le besoin est très simple... un appel à un delegate sera toujours plus rapide qu'une invocation par reflexion, mais le createdelegate n'est pas possible pour une "activation".

effectivement, je viens de regarder aussi, le new T(), c'est une horreur
Offres d'emploi IT
Ingénieur analyste programmeur (H/F)
Safran - Auvergne - Montluçon (03100)
Ingénieur développement fpga (traitement vidéo) H/F
Safran - Ile de France - 100 rue de Paris 91300 MASSY
Architecte systèmes études & scientifiques H/F
Safran - Ile de France - Vélizy-Villacoublay (78140)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil