Joh*_*n V 65 c# compiled interpreted-language
关于这一点有很多矛盾的信息.虽然有人说C#被编译(因为它被编译成IL然后在运行时被编译为本机代码),但是其他人说它被解释为它需要.NET.EN Wiki说:
许多解释语言首先被编译为某种形式的虚拟机代码,然后在运行时将其解释或编译为本机代码.
所以我很困惑.任何人都可以清楚解释这个
Sim*_*mon 66
C#编译器将C#编译成IL.
然后,根据需要将此IL实时编译(JIT)到主机的本机汇编语言中.但是,可以编写一个解释IL的.NET运行时.即使这样做了,我仍然认为c#是一种编译语言.
Jon*_*nna 38
纯编译语言有一些优点.速度通常和工作集大小一样.纯粹的解释语言有一些优点.不需要显式编译阶段的灵活性,允许我们进行适当的编辑,并且通常更容易移植.
在这种情况下,jitted语言适合中间地带.
这就是为什么我们可能会认为,根据我们关心的指标取决于哪个位置,以及我们对一个或另一个的偏见,我们可能会认为一个jitted语言是编译的还是解释的.
C#也可以在第一次运行时编译,就像在ASP.NET中一样,这使得它在这种情况下接近解释(虽然它仍然被编译为IL然后在这种情况下进行jitted).当然,它具有在这种情况下解释的所有优点(与经典ASP中使用的VBScript或JScript相比),以及编译的许多优点.
严格来说,没有任何语言可以使用语言进行搜索,解释或编译.我们可以将C#转换为本机代码(尽管如果它像动态加载程序集那样仍然会使用IL和jitting).我们可以为C或C++编写一个内部版本(有几个人已经这样做了).在最常见的用例中,C#被编译为IL,然后进行jitted,这不是解释的经典定义,也不是编译的经典定义.
Joh*_*ser 15
基于观点的语义和语句太多.
首先:C#不是解释性语言; CLR和JVM被认为是"运行时"或"中间件",但同样的名称适用于像Perl这样的东西.这在与名字有关的人之间造成了很多混乱.
引用运行时的术语"解释器"通常意味着现有代码解释一些非本机代码.有两种大范例:解析读取原始源代码并采取逻辑操作; 字节码执行首先将代码编译为非本机二进制表示,这需要更少的CPU周期来解释.
Java最初编译为字节码,然后通过解释器; 现在,JVM读取字节码并及时将其编译为本机代码.CIL也这样做:CLR使用即时编译到本机代码.
考虑运行源代码,运行字节码,编译到本机,即时编译,通过编译器运行源代码到实时原生等的所有组合,等等.语言是否被编译或解释的语义变得毫无意义.
例如:许多解释语言使用即时字节码编译.C#编译为CIL,JIT编译为本机; 相比之下,Perl立即将脚本编译为字节码,然后通过解释器运行此字节码.您只能以CIL字节码格式运行C#程序集; 您只能以原始源代码格式运行Perl脚本.
即时编译器还运行许多外部和内部仪器.运行时跟踪各种函数的执行,然后调整代码布局以优化其特定执行流的分支和代码组织.这意味着JIT代码可以比本机编译的代码运行得更快(例如C++,或者像C#通过IL2CPP运行),因为JIT在运行时将其优化策略调整为代码的实际执行情况.
欢迎来到计算机编程世界.我们决定使它非常复杂,然后将非描述性名称附加到所有内容上.目的是在没有实际意义的词语定义上创造火焰战争.
psu*_*sur 12
看这里:http://msdn.microsoft.com/library/z1zx9t92
用C#编写的源代码被编译成符合CLI规范的中间语言(IL).
(......)
执行C#程序时,程序集将加载到CLR中,CLR可能会根据清单中的信息执行各种操作.然后,如果满足安全性要求,则CLR执行即时(JIT)编译以将IL代码转换为本机机器指令.
小智 11
如果您感觉,学习或者是老上学,那么编译的EXE将从源代码转换为机器代码,然后解释C#.如果您认为编译意味着将源代码转换为其他代码(如字节代码),则转换为是.对我来说,解释了任何需要运行时处理才能在其构建的操作系统中工作的东西.
首先让我们了解解释和编译的定义。
“编译”(指代码时)意味着将代码从一种语言翻译成另一种语言。通常从人类可读的源代码到目标处理器可以......处理的机器代码。
“解释”(指代码时)也意味着将代码从一种语言翻译成另一种语言。但这一次它通常用于将人类可读的源代码转换为中间代码,然后由虚拟机将其解释为机器代码。
只是要清楚
源代码 -> 编译器 -> 机器代码
源代码 -> 编译器 -> 字节码 -> 解释器 -> 机器代码
理论上,任何语言都可以被解释或编译。通常 Java 被编译成字节码,字节码由 Java 虚拟机解释成机器码。C# 通常被解释为字节码,由 CLR、公共语言运行时、另一个虚拟机编译。
到目前为止,整件事都是营销噱头。添加了术语“解释”(或至少增加了使用)以帮助展示即时编译是多么简洁。但他们可以只使用“编译”。区别更多是对英语语言和商业趋势的研究,而不是任何技术性质的研究。