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

标签 c# roslyn dynamic-languages

阅读后this article关于罗斯林。我遇到了两件事我不明白。

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

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

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

最佳答案

摘自链接文章:

Hejlsberg demonstrated a C# program that passed a few code snippets to the C# compiler as strings; the compiler returned the resulting IL assembly code as an object, which was then passed to the Common Language Runtime (CLR) for execution. Voilà! With Roslyn, C# gains a dynamic language's ability to generate and invoke code at runtime.

部分:

[...] C# gains a dynamic language's ability to generate and invoke code at runtime.

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

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

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

  3. 自 .NET 4.0 起,C# 可以使用动态语言运行时与动态语言进行互操作,动态语言运行时的创建是为了打开在 .NET 之上实现解释性语言的大门(同时也使 COM 互操作更容易...)。

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

我会看一下 Roslyn Overview on GitHub其中有很多细节可以让该主题更加深入。

关于c# - 什么是解构编译器? C# 如何获得动态语言在运行时通过 Roslyn 生成和调用代码的能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820533/

相关文章:

php - 在 PHP 中堆栈和堆?

c# - 什么是动态语言,为什么 C# 不符合条件?

c# - 无法构建应用程序安装程序

c# - 如何根据先前条件计算对象的当前值?

c# - 使用自定义脚本函数评估数学表达式

c# - Roslyn 数据流分析 - WrittenInside 和 Locations 字段的值不明确

c# - 隐式转换为 'System.IDisposable' 错误

c# - 以特定格式对数据进行排序

.net - 如何告诉 Roslyn C# 编译器使用特定版本的 .NET?

c++ - 在 C++ 中的 vector/数组中存储不同类型的元素?