Я строю приложение для работы с электронными таблицами, в котором множество древовидных вычислений нужно сшивать вместе в древовидной структуре. Эти расчеты определены пользователем, и мне нужно, чтобы пользователь вводил их во время выполнения.Настройте небольшое выражение DSL на DLR или сохраните его вручную в F #?
Мой нынешний подход заключается в том, чтобы написать небольшое «выражение DSL» в F #, где я анализирую вход с помощью FParsec, строят дерево синтаксиса на основе дискриминационного объединения, а затем могут оценить выражение. Это работает очень хорошо.
Однако я думаю о том, чтобы искать язык на DLR. Есть ли какие-либо проблемы, чтобы пойти по этой дороге (проанализировать входные данные, сгенерировать AST, используя материал Scripting.AST вместо моего собственного, и позволить DLR обрабатывать выполнение вычисления)?
Каждый расчет, вероятно, будет довольно маленьким. Зависимость между расчетами будет учтена на более высоком уровне.
Могу ли я ожидать улучшения производительности, поскольку DLR будет генерировать код CIL для выражения или будет ли это накладные расходы?
(как для использования существующего языка, как IronPython, это, вероятно, будет трудно, так как я планирую добавить много операторов ломтик и фрагментировать и размерность обработки материала с синтаксисом языка)
Благодарим вас за понимание. Я полностью игнорировал деревья выражения linq. Я попытаюсь изменить свой синтаксический анализатор для генерации деревьев с помощью этого API и выполнить некоторые тесты производительности для их оценки, чтобы сравнить с наивной интерпретацией/оценкой, которую я сейчас делаю в F #. – Rickard
Обратите внимание, что вы можете использовать F # Quotations, а в библиотеке FSharp.PowerPack.Linq вы можете преобразовать выражение F # Quotation в дерево выражений LINQ.Однако в этом нет никакой документации, но вам может быть интересно. –