- Un système de typage dynamique , à partager par tous les langages utilisant les services DLR
- répartition dynamique des méthodes
- génération de code dynamique
- API d'hébergement
Le DLR est utilisé pour implémenter des langages dynamiques sur le framework .NET , notamment les projets IronPython et IronRuby .
Comme les implémentations de langages dynamiques partagent un système sous-jacent commun, leur interaction devrait être facilitée. Par exemple, il devrait être possible d'utiliser des bibliothèques de n'importe quel langage dynamique dans n'importe quel autre langage dynamique. De plus, l'API d'hébergement permet l'interopérabilité avec les langages CLI statiquement typés comme C# et Visual Basic .NET .
MIX 2007.Microsoft a distribué la version bêta 0.9 de .NET DLR en novembre 2008 et la version finale 0.9 en décembre 2008. La version 1.0 a été distribuée en avril 2010. En juillet 2010, Microsoft a modifié la licence de DLR, passant de la Microsoft Public License à l' Apache License 2.0 . Avec la sortie de .NET 4 , également en avril 2010, DLR a été intégré au .NET Framework
Le projet open source DLR, hébergé sur GitHub , offre quelques fonctionnalités supplémentaires aux développeurs de langages. Après sa publication en juillet 2010, le projet a connu une période de faible activité pendant plusieurs années. Un développeur Microsoft ayant travaillé sur IronRuby a interprété ce manque d'activité comme un signe de désengagement de Microsoft envers les langages dynamiques du framework .NET. Cependant, depuis 2016/2017, le projet a repris régulièrement, ce qui a permis d'apporter de nombreuses améliorations et mises à jour.
Implémentations du langage
En 2007, Microsoft prévoyait initialement d'utiliser le DLR pour les futures versions de Visual Basic 2010 (VB 10.0) et Managed JScript ( ECMAScript 3.0), ainsi que pour Python et Ruby.
Les travaux du DLR sur Ruby et Python ont abouti à IronRuby , une implémentation .NET du langage Ruby , et à IronPython .
En août 2009, Microsoft a annoncé qu'il n'avait plus l'intention d'implémenter Managed JScript sur le DLR. Fredrik Holmström a ensuite contribué indépendamment à une implémentation JavaScript pour le DLR qu'il a baptisée « IronJS » dans la tradition de dénomination d'IronPython et d'IronRuby.
Comme C# , Visual Basic peut accéder aux objets des langages dynamiques construits sur le DLR tels qu'IronPython et IronRuby .
PowerShell 3.0, publié dans Windows 8 , a été mis à jour pour utiliser le DLR.
IronScheme , une implémentation de Scheme , prévoyait de s'appuyer sur le DLR. Cette idée a été abandonnée car la branche DLR utilisée par le projet est devenue désynchronisée avec la branche principale , et aussi parce que (selon le coordinateur du projet) la version actuelle du DLR à cette époque ne pouvait pas prendre en charge la majorité des exigences de Scheme.
Architecture
Le Dynamic Language Runtime (DLR) repose sur l'idée qu'il est possible d'implémenter les spécificités d'un langage sur un arbre de syntaxe abstraite générique et indépendant du langage , dont les nœuds correspondent à une fonctionnalité spécifique commune à de nombreux langages dynamiques. Cette architecture est fondée sur le principe que le nombre de constructions élémentaires du langage à implémenter sur la pile générique doit être intrinsèquement limité. Le DLR génère dynamiquement le code correspondant à la fonctionnalité exprimée par ces nœuds. Le compilateur de tout langage dynamique implémenté sur le DLR doit générer les arbres abstraits du DLR et les transmettre aux bibliothèques du DLR.
Le DLR fournit DynamicSitedes objets mis à jour dynamiquement qui prennent en charge la liaison des méthodes aux objets. Étant donné que le type d'un objet (ainsi que ses membres) peut évoluer au cours de l'exécution d'un programme dans les langages dynamiques, un appel de méthode doit consulter la liste des méthodes pour vérifier sa validité. DynamicSiteLes objets représentent et mettent en cache l'état de l'objet et de ses méthodes ; toute mise à jour de l'objet est DynamicSiteégalement répercutée dans ces objets. Le DLR achemine tous les appels de méthode via ces DynamicSiteobjets, qui effectuent ensuite une recherche et une liaison rapides de la méthode avec son implémentation.
Contrairement à d'autres initiatives comme la machine virtuelle Parrot (sans dépendances) ou la machine Da Vinci (construite sur la JVM de Java en ajoutant de nouveaux bytecodes dans le jeu d'instructions de la JVM ), le DLR est construit sur le Common Language Runtime existant , la machine virtuelle .NET Framework .