Vue d'ensemble du Dynamic Language RuntimeDynamic Language Runtime Overview

Le Dynamic Language Runtime (DLR) est un environnement d’exécution ajoutant au Common Language Runtime (CLR) un ensemble de services pour les langages dynamiques.The dynamic language runtime (DLR) is a runtime environment that adds a set of services for dynamic languages to the common language runtime (CLR). Le DLR simplifie le développement de langages dynamiques à exécuter sur le .NET Framework et l’ajout de fonctionnalités dynamiques aux langages typés statiquement.The DLR makes it easier to develop dynamic languages to run on the .NET Framework and to add dynamic features to statically typed languages.

Les langages dynamiques peuvent identifier le type d’un objet au moment de l’exécution, alors que dans les langages typés statiquement tels que C# et Visual Basic (quand vous utilisez Option Explicit On) vous devez spécifier les types d’objets au moment du design.Dynamic languages can identify the type of an object at run time, whereas in statically typed languages such as C# and Visual Basic (when you use Option Explicit On) you must specify object types at design time. Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra et Groovy sont des exemples de langages dynamiques.Examples of dynamic languages are Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, and Groovy.

La plupart des langages dynamiques offrent les avantages suivants pour les développeurs :Most dynamic languages provide the following advantages for developers:

  • Possibilité d’utiliser une boucle de rétroaction rapide (REPL, Read-Evaluate-Print Loop).The ability to use a rapid feedback loop (REPL, or read-evaluate-print loop). Cela vous permet d’entrer plusieurs instructions et de les exécuter immédiatement pour consulter les résultats.This lets you enter several statements and immediately execute them to see the results.

  • Prise en charge du développement descendant et du développement ascendant plus classique.Support for both top-down development and more traditional bottom-up development. Par exemple, quand vous utilisez une approche descendante, vous pouvez appeler des fonctions qui ne sont pas encore implémentées, puis ajouter des implémentations sous-jacentes en fonction de vos besoins.For example, when you use a top-down approach, you can call functions that are not yet implemented and then add underlying implementations when you need them.

  • Simplification de la refactorisation et des modifications de code, puisque vous n’avez pas besoin de changer des déclarations de types statiques dans tout le code.Easier refactoring and code modifications, because you do not have to change static type declarations throughout the code.

Les langages dynamiques sont d’excellents langages de script.Dynamic languages make excellent scripting languages. Les clients peuvent facilement étendre des applications créées à l’aide des langages dynamiques avec de nouvelles commandes et fonctionnalités.Customers can easily extend applications created by using dynamic languages with new commands and functionality. Les langages dynamiques sont fréquemment utilisés pour la création de sites web et d’ateliers de test, la gestion de batteries de serveurs, le développement de différents utilitaires et l’exécution de transformations de données.Dynamic languages are also frequently used for creating Web sites and test harnesses, maintaining server farms, developing various utilities, and performing data transformations.

L’objectif du DLR est de permettre à un système de langages dynamiques de s’exécuter sur le .NET Framework et de fournir l’interopérabilité .NET.The purpose of the DLR is to enable a system of dynamic languages to run on the .NET Framework and give them .NET interoperability. Le DLR ajoute des objets dynamiques à Visual C# et Visual Basic pour prendre en charge le comportement dynamique dans ces langages et permettre leur interopérabilité avec les langages dynamiques.The DLR adds dynamic objects to C# and Visual Basic to support dynamic behavior in these languages and enable their interoperation with dynamic languages.

Le DLR vous aide également à créer des bibliothèques qui prennent en charge les opérations dynamiques.The DLR also helps you create libraries that support dynamic operations. Par exemple, si vous avez une bibliothèque qui utilise des objets XML ou JSON (JavaScript Object Notation), vos objets peuvent apparaître comme des objets dynamiques aux langages qui utilisent le DLR.For example, if you have a library that uses XML or JavaScript Object Notation (JSON) objects, your objects can appear as dynamic objects to languages that use the DLR. Cela permet aux utilisateurs de la bibliothèque d’écrire syntaxiquement un code plus simple et plus naturel pour l’utilisation des objets et l’accès aux membres objets.This lets library users write syntactically simpler and more natural code for operating with objects and accessing object members.

Par exemple, vous pouvez utiliser le code suivant pour incrémenter un compteur en XML en C#.For example, you might use the following code to increment a counter in XML in C#.

Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);

Avec le DLR, vous pouvez utiliser à la place le code suivant pour la même opération.By using the DLR, you could use the following code instead for the same operation.

scriptobj.Count += 1;

Comme le CLR, le DLR fait partie du .NET Framework et est fourni avec les packages d’installation de Visual Studio et du .NET Framework.Like the CLR, the DLR is a part of the .NET Framework and is provided with the .NET Framework and Visual Studio installation packages. La version open-source du DLR peut également être téléchargée à partir du dépôt IronLanguages/dlr sur GitHub.The open-source version of the DLR is also available for download on the IronLanguages/dlr repo on GitHub.

Note

La version Open Source du DLR fournit toutes les fonctionnalités du DLR disponibles dans Visual Studio et dans le .NET Framework.The open-source version of the DLR has all the features of the DLR that is included in Visual Studio and the .NET Framework. Elle fournit également une prise en charge supplémentaire pour les implémenteurs de langage.It also provides additional support for language implementers. Pour plus d’informations, consultez la documentation dans le dépôt IronLanguages/dlr sur GitHub.For more information, see the documentation on the IronLanguages/dlr repo on GitHub.

Voici quelques exemples de langages développés à l’aide du DLR :Examples of languages developed by using the DLR include the following:

  • IronPython.IronPython. Disponible en logiciel open source sur le site web GitHub.Available as open-source software from the GitHub Web site.

  • IronRuby.IronRuby. Disponible en tant que logiciel open source à partir du site web RubyForge.Available as open-source software from the RubyForge Web site.

Principaux avantages du DLRPrimary DLR Advantages

Le DLR offre les avantages suivants.The DLR provides the following advantages.

Il simplifie le portage de langages dynamiques vers le .NET FrameworkSimplifies Porting Dynamic Languages to the .NET Framework

Le DLR évite aux implémenteurs de langage d’avoir à créer des analyseurs lexicaux, des analyseurs, des analyseurs sémantiques, des générateurs de code et d’autres outils qu’ils doivent traditionnellement créer eux-mêmes.The DLR allows language implementers to avoid creating lexical analyzers, parsers, semantic analyzers, code generators, and other tools that they traditionally had to create themselves. Pour utiliser le DLR, un langage doit créer des arborescences de l’expression, qui représentent le code de niveau langage dans une structure en forme d’arborescence, des routines d’assistance runtime et des objets dynamiques facultatifs qui implémentent l’interface IDynamicMetaObjectProvider.To use the DLR, a language needs to produce expression trees, which represent language-level code in a tree-shaped structure, runtime helper routines, and optional dynamic objects that implement the IDynamicMetaObjectProvider interface. Le DLR et le .NET Framework automatisent un grand nombre de tâche d’analyse du code et de génération du code.The DLR and the .NET Framework automate a lot of code analysis and code generation tasks. Cela permet aux implémenteurs de langage de se concentrer exclusivement sur les fonctionnalités de langage.This enables language implementers to concentrate on unique language features.

Il active les fonctions dynamiques dans les langages typés statiquementEnables Dynamic Features in Statically Typed Languages

Les langages .NET Framework existants tels que Visual C# et Visual Basic peuvent créer des objets dynamiques et les utiliser avec des objets typés statiquement.Existing .NET Framework languages such as C# and Visual Basic can create dynamic objects and use them together with statically typed objects. Par exemple, Visual C# et Visual Basic peuvent utiliser des objets dynamiques pour la réflexion .NET, HTML et DOM (Document Object Model).For example, C# and Visual Basic can use dynamic objects for HTML, Document Object Model (DOM), and .NET reflection.

Il offre les avantages futurs du DLR et du .NET FrameworkProvides Future Benefits of the DLR and .NET Framework

Les langages implémentés à l’aide du DLR peuvent bénéficier des améliorations futures du DLR et du .NET Framework.Languages implemented by using the DLR can benefit from future DLR and .NET Framework improvements. Par exemple, si une nouvelle version du .NET Framework fournit un garbage collector amélioré ou un temps de chargement des assemblys plus court, les langages implémentés à l’aide du DLR bénéficient immédiatement du même avantage.For example, if the .NET Framework releases a new version that has an improved garbage collector or faster assembly loading time, languages implemented by using the DLR immediately get the same benefit. Si le DLR ajoute des optimisations telles qu’une meilleure compilation, les performances augmentent également pour tous les langages implémentés à l’aide du DLR.If the DLR adds optimizations such as better compilation, the performance also improves for all languages implemented by using the DLR.

Il permet le partage des bibliothèques et des objetsEnables Sharing of Libraries and Objects

Les objets et les bibliothèques implémentés dans un langage peuvent être utilisés par d’autres langages.The objects and libraries implemented in one language can be used by other languages. Le DLR permet également l’interopérabilité entre les langages typés statiquement et les langages dynamiques.The DLR also enables interoperation between statically typed and dynamic languages. Par exemple, Visual C# peut déclarer un objet dynamique qui utilise une bibliothèque écrite dans un langage dynamique.For example, C# can declare a dynamic object that uses a library that is written in a dynamic language. Parallèlement, les langages dynamiques peuvent utiliser les bibliothèques du .NET Framework.At the same time, dynamic languages can use libraries from the .NET Framework.

Il fournit un appel et une distribution dynamiques rapidesProvides Fast Dynamic Dispatch and Invocation

Le DLR fournit l’exécution rapide des opérations dynamiques en prenant en charge la mise en cache polymorphe avancée.The DLR provides fast execution of dynamic operations by supporting advanced polymorphic caching. Le DLR crée des règles pour les opérations de liaison qui utilisent des objets pour les implémentations du runtime nécessaires, puis il met en cache ces règles afin d’éviter les calculs de liaison gourmands en ressources lors des exécutions consécutives du même code sur les mêmes types d’objets.The DLR creates rules for binding operations that use objects to the necessary runtime implementations and then caches these rules to avoid resource-exhausting binding computations during successive executions of the same code on the same types of objects.

Architecture du DLRDLR Architecture

L’illustration suivante montre l’architecture du Dynamic Language Runtime.The following illustration shows the architecture of the dynamic language runtime.

Vue d’ensemble de l’architecture DLR (Dynamic Language Runtime) Architecture DLRDynamic Language Runtime Architecture Overview DLR architecture

Le DLR ajoute un ensemble de services au CLR pour une meilleure prise en charge des langages dynamiques.The DLR adds a set of services to the CLR for better supporting dynamic languages. Il s’agit des services suivants :These services include the following:

  • Arborescences de l’expression.Expression trees. Le DLR utilise des arborescences de l’expression pour représenter la syntaxe de langage.The DLR uses expression trees to represent language semantics. À cette fin, le DLR a étendu les arborescences de l’expression LINQ pour inclure le flux de contrôle, l’assignation et d’autres nœuds de modélisation de langage.For this purpose, the DLR has extended LINQ expression trees to include control flow, assignment, and other language-modeling nodes. Pour plus d’informations, consultez Arborescences de l’expression.For more information, see Expression Trees.

  • Mise en cache dans le site d’appel.Call site caching. Un site d’appel dynamique est un emplacement dans le code où vous exécutez une opération comme a + b ou a.b() sur des objets dynamiques.A dynamic call site is a place in the code where you perform an operation like a + b or a.b() on dynamic objects. Le DLR met en cache les caractéristiques de a et b (en général, les types de ces objets) et les informations sur l’opération.The DLR caches the characteristics of a and b (usually the types of these objects) and information about the operation. Si une opération de ce type a été exécutée précédemment, le DLR extrait toutes les informations nécessaires du cache pour une distribution rapide.If such an operation has been performed previously, the DLR retrieves all the necessary information from the cache for fast dispatch.

  • Interopérabilité des objets dynamiques.Dynamic object interoperability. Le DLR fournit un ensemble de classes et d’interfaces qui représentent des opérations et des objets dynamiques pouvant être utilisées par les implémenteurs de langage et les auteurs de bibliothèques dynamiques.The DLR provides a set of classes and interfaces that represent dynamic objects and operations and can be used by language implementers and authors of dynamic libraries. Il s’agit notamment des classes et des interfaces IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject et ExpandoObject.These classes and interfaces include IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, and ExpandoObject.

Le DLR utilise des classeurs dans les sites d’appel pour communiquer non seulement avec le .NET Framework, mais aussi avec d’autres infrastructures et services, notamment Silverlight et COM.The DLR uses binders in call sites to communicate not only with the .NET Framework, but with other infrastructures and services, including Silverlight and COM. Les classeurs encapsulent la syntaxe d’un langage et spécifient comment exécuter des opérations dans un site d’appel à l’aide des arborescences de l’expression.Binders encapsulate a language's semantics and specify how to perform operations in a call site by using expression trees. Ainsi, les langages dynamiques et typés statiquement qui utilisent le DLR peuvent partager des bibliothèques et accéder à toutes les technologies prises en charge par le DLR.This enables dynamic and statically typed languages that use the DLR to share libraries and gain access to all the technologies that the DLR supports.

Documentation DLRDLR Documentation

Pour plus d’informations sur la façon d’utiliser la version Open Source du DLR afin d’ajouter le comportement dynamique à un langage, ou sur la façon d’utiliser un langage dynamique avec le .NET Framework, consultez la documentation dans le dépôt IronLanguages/dlr sur GitHub.For more information about how to use the open source version of the DLR to add dynamic behavior to a language, or about how to enable the use of a dynamic language with the .NET Framework, see the documentation on the IronLanguages/dlr repo on GitHub.

Voir aussiSee Also