C#部分解释或真正编译了吗?

10 浏览
0 Comments

C#部分解释或真正编译了吗?

关于这个问题有很多相互矛盾的信息。有些人说C#是编译的(因为它被编译成IL并在运行时转换成本地代码),而另一些人说它是解释性的,因为需要.NET。英文维基百科说:

许多解释性的编程语言首先被编译成某种虚拟机代码,然后在运行时被解释或编译为本地代码。

所以我很困惑。有人能清楚地解释一下吗?

admin 更改状态以发布 2023年5月19日
0
0 Comments

纯编译型语言具有某些优点,例如速度通常较快,工作集大小也往往较小。

纯解释型语言也具有一些优点,例如不需要明确的编译阶段,可以直接进行编辑,通常更易于移植。

即时编译语言处于中间地带。

这就是为什么我们可能认为即时编译语言是编译型语言或解释型语言,这取决于我们想要达到哪种度量标准和我们对其中一种或另一种的偏见。

C#也可以在第一次运行时进行编译,例如在ASP.NET中,这使它在这种情况下接近于解释型语言(尽管它仍然编译为IL,然后在这种情况下被JIT编译)。在这种情况下,它基本上具有解释型语言的所有优点(与在classic ASP中使用的VBScript或JScript进行比较),以及许多编译型语言的优点。

严格来说,没有一种语言是纯即时编译的、解释的或编译的。我们可以将C# NGen为本机代码(尽管如果它做像动态加载程序集之类的事情,它仍然会使用IL和JIT编译)。我们可以为C或C++编写一个解释器(几个人已经这样做了)。然而,在最常见的用例中,C#被编译为IL,然后被JIT编译,这并不完全符合解释型或编译型的经典定义。

0
0 Comments

C#被编译成IL(Intermediate Language,中间语言),由C#编译器完成。

这个IL会在需要时被及时(JIT)编译成主机机器的本地汇编语言。虽然有可能编写一个可以解释IL的.NET运行时,但我仍然认为C#是一种编译语言。

0