Qual è la relazione tra Dynamic Language Runtime e C # 4.0?


11

Diciamo che volevo creare un compilatore / interprete di linguaggio dinamico, forse un interprete di Scheme, sulla piattaforma .NET così come esiste oggi. Sarebbe meglio usare Dynamic Language Runtime (DLR) o utilizzare C # 4.0 per implementare le funzionalità dinamiche del mio linguaggio? O ho bisogno di entrambi?

So che sono stati fatti altri lavori in quest'area, in particolare con IronScheme e IronPython . Entrambe queste lingue usano il DLR; Credo che IronPython utilizzi la versione più recente del DLR (che risale a circa un anno fa), mentre IronScheme utilizza un fork precocemente fortemente modificato di una versione precedente del DLR. Ma C # 4.0 non era disponibile al momento della creazione di questi compilatori.

Ho visto il lavoro di Rob Conery con Massive, usando le funzionalità dinamiche di C # 4.0; è abbastanza impressionante. Ma C # reggerebbe lo sforzo su vasta scala di un compilatore / integer di linguaggio dinamico? Ci sono funzionalità nel DLR che mancano in C # o il DLR è stato essenzialmente implementato in C # 4.0? Mi mancheranno alcune importanti funzionalità del DLR se avessi usato esclusivamente C # 4.0?


Credo che le funzionalità dinamiche .Net 4.0 siano basate anche sul DLR.
Dave Nay,


@Dave: sarei soddisfatto di un collegamento attuale e autorevole a un articolo che descrive in dettaglio la relazione tra il runtime .NET 4.0 e il DLR. Questo mi darebbe una buona idea se il sistema di tipo dinamico in C # 4.0 è abbastanza robusto e se nel DLR sono presenti funzionalità critiche che sono state omesse dal runtime di .NET 4.0. Ho trovato alcuni articoli, ma sono stati tutti scritti nel giorno in cui il DLR stava prendendo forma, e molti di loro sono speculativi.
Robert Harvey,

Risposte:


3

Questo è l'articolo che ricordo di aver letto. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Successivamente il DLR è stato incluso anche in .NET Framework 4 per supportare funzionalità dinamiche in C # e Visual Basic. Se hai solo bisogno della parola chiave dinamica in C # 4, puoi semplicemente usare .NET Framework e nella maggior parte dei casi gestirà da solo tutte le interazioni con il DLR. Ma se si desidera implementare o trasferire un nuovo linguaggio dinamico su .NET, è possibile trarre vantaggio dalle classi di supporto extra nel progetto open source, che ha più funzionalità e servizi per gli implementatori di linguaggio.


3

Da: jimmysch

Roberto,

I fatti: IronRuby e IronPython usano entrambi il DLR, infatti la maggior parte delle funzionalità del DLR derivano da una precedente implementazione di IronPython. Non ho familiarità con il modo in cui viene utilizzata la versione di DLR IronScheme. Una parte del DLR (Microsoft.Scripting.Core.dll) è stata fornita in .NET 4.0 in System.Core.dll e quella parte è ciò che C # 4.0 utilizza per il suo supporto per le parole chiave "dinamico", motivo per cui l'assembly non è presente nelle versioni .NET 4.0 del DLR.

Il resto della base di codice del DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll sono i più importanti) sono disponibili per il download da questo progetto CodePlex o dal progetto IronLanguages ​​GitHub. Forniscono le API per i consumatori e i produttori di lingue di hosting, mentre le API in .NET 4.0 servono effettivamente per l'invio dinamico di metodi.

Per scrivere un compilatore di linguaggio dinamico per .NET 4.0, utilizzare C # come linguaggio di implementazione e utilizzare DLR come libreria per semplificare le attività comuni del compilatore. Per un semplice linguaggio di esempio sul DLR, guarda Sympl.

~ Jimmy

http://dlr.codeplex.com/discussions/268746#post656778

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.