Среда cl language runtime и оценка выражений

Важно!

В Visual Studio 2015 такая реализация вычислителя выражений была сделана нерекомендуемой. Сведения о реализации вычислителей выражений CLR см. в примере вычислителя выражений CLR и средства оценки управляемых выражений.

Компиляторы, такие как Visual Basic и C# (объявленные C-sharp), предназначенные для среды CLR, создают microsoft Intermediate Language (MSIL), который позже компилируется в машинный код. Среда CLR предоставляет подсистему отладки (DE) для отладки результирующего кода. Если вы планируете интегрировать собственный язык программирования в интегрированную среду разработки Visual Studio, можно скомпилировать в MSIL и поэтому не придется писать собственный DE. Однако необходимо написать средство оценки выражений (EE), которое может оценивать выражения в контексте языка программирования.

Обсуждение

Выражения языка компьютера обычно анализируются для создания набора объектов данных и набора операторов, используемых для управления ими. Например, выражение "A+B" может быть проанализировано для применения оператора сложения (+) к объектам данных "A" и "B", возможно, приведет к другому объекту данных. Общий набор объектов данных, операторов и их связей чаще всего представлен в программе как дерево, с операторами на узлах дерева и объектами данных в ветвях. Выражение, разбитое на форму дерева, часто называется проанализированным деревом.

После синтаксического анализа выражения вызывается поставщик символов (SP), чтобы оценить каждый объект данных. Например, если "A" определяется в нескольких методах, необходимо ответить на вопрос "Что А?", прежде чем можно определить значение A. Ответ, возвращаемый поставщиком служб, представляет собой то, что "Третий элемент в пятом кадре стека" или "A, который составляет 50 байтов за пределами начала статической памяти, выделенной этому методу".

Помимо создания MSIL для самой программы, компиляторы CLR также могут создавать очень описательные сведения об отладке, записанные в файл Program DataBase (PDB). Если компилятор с собственным языком создает отладочную информацию в том же формате, что и компиляторы СРЕДЫ CLR, служба CLR может определить именованные объекты данных языка. После идентификации именованного объекта данных EE использует объект привязки для связывания (или привязки) объекта данных к области памяти, содержащей значение этого объекта. Затем DE может получить или задать новое значение для объекта данных.

Собственный компилятор может предоставлять сведения об отладке среды CLR путем вызова ISymbolWriter интерфейса (который определен в платформа .NET Framework в пространстве System.Diagnostics.SymbolStoreимен). Компилируя в MSIL и записывая сведения об отладке с помощью этих интерфейсов, собственный компилятор может использовать среду CLR DE и SP. Это значительно упрощает интеграцию собственного языка в интегрированную среду разработки Visual Studio.

Когда среда CLR DE вызывает собственный EE для вычисления выражения, de предоставляет EE интерфейсами интерфейсам субъекта-службы и объекту привязки. Таким образом, написание подсистемы отладки на основе СРЕДЫ CLR означает, что необходимо реализовать только соответствующие интерфейсы вычислителя выражений; среда CLR заботится о привязке и обработке символов.