.NET 4.0中是否需要DLR?

时间:2011-07-18 23:45:00

标签: c# .net-4.0 dynamic-language-runtime

我一直在研究使用DLR作为我的玩具语言,我有点困惑。如果.NET 4.0具有LINQ表达式树,动态对象和“动态”类型,那么我们真的需要DLR了吗?作为语言开发人员,DLR提供的内容将使我的生活更轻松

---编辑----

让我更好地解释一下我的问题。在codeplex(dlr.codeplex.com)上找到的DLR项目是否还有很多需要呢?这个DLR项目的所有功能都归入.NET 4吗?或者在DLR中还有什么价值?

4 个答案:

答案 0 :(得分: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不再积极开发外层组件。

答案 1 :(得分:2)

它并没有完全回答你的问题,但我非常有兴趣阅读Jim Hugunin关于不久前离开微软的消息。

他指出的一件事是,DLR是我们在.Net 4.0中取得的许多重大进展的驱动因素,你现在说这就是你不再需要DLR的原因。

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

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

第二次编辑:这是一个有趣的查询,我刚刚看过Codeplex上的文档。正如您所陈述和澄清的那样,.net 4.0 CLR确实实现了以前使DLR特殊的东西;阅读DLR概述,我认为基本上这个想法是,使用DLR实现的内容具有更快地访问新功能然后等待新版本的框架的优势。

这可能没有实际意义,因为他们暂时没有发布新版本的DLR!

另一个可能的优势,但我承认我没有正确地探讨这个问题,因为DLR中的AST具有更多功能:

  

共享AST(表达式树) - 这是其中的核心支柱之一   DLR。我们扩展了LINQ表达式树以包含控件   流量,赋值等。我们还发布了所有Expression的源代码   树v1和v2(DLR的新东西)。表达Tres是其中的一部分   降低将语言移植到.NET的标准,我们在其中使用它们   绑定器和DynamicMetaObject协议。

答案 2 :(得分:1)

正如这个wiki页面(http://en.wikipedia.org/wiki/Dynamic_Language_Runtime)所解释的那样,DLR与IronPython和IronRuby一起使用,所以是的,仍然需要它。

如果您可以使用更动态的语言进行开发,它将使您的生活更轻松。

答案 3 :(得分:1)

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