.net 对于我的脚本语言,切换到DLR的主要优势是什么?

.net 对于我的脚本语言,切换到DLR的主要优势是什么?,.net,dsl,dynamic-language-runtime,.net,Dsl,Dynamic Language Runtime,我已经使用Antlr编写了一个DSL,从我的语法文件生成一个lexer和解析器。解析器生成一个抽象语法树,其中包含我可以计算的各种节点(例如函数节点)。在函数节点的代码中,我负责绑定检查函数名和参数类型,以从函数库中查找匹配项。我在这里有一些简单的缓存来优化函数查找(如果我用两个整数调用A+B,那么下次使用加号运算符时很有可能用两个整数) 最近我一直在阅读有关DLR的文章,它似乎是为了适应这种类型的脚本语言实现而设计的。乍一看,它看起来不像是生成了解析器或词法分析器,但它似乎确实有助于实现的其他

我已经使用Antlr编写了一个DSL,从我的语法文件生成一个lexer和解析器。解析器生成一个抽象语法树,其中包含我可以计算的各种节点(例如函数节点)。在函数节点的代码中,我负责绑定检查函数名和参数类型,以从函数库中查找匹配项。我在这里有一些简单的缓存来优化函数查找(如果我用两个整数调用A+B,那么下次使用加号运算符时很有可能用两个整数)


最近我一直在阅读有关DLR的文章,它似乎是为了适应这种类型的脚本语言实现而设计的。乍一看,它看起来不像是生成了解析器或词法分析器,但它似乎确实有助于实现的其他部分。我想知道切换到使用DLR对我来说有什么主要优势。

完全访问.NET framework是最大的优势。

  • 访问.Net基类库和类型
  • 访问为.Net编写的第三方库
  • 您可以让Microsoft担心API的维护(安全更新等)
  • 您可以在VisualStudio中托管该语言

如果您仔细实施绑定,DLR将为您提供一个非常强大的缓存机制—可能比您自己实际能够做到的更优化。此外,由于您将使用“标准”动态对象协议,因此更有可能获得与其他语言的良好互操作性

例如,C#4可以在不做任何额外工作的情况下调用您的语言,只需使用
dynamic
类型。为了在没有DLR的情况下实现这一点,您必须生成“普通”静态CLR类型


很难确定这会有多大的优势,因为我们不知道你想用你的语言做什么,或者它已经做了多少。然而,显然有很多非常聪明的人在DLR上工作——在我看来,如果你正在创建一种在.NET上运行的动态语言,那么利用他们的工作是有意义的。

谢谢Jon,这里有一些很好的动机,尤其是动态类型。真希望我能在开源果酱上参加你的演讲。只花了5分钟,一点细节都没有。不过,我已经差不多完成了C#Depth的动态章节,所以应该很快就可以使用了。