什么是解构编译器?C# 如何通过 Roslyn 获得动态语言在运行时生成和调用代码的能力?



在阅读了这篇关于罗斯林的文章之后。我遇到了两件我不明白的事情。

  • 解构编译器
  • C# 获得了动态语言在运行时通过 Roslyn 生成和调用代码的能力
我已经搜索了很多

关于堆栈溢出的帖子,并在谷歌上搜索了它。 但无法了解全貌。

任何人都可以向我解释或指导我提供有关这些主题的一些链接和资源。

摘自链接的文章:

Hejlsberg 演示了一个 C# 程序,该程序将一些代码片段传递给 字符串形式的 C# 编译器;编译器返回生成的 IL 汇编代码作为对象,然后将其传递给公共 用于执行的语言运行时 (CLR)。瞧!借助 Roslyn,C# 获得了 动态语言在运行时生成和调用代码的能力。

部分:

[...]C# 获得了动态语言在运行时生成和调用代码的能力。

。只是博客文章作者做出的一个非常错误的假设......

  1. 从应用程序编译代码不会将 C# 变成动态语言,也不会将新的 C# 编译器转换为解释器的替代品......

  2. 自成立以来,C# 能够使用反射发出在运行时生成代码。似乎新的编译器没有添加该功能,但无论如何,使用新编译器从常规 C# 代码生成代码比使用反射发出更容易。此外,正如@hvd在一些评论中指出的那样,自 C# 开始使用 CSharpCodeProvider 以来也是可能的。

  3. 从 .NET 4.0 开始,C# 可以使用动态语言运行时与动态语言进行互操作,动态语言运行时旨在为在 .NET 之上的解释语言实现打开大门(并使 COM 互操作更容易......

关于

另一个问题(关于解构编译器的事情),这意味着新的 C# 编译器允许您挂钩其他代码以执行基于 C# 编译步骤的操作。

我会看看 GitHub 上的 Roslyn 概述,其中有很多细节应该更深入地介绍这个主题。

最新更新