Condividi tramite


Common Language Runtime e valutazione delle espressioni

Importante

In Visual Studio 2015 questo modo di implementare gli analizzatori di espressioni è deprecato. Per informazioni sull'implementazione degli analizzatori di espressioni CLR, vedere l'esempio degli analizzatori di espressioni CLR e dell'analizzatore di espressioni gestite.

I compilatori, ad esempio Visual Basic e C# (pronunciati C-sharp), destinati a Common Language Runtime (CLR), producono Microsoft Intermediate Language (MSIL), che verrà compilato successivamente nel codice nativo. CLR fornisce un motore di debug (DE) per eseguire il debug del codice risultante. Se si prevede di integrare il linguaggio di programmazione proprietario nell'IDE di Visual Studio, è possibile scegliere di eseguire la compilazione in MSIL e pertanto non sarà necessario scrivere una de personalizzata. Tuttavia, è necessario scrivere un analizzatore di espressioni (edizione Enterprise) in grado di valutare le espressioni nel contesto del linguaggio di programmazione.

Discussione

Le espressioni del linguaggio computer vengono in genere analizzate per produrre un set di oggetti dati e un set di operatori usati per modificarle. Ad esempio, l'espressione "A+B" potrebbe essere analizzata per applicare l'operatore di addizione (+) agli oggetti dati "A" e "B", eventualmente generando un altro oggetto dati. Il set totale di oggetti dati, operatori e le relative associazioni sono spesso rappresentati in un programma come albero, con gli operatori nei nodi dell'albero e gli oggetti dati nei rami. Un'espressione suddivisa in forma ad albero è spesso detta albero analizzato.

Dopo l'analisi di un'espressione, viene chiamato un provider di simboli (SP) per valutare ogni oggetto dati. Ad esempio, se "A" è definito in più metodi, è necessario rispondere alla domanda "Quale A?" prima di poter verificare il valore di A. La risposta restituita dal provider di servizi è simile a "Il terzo elemento nel quinto stack frame" o "A che è di 50 byte oltre l'inizio della memoria statica allocata a questo metodo".

Oltre a produrre MSIL per il programma stesso, i compilatori CLR possono anche produrre informazioni di debug molto descrittive scritte in un file Program DataBase (con estensione pdb). Purché un compilatore proprietario del linguaggio produchi informazioni di debug nello stesso formato dei compilatori CLR, il sp di CLR è in grado di identificare gli oggetti dati denominati del linguaggio. Dopo aver identificato un oggetto dati denominato, il edizione Enterprise usa un oggetto binder per associare (o associare) l'oggetto dati all'area di memoria che contiene il valore di tale oggetto. L'oggetto DE può quindi ottenere o impostare un nuovo valore per l'oggetto dati.

Un compilatore proprietario può fornire informazioni di debug CLR chiamando l'interfaccia ISymbolWriter (definita in .NET Framework nello spazio dei nomi System.Diagnostics.SymbolStore). Tramite la compilazione in MSIL e la scrittura di informazioni di debug tramite queste interfacce, un compilatore proprietario può usare CLR DE e SP. Ciò semplifica notevolmente l'integrazione di un linguaggio proprietario nell'IDE di Visual Studio.

Quando CLR DE chiama la edizione Enterprise proprietaria per valutare un'espressione, de fornisce l'edizione Enterprise con interfacce a un sp e a un oggetto binder. Pertanto, la scrittura di un motore di debug basato su CLR significa che è necessario solo implementare le interfacce dell'analizzatore di espressioni appropriate; CLR si occupa dell'associazione e della gestione dei simboli.