Quelle est la relation entre le Dynamic Language Runtime et C # 4.0?

11

Disons que je voulais créer un compilateur / interprète de langage dynamique, un interprète Scheme peut-être, sur la plate-forme .NET telle qu'elle existe aujourd'hui. Serais-je mieux d'utiliser le Dynamic Language Runtime (DLR) ou d'utiliser C # 4.0 pour implémenter les fonctionnalités dynamiques de mon langage? Ou ai-je besoin des deux?

Je sais qu'il y a eu d'autres travaux dans ce domaine, en particulier avec IronScheme et IronPython . Ces deux langues utilisent le DLR; Je crois qu'IronPython utilise la version la plus récente du DLR (qui a environ un an), tandis qu'IronScheme utilise un fork précoce et fortement modifié d'une version ancienne du DLR. Mais C # 4.0 n'était pas disponible lorsque ces compilateurs ont été créés.

J'ai vu le travail de Rob Conery avec Massive, en utilisant les fonctionnalités dynamiques de C # 4.0; c'est assez impressionnant. Mais C # résisterait-il à l'effort à grande échelle d'un compilateur / interprète de langage dynamique? Y a-t-il des fonctionnalités dans le DLR qui manquent dans C #, ou le DLR a-t-il été essentiellement intégré dans C # 4.0? Est-ce que je manquerais des fonctionnalités importantes du DLR si je n'utilisais que C # 4.0 exclusivement?

Robert Harvey
la source
Je crois que les fonctionnalités dynamiques de .Net 4.0 sont également basées sur le DLR.
Dave Nay
@Dave: Je serais satisfait d'un lien actuel faisant autorité vers un article décrivant en détail la relation entre le runtime .NET 4.0 et le DLR. Cela me donnerait une bonne idée si le système de type dynamique en C # 4.0 est suffisamment robuste et s'il existe des fonctionnalités critiques dans le DLR qui ont été omises du runtime .NET 4.0. J'ai trouvé quelques articles, mais ils ont tous été écrits à l'époque où le DLR prenait forme, et beaucoup d'entre eux sont spéculatifs.
Robert Harvey

Réponses:

3

Voici l'article dont je me souviens avoir lu. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Plus tard, le DLR a également été inclus dans le .NET Framework 4 pour prendre en charge les fonctionnalités dynamiques en C # et Visual Basic. Si vous n'avez besoin que du mot-clé dynamique en C # 4, vous pouvez simplement utiliser le .NET Framework et dans la plupart des cas, il gérera toutes les interactions avec le DLR seul. Mais si vous souhaitez implémenter ou porter un nouveau langage dynamique vers .NET, vous pouvez bénéficier des classes d'assistance supplémentaires dans le projet open source, qui a plus de fonctionnalités et de services pour les implémenteurs de langage.

Dave Nay
la source
3

De: jimmysch

Robert,

Les faits: IronRuby et IronPython utilisent tous deux le DLR, en fait la plupart des fonctionnalités du DLR sont dérivées d'une implémentation antérieure d'IronPython. Je ne sais pas quelle version du DLR IronScheme utilise. Une partie du DLR (Microsoft.Scripting.Core.dll) a été livrée dans .NET 4.0 dans System.Core.dll, et cette partie est ce que C # 4.0 utilise pour sa prise en charge des mots clés «dynamiques», c'est pourquoi cet assemblage n'est pas présent dans les versions .NET 4.0 du DLR.

Le reste de la base de code du DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll sont les plus importants) peuvent être téléchargés à partir de ce projet CodePlex ou du projet IronLanguages ​​GitHub. Ils fournissent les API aux consommateurs et aux producteurs de langages d'hébergement, tandis que les API de .NET 4.0 sont destinées à la distribution dynamique des méthodes.

Pour écrire un compilateur de langage dynamique pour .NET 4.0, j'utiliserais C # comme langage d'implémentation et j'utiliserais le DLR comme bibliothèque pour simplifier les tâches courantes du compilateur. Pour un exemple de langage simple sur le DLR, regardez Sympl.

~ Jimmy

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

Robert Harvey
la source