使用基于DLR的语言而不是C#进行脚本编写任务的原因?

时间:2009-11-20 19:49:52

标签: c# scripting ironpython dynamic-language-runtime

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

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

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

1 个答案:

答案 0 :(得分:3)

对于用户而言,出于显而易见的原因,通常最好使用语法更宽松的语言。所以我建议使用基于DLR的语言。如果你有时间和资源,专业的DSL是最好的选择,因为你可以提供一个小而易学的语法,并且更容易让用户不做他们不应该做的事情(比如访问文件系统) ,例如......)

我不能从经验中说话,但是,从我所看到的,DLR可以非常快(IronPython比原生Python更好!)。但动态调度总是需要轻微的开销。在扣人心弦的手上,跨AppDomain调用非常昂贵。虽然动态调度成本在脚本中的任何位置支付,但每个脚本调用仅支付一次跨AppDomain成本。哪一个做得更好取决于你的脚本将做多少。

嵌入DLR脚本主机为not difficult at all。如果您选择这样做,那么推出自己的DSL会有什么困难。

您还可以查看boo。由于类型推断,它是一种看起来像Python的静态CLI语言。它的编译器是高度可扩展的,并且我已经成功地在其上编写了一些小型DSL。您还可以查看Oren的书Writing DSLs with boo