2010-11-15 15 views

risposta

15

Il Common Language Runtime (CLR) è il nucleo di servizi offerti da .NET - un sistema di tipo, JIT, un garbage collector, & c. Quelli sono disponibili per tutti i linguaggi .NET, da qui la parte "comune".

Il Dynamic Language Runtime (DLR) si basa su questo e offre servizi per linguaggi dinamici: tipi dinamici, invio metodo dinamico, generazione codice, & c. L'idea è di renderle uniformi e condividerle tra linguaggi dinamici in modo che funzionino in modo prevedibile e simile, proprio come le cose sul CLR sono anche in tutte le lingue.

In un modo che sono paragonabili, un linguaggio "normale" su .NET utilizza il CLR, un linguaggio dinamico dovrebbe utilizzare il DLR, ma utilizzerà anche il CLR. Sono insiemi di funzionalità di base che i progettisti considerano validi quando sono comuni in tutte le lingue. IronPython e IronRuby sono stati implementati sulla parte superiore del DLR, così come la funzionedi C# 4.

13

mi limiterò a aggiungere un semplice diagramma per dimostrare il punto:

"*** 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

Ottenere il diagramma di destra è più difficile di quanto pensassi :-) –

+0

@Joey, link interrotto – James

3

Solo l'aggiunta di un po 'di chiarezza ai già dato risposte eccellenti.

Prima il CLR, questo è un livello di astrazione che si trova tra il codice utente e l'hardware fisico. Ci sono diversi vantaggi:

  1. Hardware indipendenza 2. sistema di tipo Common interoperabilità 3. Lingua

CLR

.NET DLR è stato creato da Jim Hugunin ed era

Il dynamic language runtime (DLR) è un ambiente runtime che aggiunge un set di servizi per le lingue dinamiche al Common Language Runtime (CLR). Il DLR semplifica lo sviluppo di linguaggi dinamici da eseguire su .NET Framework e l'aggiunta di funzionalità dinamiche a linguaggi tipizzati in modo statico.
I linguaggi dinamici possono identificare il tipo di un oggetto in fase di esecuzione, mentre in linguaggi tipizzati staticamente come C# e Visual Basic (quando si utilizza Option Explicit On) è necessario specificare i tipi di oggetto in fase di progettazione. Esempi di linguaggi dinamici sono Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra e Groovy.

DLR Architettura
DLR

Il DLR aggiunge una serie di servizi per il CLR per una migliore supporto linguaggi dinamici. Questi servizi includono quanto segue: Alberi di espressione. Il DLR utilizza gli alberi di espressione per rappresentare la semantica del linguaggio.A tale scopo, il DLR ha esteso gli alberi di espressione LINQ per includere il flusso di controllo, l'assegnazione e altri nodi di modellazione della lingua. Per ulteriori informazioni, vedere Expression Trees (C# e Visual Basic). Caching del sito di chiamata. Un sito di chiamata dinamico è un posto nel codice in cui si esegue un'operazione come a + b o a.b() su oggetti dinamici. Il DLR memorizza nella cache le caratteristiche di aeb (di solito i tipi di questi oggetti) e le informazioni sull'operazione. Se tale operazione è stata eseguita in precedenza, il dispositivo DLR recupera tutte le informazioni necessarie dalla cache per l'invio rapido. Interoperabilità dinamica degli oggetti. Il DLR fornisce un insieme di classi e interfacce che rappresentano oggetti e operazioni dinamici e può essere utilizzato dagli implementatori linguistici e dagli autori di librerie dinamiche. Queste classi e interfacce includono IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject e ExpandoObject. Il DLR utilizza i raccoglitori nei siti di chiamata per comunicare non solo con .NET Framework, ma con altre infrastrutture e servizi, tra cui Silverlight e COM. I raccoglitori incapsulano la semantica di una lingua e specificano come eseguire le operazioni in un sito di chiamata utilizzando gli alberi di espressione. Ciò consente di utilizzare linguaggi dinamici e tipizzati in modo statico che utilizzano il DLR per condividere librerie e accedere a tutte le tecnologie supportate dal DLR.

Esempi

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++; 
Problemi correlati