在.NET 4.0中是否需要DLR?

7
我一直在研究使用DLR来开发我的玩具语言,但我有些困惑。既然.NET 4.0拥有LINQ表达式树、动态对象和“dynamic”类型,那么我们是否还需要DLR呢?作为一名语言开发者,DLR提供了什么使我的工作更加轻松的功能呢?
--- 编辑 ----
让我更好地解释一下我的问题。在codeplex上找到的DLR项目(dlr.codeplex.com),现在还需要吗?这个DLR项目的所有特性是否都已经整合到.NET 4中了?还是说DLR中还有一些有价值的东西可以挖掘?

“动态”类型在底层使用DLR。 - Lasse V. Karlsen
4个回答

4
在DLR的开发过程中,我们将其分为两个部分——内部层和外部层。内部层包括调用站点缓存、扩展表达式树和元对象协议。所有这些都旨在并已添加到.NET 4.0中。
外部层包括托管API、表达式树解释器、COM互操作支持、可自定义的重载解析器以调用.NET方法、大多数DLR操作的默认绑定程序以及许多其他各种辅助工具。这些都没有随.NET框架一起发布,但仍然可能对您有用。在.NET 4.0上使用时,它依赖于.NET 4.0中附带的DLR API。
外部层也分为两个部分——托管API(Microsoft.Scripting.dll)和其他所有内容(Microsoft.Dynamic.dll)。如果您希望人们能够像托管IronPython和IronRuby语言一样托管您的语言,则可以针对DLR托管API进行目标定位。您可以使用Microsoft.Dynamic.dll或只提取其中的有用代码而不是重新发明轮子。无论哪种情况,如果您想要最新版本,您需要查看IronPython/IronRuby网站,因为Microsoft不再积极开发外部层组件。

2

虽然这不完全回答了你的问题,但我非常感兴趣地读到了Jim Hugunin不久前离开微软的消息。

他指出的一件事是,DLR是许多我们在.Net 4.0中拥有的好进展的驱动力,而你现在说的这些进展正是你可能不再需要DLR的原因。

编辑:消息链接-http://hugunin.net/microsoft_farewell.html

另一方面,我认为DynamicSite系统仍然是一种非常有价值的东西,虽然不一定是放在CLR本身中的重要内容。

第二次编辑:这真是一个有趣的查询,我刚刚在Codeplex上查看了文档。正如您所述并澄清的那样,.net 4.0 CLR确实实现了曾经使DLR特殊的那些东西;阅读DLR概述,我认为基本上的想法是,使用DLR实现的东西比等待Framework的新版本更快地获得访问新功能的优势。

这可能已经失去了意义,因为他们已经很长时间没有发布新版本的DLR了!

另一个可能的优点,但我承认我没有好好探索过,是DLR中的AST具有更多的功能:

共享AST(表达式树)--这是DLR的核心支柱之一。我们扩展了LINQ表达式树以包括控制流、赋值等。我们还为Expression Trees v1和v2(DLR的新内容)提供源代码。表达式树是降低将语言移植到.NET的门槛的一部分,并且我们在绑定器和DynamicMetaObject协议中使用它们。


1

1

Codeplex上的DLR是开源的,因此更容易进行改进/添加以支持您的语言可能需要的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接