Exploration du Dynamic Language Runtime dans .Net

Les langages de type statique sont ceux dans lesquels vous auriez besoin de spécifier le type d'un objet au moment où vous le définissez. Des exemples de langages typés statiquement incluent C #, VB et C ++. Au contraire, dans les langages à typage dynamique, le type d'un objet est déterminé au moment de l'exécution - uniquement au moment où une valeur est affectée au type. Python, Ruby et JavaScript sont des exemples de langages typés dynamiquement.

Le DLR (Dynamic Language Runtime) s'exécute au-dessus du CLR (Common Language Runtime) et ajoute du dynamisme à l'environnement géré de .Net - vous pouvez l'utiliser pour implémenter des fonctionnalités dynamiques dans votre application. En substance, le DLR permet l'interopérabilité entre les langages typés statiquement et dynamiquement dans le contexte du CLR. Vous pouvez utiliser le DLR pour partager des bibliothèques et des objets avec des langages dynamiques. Dans cet article, je présenterais un aperçu de l'environnement Dynamic Language Runtime dans Microsoft .Net.

Vous pouvez obtenir une version open source du DLR auprès de Codeplex.

Qu'est-ce que le DLR?

Le DLR est le résultat des efforts de Microsoft pour que les services s'exécutent au-dessus du CLR et assurent l'interopérabilité entre les langages typés statiquement et dynamiquement. La prise en charge de l'environnement Dynamic Language Runtime est facilitée par l'espace de noms System.Dynamic. Le MSDN déclare: «Le Dynamic Language Runtime (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 à exécuter sur le .Net Framework et pour ajouter des fonctionnalités dynamiques aux langages à typage statique. "

Comment est-ce utile?

Les services fournis par le DLR incluent la prise en charge d'un système de type dynamique, un modèle d'hébergement standard ainsi que la génération et l'envoi de code dynamique. En un coup d'œil, les avantages fournis par le DLR comprennent:

  1. Fournit la prise en charge des fonctionnalités dynamiques dans les langages à typage statique. Avec le DLR en place, vous pouvez créer des objets typés dynamiquement et les utiliser avec vos objets typés statiquement dans votre application.
  2. Permet un portage transparent des langages dynamiques vers le .Net Framework. Le DLR vous permet de porter facilement des langages dynamiques dans le .Net Framework. Pour tirer parti des fonctionnalités DLR, tout ce que votre langage dynamique doit avoir est la capacité de produire des arborescences d'expression et des routines d'aide à l'exécution.
  3. Facilite le partage des bibliothèques et des objets. Le DLR vous permet de créer des objets et des bibliothèques dans une langue accessibles à partir d'une autre langue.
  4. Fournit la prise en charge de la répartition et de l'appel de méthodes dynamiques. Le DLR prend en charge l'appel et la distribution de méthodes dynamiques à l'aide de la mise en cache polymorphe avancée.

Le sous-système Dynamic Language Runtime

Le sous-système DLR est essentiellement composé des trois couches. Ceux-ci comprennent les éléments suivants:

  1. Arbres d'expression - le DLR utilise des arbres d'expression pour représenter la sémantique du langage.
  2. Mise en cache du site d'appel - les appels de méthode utilisant des objets dynamiques sont mis en cache dans la mémoire afin que le DLR puisse utiliser l'historique du cache pour les appels suivants à la même méthode pour une distribution plus rapide.
  3. Interopérabilité dynamique des objets - le DLR permet l'interopérabilité entre les langages typés statiquement et dynamiquement. Le DLR comprend une collection de types - classes et interfaces dans l'espace de noms System.Dynamic. Vous pouvez tirer parti de l'interface IDynamicMetaObjectProvider et des classes DynamicMetaObject, DynamicObject et ExpandoObject pour créer des infrastructures dynamiques.

Classeurs de langue

Les classeurs de langue dans le DLR l'aident à parler à d'autres langues. Ainsi, pour chaque langage dynamique, vous auriez généralement un classeur qui peut interagir avec lui. A titre d'exemple, voici les liants couramment utilisés dans le DLR.

  • .Net Binder - il est utilisé pour parler aux objets .Net
  • JavaScript Binder - utilisé pour parler aux objets créés dans les objets JavaScript
  • IronRuby Binder - permet au DLR de parler aux objets IronRuby
  • IronPython Binder - aide le DLR à parler aux objets IronPython
  • COM Binder - cela aide le DLR à parler aux objets COM

Le mot clé "dynamique"

Vous pouvez profiter du mot-clé dynamic pour accéder à un objet dynamique. Le mot-clé dynamic a été introduit pour la première fois dans .Net Framework 4. Il permet à votre application d'interagir avec les types dynamiques. Ainsi, vous pouvez utiliser le mot-clé dynamic pour accéder à un objet COM ou à un objet créé dans des langages dynamiques tels que Python, Ruby ou JavaScript.

Voici un extrait de code qui illustre comment le mot clé dynamique peut être utilisé.

en utilisant System.Dynamic;

dynamic excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

Nous n'avons plus besoin d'utiliser la réflexion pour accéder aux objets COM - votre code est beaucoup plus propre sans le code de réflexion que vous auriez autrement dû écrire sans le mot-clé dynamic.

Lectures suggérées

//msdn.microsoft.com/en-us/library/dd233052(v=vs.110).aspx