我正在构建一个类似电子表格的应用程序,其中许多小计算需要以树状结构拼接在一起。这些计算是用户定义的,我需要一种方法让用户在运行时输入它们。
我目前的方法是在 F# 中编写一个小的“表达式 DSL”,在其中我使用 FParsec 解析输入,基于可区分联合构建语法树,然后可以评估表达式。这工作得很好。
但是,我正在考虑以 DLR 为基础的语言。沿着这条路走下去有什么好处吗(解析输入,使用 Scripting.AST 而不是我自己的东西生成 AST,让 DLR 处理计算的执行)?
每个计算可能会非常小。计算之间的依赖关系将在更高级别上得到处理。
由于 DLR 将为表达式生成 CIL 代码,我是否可以期待更好的性能,或者开销会吃掉它吗?
(至于使用像 IronPython 这样的现有语言,这可能会很困难,因为我打算在语言语法中添加很多切片和切块运算符和维度处理的东西)