Compartir a través de


Common Language Runtime y evaluación de expresiones

Importante

En Visual Studio 2015, esta forma de implementar evaluadores de expresiones está en desuso. Para obtener información sobre cómo implementar evaluadores de expresiones CLR, consulte Ejemplo de evaluador de expresiones CLR y Evaluador de expresiones administradas.

Los compiladores, como Visual Basic y C# (pronunciado C-sharp), que tienen como destino Common Language Runtime (CLR), generan lenguaje intermedio de Microsoft (MSIL), que se compila posteriormente en código nativo. CLR proporciona un motor de depuración (DE) para depurar el código resultante. Si tiene previsto integrar el lenguaje de programación propietario en el IDE de Visual Studio, puede optar por compilar en MSIL y, por tanto, no tendrá que escribir su propio DE. Sin embargo, tendrá que escribir un evaluador de expresiones (EE) capaz de evaluar expresiones en el contexto del lenguaje de programación.

Debate

Por lo general, las expresiones de lenguaje de equipo se analizan para generar un conjunto de objetos de datos y un conjunto de operadores que se usan para manipularlos. Por ejemplo, la expresión "A+B" podría analizarse para aplicar el operador de suma (+) a los objetos de datos "A" y "B", lo que podría dar lugar a otro objeto de datos. El conjunto total de objetos de datos, operadores y sus asociaciones se representan con más frecuencia en un programa como árbol, con los operadores en los nodos del árbol y los objetos de datos de las ramas. Una expresión que se ha desglosado en forma de árbol se suele denominar árbol analizado.

Una vez que se ha analizado una expresión, se llama a un proveedor de símbolos (SP) para evaluar cada objeto de datos. Por ejemplo, si se define "A" en más de un método, se debe responder a la pregunta "¿Qué A?" antes de que se pueda determinar el valor de A. La respuesta devuelta por el SP es algo como "El tercer elemento del quinto marco de pila" o "El A que es 50 bytes más allá del inicio de la memoria estática asignada a este método".

Además de producir MSIL para el propio programa, los compiladores CLR también pueden generar información de depuración muy descriptiva escrita en un archivo de Base de datos de programa (.pdb). Siempre que un compilador de lenguaje propietario genere información de depuración en el mismo formato que los compiladores CLR, el SP de CLR puede identificar los objetos de datos con nombre del lenguaje. Una vez identificado un objeto de datos con nombre, ee usa un objeto enlazador para asociar (o enlazar) el objeto de datos al área de memoria que contiene el valor de ese objeto. A continuación, el DE puede obtener o establecer un nuevo valor para el objeto de datos.

Un compilador propietario puede proporcionar información de depuración de CLR llamando a la ISymbolWriter interfaz (que se define en .NET Framework en el espacio de nombres System.Diagnostics.SymbolStore). Al compilar en MSIL y escribir información de depuración a través de estas interfaces, un compilador propietario puede usar CLR DE y SP. Esto simplifica considerablemente la integración de un lenguaje propietario en el IDE de Visual Studio.

Cuando CLR DE llama a la EE propietaria para evaluar una expresión, el DE proporciona la EE con interfaces a un SP y un objeto de enlazador. Por lo tanto, escribir un motor de depuración basado en CLR significa que solo es necesario implementar las interfaces del evaluador de expresiones adecuadas; CLR se encarga del enlace y del control de símbolos.