2011-07-18 52 views
7

我一直在研究使用DLR作为我的玩具语言,而且我有点困惑。如果.NET 4.0具有LINQ表达式树,动态对象和“动态”类型,那么我们是否真的需要DLR?什么是DLR提供将让我的生活更容易,因为语言开发.NET 4.0中需要DLR吗?

---编辑----

让我解释一下我的问题好一点。在codeplex(dlr.codeplex.com)上发现的DLR项目,是否还有很多需求呢?这个DLR项目的所有功能都放到了.NET 4中吗?或者在DLR中有什么值得留下的东西?

+0

“动态”类型使用引擎盖下的DLR。 –

+0

动态== DLR。所以不行。 –

回答

2

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

他指出的一件事是DLR是我们在.NET 4.0中取得的很多进步的驱动因素,你现在说的是你可能不再需要DLR的原因。

编辑:链接到讯息话题 - http://hugunin.net/microsoft_farewell.html

在另一方面,我认为DynamicSite系统仍东西是有相当有价值的,而未必是重要的投入在CLR本身。

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

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

另一个可能的优势,但我承认我没有正确地探讨过这个,是在DLR的AST具有更多的功能:

共享AST(表达式树) - 这是核心之一DLR的支柱 。我们已经扩展了LINQ表达式树来包含控制流程,赋值等。我们还为所有表达式 Trees v1和v2(DLR的新内容)提供源代码。 Expression Tres是降低用于将语言移植到.NET的栏的 的一部分,我们在 中使用它们的活页夹和DynamicMetaObject协议。

+0

添加了一个编辑来更好地解释我的问题。 –

1

codeplex上的DLR是开放源代码的,因此对您的语言可能需要的功能进行改进/添加将变得更加容易。

3

在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不再积极开发外层组件。

相关问题