动态语言运行时和C#4.0之间有什么关系?


11

假设我想在当今存在的.NET平台上创建动态语言编译器/解释器,或者是Scheme解释器。使用动态语言运行时(DLR)还是使用C#4.0来实现我的语言的动态功能,我会更好吗?还是我都需要?

我知道在这方面还有其他工作要做,尤其是IronSchemeIronPython。这两种语言都使用DLR。我相信IronPython使用的是最新版本的DLR(大约有一年的历史了),而IronScheme使用的是早期版本的DLR的早期,经过大量修改的分支。但是创建这些编译器时C#4.0不可用。

我已经看过Rob Conery与Massive的合作,它使用C#4.0的动态功能。这是非常令人印象深刻的。但是C#是否能够承受动态语言编译器/解释器的全部工作?DLR中是否存在C#中缺少的功能,或者DLR本质上已集成到C#4.0中?如果仅使用C#4.0,我会缺少DLR的任何重要功能吗?


我相信.Net 4.0动态功能也基于DLR。
Dave Nay


@Dave:我对当前的权威链接感到满意,该链接详细描述了.NET 4.0运行时与DLR之间的关系。如果C#4.0中的动态类型系统足够健壮,并且.NET 4.0运行时中没有忽略DLR中的任何关键功能,那么这将给我一个很好的主意。我找到了一些文章,但都是在DLR形成的那天写的,其中许多都是投机性的。
罗伯特·哈维

Answers:


3

这是我记得阅读的文章。msdn.microsoft.com/zh-CN/magazine/gg598922.aspx

后来DLR也包含在.NET Framework 4中,以支持C#和Visual Basic中的动态功能。如果仅在C#4中需要dynamic关键字,则可以简单地使用.NET Framework,并且在大多数情况下,它将自行处理与DLR的所有交互。但是,如果您要实现新的动态语言或将其移植到.NET,则可能会受益于开源项目中的额外帮助程序类,该类为语言实现者提供了更多功能和服务。


3

来自:吉米施

罗伯特

事实:IronRuby和IronPython都使用DLR,实际上大多数DLR的功能都源自IronPython的早期实现。我不熟悉DLR IronScheme使用什么版本。DLR(Microsoft.Scripting.Core.dll)的一部分已在.NET 4.0中的System.Core.dll中提供,而这部分是C#4.0用于“动态”关键字支持的原因,这就是为什么该程序集没有被支持的原因出现在DLR的.NET 4.0版本中。

可从此CodePlex项目或IronLanguages GitHub项目下载DLR的其余代码库(Microsoft.Scripting.dll,Microsoft.Dynamic.dll最重要)。它们为托管语言的使用者和生产者提供API,而.NET 4.0中的API实际上用于动态分配方法。

要编写用于.NET 4.0的动态语言编译器,我将使用C#作为实现语言,并使用DLR作为用于简化常见编译器任务的库。有关DLR上的简单示例语言,请查看Sympl。

〜吉米

http://dlr.codeplex.com/discussions/268746#post656778

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.