Question

J'ai lu d'innombrables blogs, publications et questions StackOverflow sur les nouvelles fonctionnalités de C # 4.0. Même les nouvelles fonctionnalités de WPF 4.0 ont commencé à faire leur apparition. Ce que je n'ai pas pu trouver et aimerai savoir:

  1. Quels sont les principaux changements apportés à CLR 4.0 par les développeurs C # / WPF?
  2. Quels sont les principaux changements apportés à CLR 4.0 dans son ensemble?

Je pense qu'en interne, la plupart des modifications concernent les nouveaux langages dynamiques et la programmation parallèle. Mais y a-t-il d'autres améliorations majeures? Parce que les améliorations linguistiques ne sont que cela, des améliorations linguistiques. Vous avez juste besoin du nouveau compilateur et ces fonctionnalités peuvent être utilisées avec une version inférieure de .Net, à l'exception de la version 1.0 / 1.1 (au moins, la plupart d'entre elles peuvent être utilisées).

Et si les fonctionnalités ci-dessus sont les seules, la version est modifiée pour la version 4.0, qui, je pense, est 4.0 car elle est basée sur la version .Net 4.0 (c’est-à-dire après 1.0 / 1.1, 2.0 &) ; 3,0 / 3,5). L'incrément de version est-il justifié?

Modifié:

Comme Pavel Minaev l’a souligné dans ses commentaires, même ces deux caractéristiques sont indépendantes du CLR. Il y avait aussi de la vitesse et d'autres améliorations dans les versions 3.0 et 3.5. Alors, pourquoi l’incrément de version?

Était-ce utile?

La solution

Une nouvelle chose CLR que je connaisse est une forme de typage structurel pour les interfaces, les structures et les délégués en vue de Prise en charge de NoPIA : en principe, le moteur d'exécution traite les types distincts avec des définitions équivalentes comme s'ils étaient identiques, ainsi si deux assemblys A et B ont chacun une importation COM. l’interface IFoo déclarée dans celles-ci, avec le même IID et les mêmes membres, le runtime les traitera comme des types équivalents; donc s'il y a une instance d'une classe Foo mettant en œuvre [A]IFoo, vous pouvez la convertir en [B]IFoo, et la distribution fonctionnera.

Une autre chose est la possibilité d’héberger plusieurs versions de CLR côte à côte au cours d’un même processus. Par exemple, vous ne pouvez pas héberger les versions 1.x et 2.0 dans un processus, mais vous pouvez héberger les versions 2.0 et 4.0. Le principal avantage de cette fonctionnalité est la possibilité de charger simultanément des plug-in écrits pour l'une ou l'autre version du CLR.

Un détail mineur est que quelques exceptions supplémentaires sont devenues inconcevables, comme StackOverflowException l'était dans la version 2.0 - vous ne pouvez plus capturer AccessViolationException, par exemple.

ici est une présentation PowerPoint sur CLR 4.0. de PDC 2008. Cela date peut-être un peu, mais la plupart des choses mentionnées ici semblent être dans les bêtas.

Autres conseils

Il y a un très grand nombre de changements.

Dans le CLR lui-même, quelques modifications ont été apportées. Le ramasse-miettes est en cours de modification pour prendre en charge la collecte simultanée de gen0 / 1 et gen2 en mode station de travail. De plus, la mise en œuvre de la sécurité a subi quelques changements. L'infrastructure parallèle modifie une partie de la mise en œuvre du pool de threads par le CLR (qui n'est pas entièrement géré, mais fait partie du moteur d'exécution lui-même). De plus, quelques modifications ont été apportées au système de types, principalement liées au nouveau support PIA COM.

Les changements les plus importants sont probablement plus des changements de bibliothèque / structure, plutôt que des changements CLR. telles que l’intégration du DLR dans le cadre et le nouveau type dynamique. En termes de framework, vous avez le framework réactif, les extensions de librairies parallèles, les contrats de code, le support des tuples, et beaucoup de petites modifications (par exemple: Enum.TryParse, Lazy<T> et de nombreuses autres améliorations mineures mais intéressantes).

Je ne crois pas qu'il y ait de nouvelles instructions IL. Le nouveau CLR apporte des améliorations à des tâches telles que l'inline et la récupération de place qui font le même travail que le 2.0 CLR, mais en mieux. Une machine virtuelle (telle que le CLR ou la JVM) est un concept abstrait avec plusieurs implémentations possibles. Je pense que CLR 4.0 est la même machine abstraite que dans CLR 2.0, mais avec une implémentation améliorée.

Même le nouveau contenu dynamique n’est qu’une astuce du compilateur avec les nouvelles API (contrairement à Java où il est proposé comme nouvel opcode .)

Si je me trompe à ce sujet, j'aimerais bien le savoir!

Pour chaque version, les équipes de documentation créent " Quoi de neuf " documents.

Voici celui de la version bêta 2 de C # 4.0: Nouveau dans Visual C # 2010

Et voici celui de .NET Framework 4.0 Beta2: Nouveautés de .NET Framework Version 4

Voici la liste la plus complète des modifications que vous pouvez trouver.

De nombreux types d'interface principale et de délégué dans le CLR ont été mis à jour pour prendre en charge covariance et contravariance génériques . Par exemple, IEnumerable<T> a été remplacé par IEnumerable<out T>.

J'ai essayé de regarder quelques-uns des nouveaux trucs C # dans Reflector, pour voir s'il y a quelque chose de nouveau sous:

    Les types
  • dynamiques sont convertis en objets , via la magie du compilateur, qui ajoute des appels de bibliothèque pour gérer les liaisons d'exécution.
  • Les paramètres facultatifs sont gérés via le compilateur. Si vous appelez Foo (int x = 5), sans spécifier de valeur pour x, l'appel apparaîtra sous la forme Foo (5) dans Reflector.

Donc, je suppose que les modifications ne sont aucunement facilement identifiables (comme le support générique dans CLR 2.0).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top