2010-11-15 35 views

Répondre

15

Common Language Runtime (CLR) est l'ensemble de services de base offerts par .NET - un système de type, JIT, un éboueur, & c. Ceux-ci sont disponibles pour tous les langages .NET, d'où la partie "Common".

Le Dynamic Language Runtime (DLR) construit au-dessus de cela et offre des services pour les langages dynamiques: types dynamiques, envoi de méthodes dynamiques, génération de code, & c. L'idée est de rendre ces choses uniformes et de les partager entre les langages dynamiques afin qu'ils fonctionnent de manière prévisible et similaire, tout comme les choses sur le CLR sont aussi dans toutes les langues. En un sens, ceux-ci sont comparables, un langage "normal" sur .NET utilise le CLR, un langage dynamique devrait utiliser le DLR, mais utilisera aussi le CLR. Ce sont des ensembles de fonctionnalités de base que les concepteurs considèrent comme étant bons lorsqu'ils sont communs à plusieurs langues. IronPython et IronRuby ont été implémentés sur le DLR, tout comme la fonctionnalité dynamic de C# 4.

13

Je vais juste ajouter un diagramme simple à démontrer le point:

"*** Runtime & Libraries ***" │ "*** Languages ***" 
┌────────────────────────────────────┤ 
│ .NET Libraries      │ 
│ ┌────────────────────────────────┼──────────────────┐ 
│ │ Dynamic Language Runtime (DLR) │ C# 4.0 'dynamic' ├────┐ 
├───┴────────────────────────────────┼──────────────────┘ │ 
│ Common Language Runtime (CLR)  │ C# 1.0, 2.0, 3.0 │ 
└────────────────────────────────────┴───────────────────────┘ 
+6

Obtenir le schéma est juste plus dur que je pensais :-) –

+0

@Joey, lien mort – James

3

juste ajouter un peu de clarté aux réponses déjà données excellentes. D'abord le CLR, il s'agit d'une couche d'abstraction qui se trouve entre le code utilisateur et le matériel physique. Il y a plusieurs avantages:

  1. indépendance matérielle 2. Système de type commun 3. interopérabilité linguistique

CLR

Le .Net DLR a été créé par Jim Hugunin et était

Le l'exécution de la langue dynamique (DLR) est un environnement d'exécution qui ajoute un ensemble de services pour les langages dynamiques au Common Language Runtime (CLR). Le DLR facilite le développement de langages dynamiques pour s'exécuter sur .NET Framework et pour ajouter des fonctionnalités dynamiques aux langages statiquement typés.
Les langages dynamiques peuvent identifier le type d'un objet lors de l'exécution, tandis que dans les langages statiquement typés tels que C# et Visual Basic (lorsque vous utilisez Option Explicit On), vous devez spécifier les types d'objet au moment du design. Des exemples de langages dynamiques sont Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra et Groovy.

DLR architecture
DLR

Le DLR ajoute un ensemble de services à la CLR pour une meilleure langages dynamiques de soutien. Ces services sont les suivants: Arbres d'expression. Le DLR utilise des arbres d'expression pour représenter la sémantique du langage.À cette fin, le DLR a étendu les arborescences d'expression LINQ pour inclure le flux de contrôle, l'affectation et d'autres nœuds de modélisation de langage. Pour plus d'informations, consultez Arbres d'expression (C# et Visual Basic). Appel de la mise en cache de site. Un site d'appel dynamique est un emplacement dans le code où vous effectuez une opération comme a + b ou a.b() sur des objets dynamiques. Le DLR met en cache les caractéristiques de a et b (généralement les types de ces objets) et des informations sur l'opération. Si une telle opération a déjà été effectuée, le DLR récupère toutes les informations nécessaires dans le cache pour une distribution rapide. Interopérabilité des objets dynamiques. Le DLR fournit un ensemble de classes et d'interfaces qui représentent des objets et des opérations dynamiques et peut être utilisé par les implémenteurs de langage et les auteurs de bibliothèques dynamiques. Ces classes et interfaces incluent IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject et ExpandoObject. Le DLR utilise des liants dans les sites d'appel pour communiquer non seulement avec le .NET Framework, mais avec d'autres infrastructures et services, y compris Silverlight et COM. Les binders encapsulent la sémantique d'un langage et spécifient comment effectuer des opérations dans un site d'appel à l'aide d'arborescences d'expression. Cela permet aux langages dynamiques et statiquement typés qui utilisent le DLR de partager des bibliothèques et d'accéder à toutes les technologies prises en charge par le DLR.

Exemples

dynamic d = "test"; 
Console.WriteLine(d.GetType()); 
// Prints "System.String". 

d = 100; 
Console.WriteLine(d.GetType()); 
// Prints "System.Int32".  

dynamic d = "test"; 

// The following line throws an exception at run time. 
d++;