【问题标题】:What changes were made to the CLR to support dynamic?对 CLR 进行了哪些更改以支持动态?
【发布时间】:2011-03-23 18:17:19
【问题描述】:

据我了解,.net 4.0 CLR 需要进行更改以支持动态语言运行时。

有没有办法查看这些更改是什么?我注意到.net 标准没有提到 DynamicObject 之类的东西——所有这些东西似乎都是 DLR 的一部分。但如果 DLR “只是一个库”,那么 .net 4 就不需要运行它了。

所以我只是好奇 .net 4 发生了什么变化以支持 DLR。

【问题讨论】:

  • 您从哪里得知 CLR 发生了变化?它发生了变化,但不支持 DLR。
  • @Gabe 好点。它只是到处出现,但人们倾向于将 C#4 和 .net 4 混合在一起。例如,请参见此处:eknowledger.spaces.live.com/blog/… 其中含糊地说 CLR 需要更改以支持动态语言,但随后仅显示库更改(例如 System.Tuple),所以我想知道这里的全部范围是什么或者 DLR 是否为 100%库代码。
  • CLR 的重大变化是对方差的支持,而 DLR 可能会利用这一点。
  • @Gabe:CLR 从 2.0 开始就支持泛型变量,但直到 4.0 才支持所有语言(除了 MSIL)。

标签: .net cil dynamic-language-runtime


【解决方案1】:

没有变化,它只是一个库。不需要 .NET 4.0 CLR,DLR 在 2.0 版本上支持 IronPython 和 IronRuby。你可以看看是什么让它从那个版本打勾,你可以下载源代码from here。这段代码被移到 System.Core.dll 中,基本上没有改变。

请注意,它的数量相当多。都是纯 C#。它使用 CLR 中现有的支持通过反射和 COM 互操作进行动态绑定。它的名声在于它只需支付一次费用即可做到这一点。它缓存绑定的结果,以便在后续绑定中以低成本使用。

将 DLR 接口胶水添加到 C# 版本 4 本身就是一项相当大的工作,它嵌入在 Microsoft.CSharp.dll 中,并在编译器中进行了大量工作。该源代码不可用,但您可以使用 Reflector 嗅探它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多