gpt4 book ai didi

.NET : Targeting the runtime

转载 作者:行者123 更新时间:2023-12-02 07:13:54 25 4
gpt4 key购买 nike

我开始深入阅读 .NET 框架及其公共(public)语言运行时。我正在阅读 .NET overview由 Microsoft 提供,我不确定此声明的含义。

Code that targets the runtime is known as managed code, while code that does not target the runtime is known as unmanaged code.

您如何定位公共(public)语言运行时?我知道在 Visual Studio 中开发时它是默认的,但您将如何专门针对 CLR?

在开发 .NET 应用程序时,哪些代码不会以 CLR 为目标,从而被称为非托管代码

最佳答案

以运行时为目标意味着针对运行时进行编译,也就是说,除其他外,输出 CIL aka MSIL(与 x86/x64/等机器代码相反)。

说任何不以运行时为目标的代码都是“非托管代码”,这是一种错误的二分法。例如,在 JVM 上运行的代码可以说是受管理的,但我认为我们可以在这种情况下将这句话理解为“[由 CLR] 未受管理”。

可以编写一个 C# 编译器,它可以吐出 native 代码而不以运行时为目标(尽管您可能至少需要 一些 GC 运行时),并且同样有可能编写吐出 CIL 的 C 编译器。在此示例中,假设的 C# 编译器不会以运行时为目标,但假设的 C 编译器会。这里的重要区别是将语言与其目标分开。

不以运行时为目标的 .NET 应用程序是自相矛盾的。如果它不以运行时为目标,那么它就不是 .NET 应用程序。

不过,使用 unsafeP/Invoke 会变得更加模糊。当您使用像 P/Invoke 或 COM 互操作这样的功能时,您最终会以运行时和另外一些一些其他东西为目标。但这并不意味着您已经停止以运行时为目标,它只是意味着您在运行时之外还有其他依赖项。跟踪这类东西就是为什么像 CLSCompliantAttribute 这样的东西存在。

关于.NET : Targeting the runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com