Modul CLR (Common Language Runtime) a vyhodnocení výrazů
Důležité
V sadě Visual Studio 2015 je tento způsob implementace vyhodnocovačů výrazů zastaralý. Informace o implementaci vyhodnocovačů výrazů CLR najdete v tématu vyhodnocovače výrazů CLR a ukázka vyhodnocovače spravovaných výrazů.
Kompilátory, jako je Visual Basic a C# (vyslovuje se C-sharp), které cílí na modul CLR (Common Language Runtime), vytvoří jazyk MSIL (Microsoft Intermediate Language Language), který se později zkompiluje do nativního kódu. CLR poskytuje ladicí modul (DE) pro ladění výsledného kódu. Pokud plánujete integrovat vlastní programovací jazyk do integrovaného vývojového prostředí sady Visual Studio, můžete se rozhodnout zkompilovat do jazyka MSIL, a proto nebudete muset napsat vlastní de. Budete ale muset napsat vyhodnocovač výrazů (EE), který dokáže vyhodnocovat výrazy v kontextu programovacího jazyka.
Diskuse
Výrazy počítačového jazyka jsou obecně analyzovány za účelem vytvoření sady datových objektů a sady operátorů, které se používají k jejich manipulaci. Například výraz "A+B" může být analyzován tak, aby použil operátor sčítání (+) na datové objekty "A" a "B", což může mít za následek jiný datový objekt. Celková sada datových objektů, operátorů a jejich přidružení jsou nejčastěji reprezentovány v programu jako strom s operátory na uzlech stromu a datových objektů ve větvích. Výraz, který byl rozdělen do stromové formy, se často nazývá analyzovaný strom.
Jakmile je výraz analyzován, je volána zprostředkovatel symbolů (SP) k vyhodnocení každého datového objektu. Pokud je například "A" definováno ve více než jedné metodě, musí být otázka "Which A?" zodpovězena před zjištěním hodnoty A. Odpověď vrácená aktualizací SP je něco jako "Třetí položka na pátém rámečku zásobníku" nebo "A, který je 50 bajtů nad rámec začátku statické paměti přidělené této metodě".
Kromě vytváření jazyka MSIL pro samotný program mohou kompilátory CLR také vytvářet velmi popisné ladicí informace, které jsou zapsány do souboru Program DataBase (.pdb). Pokud kompilátor proprietárního jazyka vytváří ladicí informace ve stejném formátu jako kompilátory CLR, dokáže aktualizace CLR identifikovat pojmenované datové objekty daného jazyka. Po identifikaci pojmenovaného datového objektu použije EE objekt pořadače k přidružení datového objektu k oblasti paměti, která obsahuje hodnotu daného objektu. De pak může získat nebo nastavit novou hodnotu datového objektu.
Proprietární kompilátor může poskytnout informace o ladění CLR voláním ISymbolWriter
rozhraní (které je definováno v rozhraní .NET Framework v oboru názvů System.Diagnostics.SymbolStore
). Kompilací do jazyka MSIL a psaním informací o ladění prostřednictvím těchto rozhraní může vlastní kompilátor používat MODUL CLR DE a SP. To výrazně zjednodušuje integraci proprietárního jazyka do integrovaného vývojového prostředí sady Visual Studio.
Když CLR DE volá proprietární EE k vyhodnocení výrazu, de poskytuje EE rozhraní SP a objektu pořadače. Proto zápis ladicího modulu založeného na CLR znamená, že je nutné implementovat pouze příslušná rozhraní vyhodnocovače výrazů; CLR se postará o vazbu a zpracování symbolů za vás.