Partager via


Common Language Runtime et évaluation des expressions

Important

Dans Visual Studio 2015, cette façon d’implémenter des évaluateurs d’expression est déconseillée. Pour plus d’informations sur l’implémentation des évaluateurs d’expression CLR, consultez les évaluateurs d’expression CLR et l’exemple d’évaluateur d’expression managée.

Les compilateurs, tels que Visual Basic et C# (prononcé C-sharp), qui ciblent le Common Language Runtime (CLR), produisent microsoft Intermediate Language (MSIL), qui est compilé ultérieurement en code natif. Le CLR fournit un moteur de débogage (DE) pour déboguer le code résultant. Si vous envisagez d’intégrer votre langage de programmation propriétaire dans l’IDE Visual Studio, vous pouvez choisir de compiler sur MSIL et donc de ne pas avoir à écrire votre propre DE. Toutefois, vous devrez écrire un évaluateur d’expression (EE) capable d’évaluer des expressions dans le contexte de votre langage de programmation.

Discussion

Les expressions de langage informatique sont généralement analysées pour produire un ensemble d’objets de données et un ensemble d’opérateurs utilisés pour les manipuler. Par exemple, l’expression « A+B » peut être analysée pour appliquer l’opérateur d’ajout (+) aux objets de données « A » et « B », ce qui peut entraîner un autre objet de données. Le jeu total d’objets de données, d’opérateurs et de leurs associations est le plus souvent représenté dans un programme sous la forme d’une arborescence, avec les opérateurs situés aux nœuds de l’arborescence et les objets de données dans les branches. Une expression qui a été divisée en forme d’arbre est souvent appelée arbre analysé.

Une fois qu’une expression a été analysée, un fournisseur de symboles (SP) est appelé pour évaluer chaque objet de données. Par exemple, si « A » est défini à la fois dans plusieurs méthodes, la question « Quel A ? » doit être répondue avant que la valeur d’A puisse être établie. La réponse retournée par le fournisseur de services est similaire à « Le troisième élément sur le cinquième frame de pile » ou « A qui est de 50 octets au-delà du début de la mémoire statique allouée à cette méthode ».

Outre la production de MSIL pour le programme lui-même, les compilateurs CLR peuvent également produire des informations de débogage très descriptives écrites dans un fichier Program DataBase (.pdb). Tant qu’un compilateur de langage propriétaire produit des informations de débogage au même format que les compilateurs CLR, le sp du CLR est en mesure d’identifier les objets de données nommés de ce langage. Une fois qu’un objet de données nommé a été identifié, l’EE utilise un objet binder pour associer (ou lier) l’objet de données à la zone mémoire qui contient la valeur de cet objet. Le DE peut ensuite obtenir ou définir une nouvelle valeur pour l’objet de données.

Un compilateur propriétaire peut fournir des informations de débogage CLR en appelant l’interface ISymbolWriter (définie dans le .NET Framework dans l’espace de noms System.Diagnostics.SymbolStore). En compilant dans MSIL et en écrivant des informations de débogage via ces interfaces, un compilateur propriétaire peut utiliser le CLR DE et le SP. Cela simplifie considérablement l’intégration d’un langage propriétaire dans l’IDE Visual Studio.

Lorsque le CLR DE appelle l’EE propriétaire pour évaluer une expression, le DE fournit l’EE avec des interfaces à un fournisseur de services et un objet binder. Ainsi, l’écriture d’un moteur de débogage basé sur CLR signifie qu’il est nécessaire uniquement d’implémenter les interfaces évaluateurs d’expression appropriées ; le CLR s’occupe de la liaison et de la gestion des symboles pour vous.