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

标签 .net dsl dynamic-language-runtime

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

最近我一直在阅读有关 DLR 的信息,它似乎旨在适应这种类型的脚本语言实现。乍一看,它看起来不像生成解析器或词法分析器,但它似乎确实有助于实现的其他部分。我想知道改用 DLR 对我的主要优势是什么。

最佳答案

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

例如,只需使用 dynamic 类型,C# 4 就可以调用您的语言而无需任何额外工作。为了在没有 DLR 的情况下执行此操作,您必须生成“普通”静态 CLR 类型。

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

关于.net - 为我的脚本语言切换到 DLR 的主要优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1038717/

相关文章:

java - 在 Java 应用程序中嵌入迷你语言的好方法/工具是什么?

c# - DLR 表达式中的 "code as data"在哪里?

c# - 尝试在动态创建的程序集上绑定(bind)动态方法会导致 RuntimeBinderException

C# 分组变量赋值

c# - DataGridView 的数据绑定(bind)单元格

.net - Visual Studio 2010 上的报表应用

.net - 如何在 VS2008 中实现对自定义 DLR 语言的智能感知支持?

c# - 在其他选项 services.Configure<>() 内绑定(bind)选项

c# - 关于 C# DSL 语法的想法

java - 使用 .split().tokenizeXML() 在 Camel 中分割 xml 文件?