2009-10-20 4 views
4

.NET 4.0 introduit un nouveau support pour l'envoi d'invocations sur des objets typés dynamiquement. Pour autant que je peux faire sortir, cela implique:Différentes approches de typage dynamique dans le CLR et le JVM

  • aucun changement à la CLR
  • nouveaux types dans le BCL
  • nouveaux compilateurs qui convertissent une nouvelle syntaxe dans les usages des nouveaux types

Dans l'espace Java, les gens discutent adding a new dynamicinvoke bytecode to the JVM de sorte que le dispatch est géré par le JIT, derrière l'abstraction du langage intermédiaire.

L'approche Java a le support de many significant parties.

Cela ressemble à deux approches fondamentalement différentes. Quels sont les mérites de chacun, et pourquoi les deux camps ont-ils choisi de prendre des chemins différents? Je suis particulièrement intéressé par la flexibilité et la performance d'exécution des deux solutions. Les deux VM essayent-elles finalement de réaliser la même chose?

+0

Bien que je ne pense pas qu'il y ait des changements dans le CLR, il y a un nouvel ajout appelé Dynamic Language Runtime (DLR) qui gère la répartition dynamique. – Joren

Répondre

2

L'enregistrement d'un jeu d'instructions de langue intermédiaire est très important pour le système géré, car il peut rendre les nouvelles applications incompatibles avec le runtime installé.

E.g. Sun a évité de changer tout en introduisant des génériques, c'est pourquoi l'implémentation de génériques en Java est à moitié cuite. Dans le même temps MS a introduit de nouvelles instructions pour les génériques. Théoriquement, l'introduction de nouvelles instructions pour l'appel dynamique ouvre des possibilités pour une recherche de méthode plus optimale (par exemple, inline caching).

BTW, .NET 4.0 contiendra version du CLR, bien que ce changement AFAIK version serait causé par les bibliothèques système mis à jour.

+0

+1 merci pour la réponse. Ouais, je sais que c'est un nouveau CLR, mais afaik le jeu d'opcode est le même. Merci pour le lien vers la mise en cache en ligne. Étant donné qu'il s'agit d'un nouveau CLR, savez-vous pourquoi MS a décidé de ne pas saisir l'opportunité d'introduire une nouvelle instruction IL? –

+0

Désolé. Aucune information fiable Mais je pense que juste la compatibilité est suffisante ici. –

+0

Cette compatibilité autoriserait uniquement les exécutables construits pour la nouvelle version CLR à s'exécuter sur l'ancienne CLR. Mais les nouvelles versions de la BCL introduisent de nouvelles API qui cassent la compatibilité de toute façon (par exemple, même le dernier Service Pack 3.5SP1 a cassé la compatibilité avec le BCL brut de 3.5), donc je n'achète pas l'argument de compatibilité ici. Il doit y avoir une autre explication. –