Środowisko uruchomieniowe języka wspólnego i ocena wyrażeń
Ważne
W programie Visual Studio 2015 ten sposób implementowania ewaluatorów wyrażeń jest przestarzały. Aby uzyskać informacje na temat implementowania ewaluatorów wyrażeń CLR, zobacz ewaluatory wyrażeń CLR i przykład ewaluatora wyrażeń zarządzanych.
Kompilatory, takie jak Visual Basic i C# (wymawiane w języku C-sharp), przeznaczone dla środowiska uruchomieniowego języka wspólnego (CLR), generują język Microsoft Intermediate Language (MSIL), który jest później kompilowany do kodu natywnego. ClR udostępnia aparat debugowania (DE) do debugowania wynikowego kodu. Jeśli planujesz zintegrować zastrzeżony język programowania z środowiskiem IDE programu Visual Studio, możesz zdecydować się na skompilowanie w języku MSIL i w związku z tym nie będzie musiał pisać własnego języka DE. Należy jednak napisać ewaluatora wyrażeń (EE), który może oceniać wyrażenia w kontekście języka programowania.
Dyskusja
Wyrażenia języka komputerowego są zwykle analizowane w celu utworzenia zestawu obiektów danych i zestawu operatorów używanych do manipulowania nimi. Na przykład wyrażenie "A+B" może zostać przeanalizowane w celu zastosowania operatora dodawania (+) do obiektów danych "A" i "B", co może spowodować utworzenie innego obiektu danych. Łączny zestaw obiektów danych, operatorów i ich skojarzeń jest najczęściej reprezentowany w programie jako drzewie, przy użyciu operatorów w węzłach drzewa i obiektów danych w gałęziach. Wyrażenie, które zostało podzielone na formularz drzewa, jest często nazywane analizowany drzewo.
Po przeanalizowaniu wyrażenia dostawca symboli (SP) jest wywoływany w celu oceny każdego obiektu danych. Jeśli na przykład wyrażenie "A" jest zdefiniowane zarówno w więcej niż jednej metodzie, pytanie "Na które A?" należy odpowiedzieć, zanim można ustalić wartość A. Odpowiedź zwrócona przez dostawcę usług jest podobna do "Trzeci element w piątej ramce stosu" lub "A, która wynosi 50 bajtów poza rozpoczęciem pamięci statycznej przydzielonej do tej metody".
Oprócz tworzenia biblioteki MSIL dla samego programu kompilatory CLR mogą również tworzyć bardzo opisowe informacje debugowania zapisywane w pliku programu DataBase (pdb). O ile kompilator języka zastrzeżonego generuje informacje debugowania w tym samym formacie co kompilatory CLR, spR jest w stanie zidentyfikować nazwane obiekty danych tego języka. Po zidentyfikowaniu nazwanego obiektu danych EE używa obiektu bindera do skojarzenia (lub powiązania) obiektu danych z obszarem pamięci, który przechowuje wartość tego obiektu. De może następnie pobrać lub ustawić nową wartość dla obiektu danych.
Zastrzeżony kompilator może dostarczać informacje debugowania CLR przez wywołanie interfejsu ISymbolWriter
(który jest zdefiniowany w programie .NET Framework w przestrzeni nazw System.Diagnostics.SymbolStore
). Kompilując do MSIL i pisząc informacje debugowania za pośrednictwem tych interfejsów, zastrzeżony kompilator może używać clR DE i SP. Znacznie upraszcza to integrowanie zastrzeżonego języka ze środowiskiem IDE programu Visual Studio.
Gdy CLR DE wywołuje zastrzeżone EE w celu obliczenia wyrażenia, DE dostarcza EE z interfejsami do sp i obiektu binder. W związku z tym pisanie aparatu debugowania opartego na clR oznacza, że konieczne jest zaimplementowanie odpowiednich interfejsów ewaluatora wyrażeń; CLR zajmuje się powiązaniem i obsługą symboli.