我一直在研究使用DLR作为我的玩具语言,而且我有点困惑。如果.NET 4.0具有LINQ表达式树,动态对象和“动态”类型,那么我们是否真的需要DLR?什么是DLR提供将让我的生活更容易,因为语言开发.NET 4.0中需要DLR吗?
---编辑----
让我解释一下我的问题好一点。在codeplex(dlr.codeplex.com)上发现的DLR项目,是否还有很多需求呢?这个DLR项目的所有功能都放到了.NET 4中吗?或者在DLR中有什么值得留下的东西?
我一直在研究使用DLR作为我的玩具语言,而且我有点困惑。如果.NET 4.0具有LINQ表达式树,动态对象和“动态”类型,那么我们是否真的需要DLR?什么是DLR提供将让我的生活更容易,因为语言开发.NET 4.0中需要DLR吗?
---编辑----
让我解释一下我的问题好一点。在codeplex(dlr.codeplex.com)上发现的DLR项目,是否还有很多需求呢?这个DLR项目的所有功能都放到了.NET 4中吗?或者在DLR中有什么值得留下的东西?
它并不完全回答你的问题,但我非常有兴趣阅读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协议。
添加了一个编辑来更好地解释我的问题。 –
本维基页面(http://en.wikipedia.org/wiki/Dynamic_Language_Runtime)解释说,DLR与IronPython和IronRuby一起使用,所以是的,它仍然是需要的。
如果您可以使用更动态的语言进行开发,它会让您的生活更轻松。
codeplex上的DLR是开放源代码的,因此对您的语言可能需要的功能进行改进/添加将变得更加容易。
在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不再积极开发外层组件。
“动态”类型使用引擎盖下的DLR。 –
动态== DLR。所以不行。 –