boost proto vs C# дерево выражений



Во-первых, мне интересно, имеют ли обе "функции" одну и ту же цель.
Во-вторых, если да (или только частично да), есть ли какое-либо существенное ограничение в boost proto over
дерево выражений c#



Спасибо

547   3  

3 ответов:

Я автор Boost.Прото, и я только недавно открыл деревья выражений C#. АФАИКТ, они схожи по замыслу, но различны как по реализации, так и по масштабу.

C# имеет языковую поддержку для записи выражения LINQ в виде динамически типизированного дерева. Это используется потребителями LINQ для оптимизации оценки запросов. Запрос к структуре данных в памяти был бы простой оценкой с помощью методов расширения LINQ, но один против удаленной базы данных будет более оптимально выполняется путем обхода выражения LINQ во время выполнения, вычисления строки T-SQL и передачи ее SQL-серверу для удаленного выполнения. В настоящее время деревья выражений C# лучше всего подходят для таких задач оптимизации.

Повышение.Прото ОТОХ имеет несколько более широкий охват. Деревья прото-выражений статически типизированы, что позволяет выполнять сложные преобразования и генерацию кода во время компиляции. Что еще более важно, Proto предоставляет инструменты для интроспекции и преобразование деревьев и создание на их основе пользовательского кода. Это может быть полезно для оптимизации, но также и для придания выражениям совершенно другой предметной семантики. Таким образом, Proto более точно мыслится как встроенный инструментарий специфичного для предметной области языка.

То же самое можно было бы сделать с деревьями выражений C#, но AFAIK в настоящее время не существует структуры для преобразования дерева и генерации кода. Возможность делать генерацию кода во время выполнения на .NET делает это привлекательным возможность. Может быть, какой-нибудь предприимчивый застройщик (вы?) был бы готов написать Proto# поверх деревьев выражений C#. :- )

Они частично перекрываются в том, что их можно использовать для написания DSL. Boost proto построен вокруг идеи построения встроенного DSL в C++, который преобразуется в C++ и компилируется во время компиляции. Деревья выражений C# были бы больше о написании внешнего DSL (или любого интерпретатора на самом деле). Поэтому boost:: Proto-это модификация и улучшение C++, а деревья выражений-это написание кода на новом языке, а не изменение C#.

Что на самом деле вы хотели спросить ? Я не понимаю вашего вопроса.

Их цели не совпадают, потому что C++ и CLR очень разные.

В C++ нельзя взять произвольный код и работать с ним как с выражением. У вас нет механизма отражения.

Выражение является функцией времени выполнения, а Boost Proto-библиотекой времени компиляции.

Comments

    Ничего не найдено.