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

使用基于DLR的语言而不是C语言编写脚本的原因是什么?

  •  5
  • Dave  · 技术社区  · 15 年前

    我正在考虑将脚本语言嵌入到我的一个软件项目中,并确定了两个选项:通过codedom在运行时编译C和嵌入基于dlr的脚本语言。这两个选项都可以让我完全访问.NET框架。

    我将要编写脚本的操作将是一个数据行和一组元数据的用户定义转换,这些元数据会导致修改后的数据行。我希望这些转换可以组合并经常调用。当然,我希望最终用户能够提供和修改转换。

    考虑到这种工作负载,使用一种方法比使用另一种方法有什么明显的优势吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   R. Martinho Fernandes    15 年前

    对于用户来说,出于明显的原因,最好使用语法更为宽泛的语言。所以我建议使用基于DLR的语言。如果您有时间和资源,专业的DSL是最好的选择,因为您可以提供一个小的、易于学习的语法,并且更容易阻止用户做不应该做的事情(例如,访问文件系统…)

    我不能凭经验说话,但根据我所见,DLR速度相当快(Ironpython比原生python做得更好!)但是动态调度总是需要一些开销。在紧握的手上,跨AppDomain调用相当昂贵。虽然动态分派成本在脚本内的任何地方都支付,但是跨AppDomain成本在每个脚本调用中只支付一次。哪个更好取决于您的脚本将做多少。

    嵌入DLR脚本主机是 not difficult at all . 如果你选择这样做的话,最困难的是你要推出自己的DSL。

    你也可以调查 boo . 由于类型推断,它是一种类似于Python的静态CLI语言。它的编译器是高度可扩展的,我已经在上面写了一些小的DSL。你也可以看看奥伦的书 Writing DSLs with boo .