【问题标题】:Is the DLR needed in .NET 4.0?.NET 4.0 中是否需要 DLR?
【发布时间】:2011-07-18 23:45:00
【问题描述】:
我一直在研究将 DLR 用于我的玩具语言,但我有点困惑。如果 .NET 4.0 有 LINQ 表达式树、动态对象和“动态”类型,那么我们真的需要 DLR 了吗? DLR 提供了什么让我作为语言开发人员的生活更轻松
--- 编辑 ----
让我更好地解释我的问题。在 codeplex (dlr.codeplex.com) 上找到的 DLR 项目,现在还需要这个吗?这个 DLR 项目的所有功能都集成到 .NET 4 中了吗?或者在 DLR 中还有什么有价值的东西有待发现?
【问题讨论】:
标签:
c#
.net-4.0
dynamic-language-runtime
【解决方案1】:
在 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 关于不久前离开 Microsoft 的消息。
他指出的一件事是,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 协议。
【解决方案4】:
codeplex 上的 DLR 是开源的,因此更容易进行改进/添加以支持您的语言可能需要的功能。