C# 在.NET 4.0中是否需要DLR?

C# 在.NET 4.0中是否需要DLR?,c#,.net-4.0,dynamic-language-runtime,C#,.net 4.0,Dynamic Language Runtime,我一直在考虑使用DLR作为我的玩具语言,我有点困惑。如果.NET4.0有LINQ表达式树、动态对象和“动态”类型,那么我们真的还需要DLR吗?作为一名语言开发人员,DLR提供了什么可以让我的生活更轻松 ---编辑---- 让我把我的问题解释清楚一点。在codeplex(DLR.codeplex.com)上找到的DLR项目,是否还有更多的需求?此DLR项目的所有功能是否都已集成到.NET4中?或者在DLR中还有什么有价值的东西吗?正如这个wiki页面()所解释的,DLR与IronPython和Ir

我一直在考虑使用DLR作为我的玩具语言,我有点困惑。如果.NET4.0有LINQ表达式树、动态对象和“动态”类型,那么我们真的还需要DLR吗?作为一名语言开发人员,DLR提供了什么可以让我的生活更轻松

---编辑----

让我把我的问题解释清楚一点。在codeplex(DLR.codeplex.com)上找到的DLR项目,是否还有更多的需求?此DLR项目的所有功能是否都已集成到.NET4中?或者在DLR中还有什么有价值的东西吗?

正如这个wiki页面()所解释的,DLR与IronPython和IronRuby一起使用,所以是的,它仍然是需要的


如果您能在开发中使用更具动态性的语言,您的生活会更轻松。

这并不能完全回答您的问题,但我很有兴趣阅读Jim Hugunin不久前关于离开Microsoft的消息

他指出的一件事是,DLR是我们在.NET4.0中取得的许多良好进步的驱动力,您现在说这是您可能不再需要DLR的原因

编辑:链接到消息-

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

第二次编辑:这真是一个有趣的查询,我刚刚查看了Codeplex上的文档。正如您所陈述和阐明的那样,.NET4.0CLR确实实现了使DLR特别的功能;阅读DLR概述,我认为基本上的想法是,使用DLR实现的东西具有更快地访问新功能的优势,而不是等待新版本的框架

这可能是没有意义的,因为他们已经有一段时间没有发布新版本的DLR了

另一个可能的优势是,DLR中的AST具有更多的功能,但我承认我没有对此进行适当的探讨:

共享AST(表达式树)——这是 DLR。我们已经扩展了LINQ表达式树以包含控件 流、分配等。我们还提供所有表达式的源代码 树v1和v2(DLR的新内容)。表达式树是一部分 降低了将语言移植到.NET的门槛,我们在 Binder和DynamicMetaObject协议


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

在DLR的开发过程中,我们将其分为两部分——内层和外层。内层由调用站点缓存、扩展表达式树和元对象协议组成。所有这些都是为了并被添加到.NET4.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不再积极开发外层组件。

动态类型使用DLR。