2009-06-07 9 views
6

J'ai entendu l'affirmation précédente que .Net 3.5 n'a apporté aucune modification à l'IL qu'il compile. En réfléchissant à toutes les fonctionnalités du compilateur que je connais ont été introduites, il semble, en fait, qu'ils pourraient tous être mis en œuvre dans la même ancienne IL, mais je ne peux pas trouver une source officielle pour corroborer cette affirmation. Est-ce vrai?Est-ce que .Net IL a changé du tout depuis .Net 2.0?

+0

pourquoi demandez-vous? –

+8

Pourquoi demandez-vous pourquoi je demande? – sblom

+0

Question supplémentaire: Je sais que 4.0 a définitivement un nouveau CLR, mais a-t-il des changements d'IL? –

Répondre

5

Je pense qu'il n'y a pas eu de changements IL en tant que tels, mais ont eu des changements importants dans la mise en œuvre du CLR pour rendre les méthodes dynamiques plus efficaces, permettent l'expression etc. compilation des arbres, je me souviens il y a eu des changements autour de la sécurité de construction de méthodes dynamiques, pour rendre possible le fait que les expressions lambda générant des arbres d'expression appellent des méthodes privées à travailler même dans des environnements de confiance relativement faibles. Le compilateur sait qu'il est valide d'appeler la méthode privée car le point de compilation du code source y a accès. Prouver que c'est difficile cependant :) Voir this note by Eric Lippert.

+0

L'IL n'a pas changé mais le compilateur aura. Nous avons remarqué, par exemple, que les outils internes de WCF créaient des C# assez différents pour les proxys et autres, qui à leur tour créaient des IL différents lors de la compilation. Voir aussi la discussion sur les "bits rouges" et les "bits verts" dans l'entrée du journal de Soma http://blogs.msdn.com/somasegar/archive/2006/05/18/601354.aspx. –

0

La livraison CLR (Version 2.0.50727) n'a pas changé depuis .NET 2.0, donc votre IL est identique. (Voir aussi this SO QA)

+1

Non, le CLR lui-même * a * changé - une partie de .NET 2.0 SP1 était un changement CLR, je crois. –

+0

Il existe plusieurs versions de la version 2.0.50727 CLR depuis la version .NET Framework 2.0 d'origine. La version originale RTM était par exemple. Version 2.0.50727.42. Sur ma machine (Vista SP2) la version complète est la version 2.0.50727.4016. Cependant, AFAIK il n'y a eu aucun changement fonctionnel depuis la version originale. –

0

..et par conséquent, si vous voulez, vous pouvez utiliser un grand nombre de fonctionnalités .NET 3.5 dans un projet .NET 2.0, tant que vous utilisez le dernier compilateur:

  • propriétés automatiques
  • méthodes d'extension (nécessite un peu tho sale tour)
  • objet initializers
  • inférence de type (mot-clé var)
  • Lambda expressions
Questions connexes