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

Dav*_*ave 5 c# scripting ironpython dynamic-language-runtime

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

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

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

R. *_*des 3

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

我无法从经验中判断,但是,从我所看到的来看,DLR 可以相当快(IronPython 比原生 Python 做得更好!)。但动态调度总是会带来轻微的开销。令人担忧的是,跨 AppDomain 调用的成本相当昂贵。虽然动态调度成本是在脚本内的任何地方支付的,但跨 AppDomain 成本仅在每次脚本调用时支付一次。哪一个做得更好取决于您的脚本的功能。

嵌入 DLR 脚本主机一点也不困难。困难的是推出自己的 DSL(如果您选择这样做的话)。

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