
Статья посвящена двойному применению API Expression Trees — для разбора выражений и для генерации кода. Разбор выражений помогает построить структуры представления (они же структуры представления проблемно-ориентированного языка Internal DSL), а кодогенерация позволяет динамически создавать эффективные функции — наборы инструкций задаваемые структурами представления.
Демонстрировать буду динамическое создание итераторов свойств: serialize, copy, clone, equals. На примере serialize покажу как можно оптимизировать сериализацию (по сравнению с потоковыми сериализаторами) в классической ситуации, когда «предварительное» знание используется для улучшения производительности. Идея в том, что вызов потокового сериалайзера всегда проиграет «непотоковой» функции точно знающей какие узлы дерева надо обойти, при этом выписанной «не руками» а динамически, по правилам. Inernal DSL решает задачу компактного задания правила обхода дерева свойств (вычислений) . Бенчмарк сериализатора скромный, но он важен тем, что добавляет подходу, построенному вокруг применения конкретного Internal DSL Includes (диалект того Include/ThenInclude что из EF Core) и применению Internal DSL в целом, необходимой убедительности.
Читать дальше →
Internal DSL & Expression Trees — динамическое создание функций serialize, copy, clone, equals (Часть I)
Source: habrahabr

