Выполнение деревьев выражений - PullRequest
2 голосов
/ 07 декабря 2011

Для работы с DLR динамический язык должен быть преобразован в деревья выражений.Что происходит, когда я выполняю разработанное мной приложение с использованием динамического языка.

Например, приложение hello world.Что происходит во время выполнения для выполнения кода дерева выражений.Как на самом деле работает связь дерева выражений с ОС?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Деревья выражений - это просто еще один способ построить последовательность инструкций IL.IL из деревьев выражений будет JIT скомпилирован с собственными аппаратными инструкциями, точно так же, как IL из C # или другого исходного языка, скомпилированного в IL.

0 голосов
/ 07 декабря 2011

Мое понимание , которое может быть ограничено (я не эксперт DLR) в том, что в случае использования выражения дерево выражений обходится для таких узлов, как MemberExpression, и имена каждого члена / метода / и т. д. используются для связи с поставщиком каждого объекта. Это вероятно означает использование интерфейса IDynamicMetaObjectProvider, передавая выражение. Выражение выражения для ключевых узлов очень похоже на технологии, такие как поставщики LINQ, за исключением того, что во многих отношениях проще (поскольку существует более прямое сопоставление - его не нужно перефразировать на иностранном языке, таком как SQL).

Реализация динамического объекта определяется этим динамическим объектом , но может тогда означать поиск значений из внутреннего словаря значений (например, ExpandoObject), или может быть что угодно (например, некоторый специальный подкласс DynamicObject или реализация from-first-принципалы IDynamicMetaObjectProvider).

В случае, если тип не реализует IDynamicMetaObjectProvider (т. Е. Не динамический объект, плавающий в динамическом мире), то обычно отражение используется как запасной вариант, кэшируя механизм для этого (возможно, поскольку отражение не является динамическим и не может быть исправлено обезьянами и т. д.).

...