代码之家  ›  专栏  ›  技术社区  ›  Rickard

将小型表达式DSL建立在DLR上,还是用F#手动滚动?

  •  6
  • Rickard  · 技术社区  · 16 年前

    我正在构建一个类似电子表格的应用程序,其中许多小计算需要以树形结构拼接在一起。这些计算是用户定义的,我需要一种方法让用户在运行时输入它们。

    每次计算可能都很小。计算之间的依赖关系将在更高的层次上得到处理。

    由于DLR将为表达式生成CIL代码,我能期待更好的性能吗?还是开销会消耗掉它?

    1 回复  |  直到 16 年前
        1
  •  7
  •   Chris Smith    16 年前

    很难用如此宽泛的术语回答一个问题,但以下是我的一些想法。

    使用F#构建解析器听起来不错。

    FSParsec是一个很棒的库。我有点偏爱FSLex和FSYacc。无论哪种方式,在F#中都有专门为解析而设计的库,可以节省您的时间。

    使用DLR生成代码听起来正常。

    DLR是动态代码生成的绝佳平台。但是,您的应用程序要具体得多。如果您仅限于计算值,则应使用来自的表达式树API。净3.5。此API是为表示任意代码表达式而设计的。另一方面,DLR被设计为运行时或动态语言。我并不是说这是不可能的,只是说它不是完成这项工作的合适工具。

    不要编译生成的代码。

    如果你确实使用DLR来表示你的AST,编译和执行的成本可能会远远高于简单地解释树。如果满足以下条件,请编译代码:A.)你多次执行同一个函数/方法;B.)函数/方法 复杂。

    C#+DLR、IronPython、F#或三者的组合都是不错的选择。最终,“正确”的选择是在尽可能快的时间内完成工作的选择。

    推荐文章