CLR 内部调用是用什么语言编写的?
What language are CLR internal calls written in?
在 Pro .NET Performance - Optimize Your C# Applications 中第 86 页的底部,它谈到了 ValueType.Equals()
的实现并这样说:
The definition of CanCompareBits
and FastEqualsCheck
is deferred to the CLR, they are "internal calls", not implemented in IL
"internal calls" 到底是什么?如果不是 IL,它们是用什么语言实现的?
编写或编译公共语言运行时的语言。不幸的是,由于 IL 代码有许多不同的 Runtimes/Interpreters,如果您不告诉我我们正在谈论的具体,我无法告诉您更准确的信息。
.NET 程序被编译成中间语言。 IL 然后由 CLR 运行。如果您认为这听起来像是 Java 字节码被 Java 应用程序执行 - 你是对的!这绝对是一种灵感。然而,这也是一个进步。
从几个角度来看,.NET 程序被解释为批处理文件、Java 字节码、Java 脚本或 PHP/Python 脚本。所有这些都可以做一些事情,但它们不会为其中的程序 运行ning 提供。
方法,如提到的 CanCompareBits
或 FastEqualsCheck
标记有 [MethodImpl(MethodImplOptions.InternalCall)]
,它通知 clr 它需要在其内部找到实现。就 CLR 而言,它称为 FCall,请参阅 Calling from managed to native code
由于 coreclr 是开源的,因此很容易在 github 上找到实际实现。
FastEqualsCheck
参见 comutilnative.cpp。
CoreCLR 是用 C++ 和 Mono 编写的,因此所有此类内部调用的所有代码都是 C/C++。
在运行时,与将生成 IL(中间语言)的常规 .net 代码相反,此类内部调用是依赖于平台的汇编指令
在 Pro .NET Performance - Optimize Your C# Applications 中第 86 页的底部,它谈到了 ValueType.Equals()
的实现并这样说:
The definition of
CanCompareBits
andFastEqualsCheck
is deferred to the CLR, they are "internal calls", not implemented in IL
"internal calls" 到底是什么?如果不是 IL,它们是用什么语言实现的?
编写或编译公共语言运行时的语言。不幸的是,由于 IL 代码有许多不同的 Runtimes/Interpreters,如果您不告诉我我们正在谈论的具体,我无法告诉您更准确的信息。
.NET 程序被编译成中间语言。 IL 然后由 CLR 运行。如果您认为这听起来像是 Java 字节码被 Java 应用程序执行 - 你是对的!这绝对是一种灵感。然而,这也是一个进步。
从几个角度来看,.NET 程序被解释为批处理文件、Java 字节码、Java 脚本或 PHP/Python 脚本。所有这些都可以做一些事情,但它们不会为其中的程序 运行ning 提供。
方法,如提到的 CanCompareBits
或 FastEqualsCheck
标记有 [MethodImpl(MethodImplOptions.InternalCall)]
,它通知 clr 它需要在其内部找到实现。就 CLR 而言,它称为 FCall,请参阅 Calling from managed to native code
由于 coreclr 是开源的,因此很容易在 github 上找到实际实现。
FastEqualsCheck
参见 comutilnative.cpp。
CoreCLR 是用 C++ 和 Mono 编写的,因此所有此类内部调用的所有代码都是 C/C++。
在运行时,与将生成 IL(中间语言)的常规 .net 代码相反,此类内部调用是依赖于平台的汇编指令