Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
被维基弄糊涂了:C#和Java被解释了吗?_Java_C#_Jit - Fatal编程技术网

被维基弄糊涂了:C#和Java被解释了吗?

被维基弄糊涂了:C#和Java被解释了吗?,java,c#,jit,Java,C#,Jit,在EN Wiki上,我读到C#和Java都是解释语言,但至少对C#来说,我认为这不是真的 许多解释语言首先被编译成某种形式的虚拟语言 机器代码,然后在运行时对其进行解释或编译 转换为本机代码 据我所知,它被编译成CIL,运行时使用JIT将其编译到目标平台。我还读到JIT是一个解释器,真的是这样吗? 或者在使用中间代码时被称为解释代码?我不明白。 谢谢JIT是编译本机(机器)代码的一种形式通常(但并非必要),CLI和JVM的实现分两步编译: 语言编译器将代码编译成中间代码(IL/字节码) JIT

在EN Wiki上,我读到C#和Java都是解释语言,但至少对C#来说,我认为这不是真的

许多解释语言首先被编译成某种形式的虚拟语言 机器代码,然后在运行时对其进行解释或编译 转换为本机代码

据我所知,它被编译成CIL,运行时使用JIT将其编译到目标平台。我还读到JIT是一个解释器,真的是这样吗? 或者在使用中间代码时被称为解释代码?我不明白。
谢谢

JIT是编译本机(机器)代码的一种形式通常(但并非必要),CLI和JVM的实现分两步编译:

  • 语言编译器将代码编译成中间代码(IL/字节码)
  • JIT在运行时将其编译为本机/机器代码

但是,的口译员确实存在。例如,Micro Framework用作IL解释器。同样,NGEN和“AOT”(mono)等工具允许在开始时编译本机/机器代码。

JIT是编译本机(机器)代码的一种形式通常(但并非必要),CLI和JVM的实现分两步编译:

  • 语言编译器将代码编译成中间代码(IL/字节码)
  • JIT在运行时将其编译为本机/机器代码

但是,的口译员确实存在。例如,Micro Framework用作IL解释器。同样,NGEN和“AOT”(mono)等工具允许在开始时编译本机/机器代码。

它们被认为是JIT语言,与解释不同。JIT只是在执行过程中需要时编译为本机代码。通常的策略是预先编译成中间表示(字节码),这使得JIT更快


但是,没有任何东西可以阻止它们被解释,甚至静态编译。语言只是语言——从语言的角度看,它们的执行方式是不相关的。

它们被认为是JIT语言,与口译不同。JIT只是在执行过程中需要时编译为本机代码。通常的策略是预先编译成中间表示(字节码),这使得JIT更快

但是,没有任何东西可以阻止它们被解释,甚至静态编译。语言就是语言——从语言的角度看,它们的执行方式是不相关的

在EN Wiki上,我读到C#和Java都是解释语言

你能提供链接吗

这里的意思可能不同。这可能意味着这些语言首先被解释为将源代码转换为独立于平台的代码

它们是否在使用中间代码时被称为解释

我也这么认为

我还读到JIT是一个解释器

JIT是一个编译器。看

在EN Wiki上,我读到C#和Java都是解释语言

你能提供链接吗

这里的意思可能不同。这可能意味着这些语言首先被解释为将源代码转换为独立于平台的代码

它们是否在使用中间代码时被称为解释

我也这么认为

我还读到JIT是一个解释器

JIT是一个编译器。参见是否是“解释者”取决于讨论的背景

从纯抽象的角度来看,解释器可以定义为运行时中存在的任何中间程序,它动态地将一种语言编写的程序代码转换为另一种语言的硬件/软件的目标代码。考虑一下在x86硬件上运行java字节码,或者在CLR VM上运行Python—IronPython到底是什么。在这个视图中,每个虚拟机都是某种解释器。由于它是在运行时出现的程序,所以它明显不同于静态编译器或硬件实现的VM-s

现在有很多不同的方法来实现这个功能,重点是“动态”和“在运行时显示”

在关于VM实现的讨论中,人们明确区分了“经典”解释器和JIT-ed解释器。经典解释器是为宿主程序的每条指令发出目标代码例程的东西。此设计易于构建,但难以优化。JIT-ed设计读取原始代码的一组指令,然后将所有这些指令转换为一个本机编译例程。所以它“解释”得更快。它就像VM中的微静态编译器。有许多不同的方法可以实现标记为JIT的行为,还有其他方法,如跟踪编译器

现代虚拟机,如CLR、HotSpot和J9JVM,甚至比用简单的标签标记为JIT或解释器还要复杂。它们可以同时是静态编译器(AOT执行)、经典解释器和JIT虚拟机

例如,CLR可以提前编译代码(静态编译器),并将本机代码作为一堆或多或少的可执行文件存储在磁盘上,以便将来更快地启动托管程序。我相信“ngen”是windows中用于此功能的AOT进程。如果未使用AOT,CLR的行为与JIT VM相同

J9和HotSpot能够在运行时根据代码分析和当前负载在纯解释执行和JIT执行之间切换。所以这是一个相当灰色的区域。J9甚至具有类似于CLR的AOT功能

其他一些虚拟机,如maxinejvm或PyPy,被称为“元循环”虚拟机。这意味着它们(大部分)是用它们宿主的同一种语言实现的(Maxine是用Java编写的JVM)。为了证明