5

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

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

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

4

1 回答 1

3

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

我不能凭经验说话,但就我所见,DLR 可以相当快(IronPython 比原生 Python 做得更好!)。但是动态调度总是需要一点点开销。令人抓狂的是,跨 AppDomain 调用非常昂贵。虽然动态调度成本在脚本内随处支付,但跨 AppDomain 成本仅在每次脚本调用时支付一次。哪一个做得更好取决于你的脚本能做多少。

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

您也可以查看boo。由于类型推断,它是一种看起来像 Python 的静态 CLI 语言。它的编译器是高度可扩展的,而且我在上面编写了一些小型 DSL 也取得了一些成功。您还可以查看 Oren 的《用 boo 编写 DSLs 》一书。

于 2009-11-20T19:53:21.300 回答