草庐IT

JIT即时编译器

全部标签

c# - JIT 编译器是编译器还是解释器?

我的问题是将IL转换为机器语言的JIT编译器到底是编译器还是解释器。还有一个问题:HTML、JavaScript是编译型语言还是解释型语言?提前致谢 最佳答案 JIT(justintime)编译器是一种编译器。它进行优化以及编译为机器代码。(甚至称为编译器)HTML、Javascript被解释,它们由Web浏览器按原样读取,并以最少的错误修复和优化运行。 关于c#-JIT编译器是编译器还是解释器?,我们在StackOverflow上找到一个类似的问题: htt

c# - 编译器错误 "Default parameter specifiers are not permitted"

下面是我的代码。publicclassPItem{publicStringcontent;publicintcount;publicintfee;publicintamount;publicstringdescription;//DefaultvaluespublicPItem(String_content="",int_count=0,int_fee=0,string_description="",int_amount=0){content=_content;count=_count这是在一个类里面。当我尝试运行程序时出现此错误:Defaultparameterspecifiersa

c# - 编译器魔法 : Why?

我刚刚注意到给定以下代码:if(x.ID>0&&!x.IsCool)MicrosoftC#3.0(VS2008SP1)编译器会对此进行优化:if(!((x.Id这是在未启用优化的情况下进行的调试构建。为什么编译器会那样做?它在执行方面是否更快?我使用Reflector找到了答案(我实际上是在寻找不同的东西) 最佳答案 C#编译器肯定不会为您的代码段生成等效的C#代码。它被编译成IL。基本上,您所看到的(我猜是来自Reflector)是反编译器为该IL吐出的等效C#代码。语言规范没有说明什么是“未优化”代码。C#编译器可以生成任何有效

c# - 为什么 C# 编译器可以 "see"静态属性,而不是实例方法,在未引用的 DLL 中的类?

我的问题的前提,用简单的英语:名为Foo的库依赖于名为Bar的库Foo中的类扩展了Bar中的类Foo定义简单传递给Bar的属性/方法应用程序FooBar仅依赖于Foo考虑以下示例:classProgram{staticvoidMain(string[]args){Foofoo=Foo.Instance;intid=foo.Id;//Compilerishappyfoo.DoWorkOnBar();//Compilerisnothappy}}Foo定义如下publicclassFoo:Bar{publicnewstaticFooInstance{get=>(Foo)Bar.Instanc

c# - 为什么枚举中不允许​​字段引用(或者这是编译器错误?)

当我使用下面的代码时:usingSystem;namespaceFoo{[Flags]publicenumBar:ulong{None=0x0000000000000000,A=0x8000000000000000,B=0x0000000000000001L|A,C=0x0000000000000002L|B,D=0x0000000000000004L|A,All=A|B|C|D}}单声道编译器崩溃。这是由于语义错误(语言中不允许的错误)造成的,但编译器没有注意到,还是编译器错误?版本:Mono2.10.8.1我已经在bugzilla(https://bugzilla.xamarin.

C# 编译器无法识别正在实现接口(interface)的类

以下代码无法编译(使用VS2010),我不明白为什么。编译器应该能够推断出List与IEnumerable兼容(抱歉找不到更好的词),但不知何故它没有。我在这里缺少什么?interfaceITest{voidTest();}classTestClass:ITest{publicvoidTest(){}}classProgram{staticvoidTest(IEnumerabletests){foreach(vartintests){Console.WriteLine(t);}}staticvoidMain(string[]args){varlst=newList();Test(lst

c# - 带有变量名歧义的奇怪 C# 编译器问题

让我们看下面的代码:classFoo{stringbar;publicvoidMethod(){if(!String.IsNullOrEmpty(this.bar)){stringbar="Hello";Console.Write(bar);}}}这将编译,一切都很好。但是,现在让我们删除this.前缀:classFoo{stringbar;publicvoidMethod(){if(!String.IsNullOrEmpty(bar))//在这种情况下,我得到一个编译器错误。我同意这是一个错误,但是让我感到困惑的是错误的位置。错误发生在行上:stringbar="Hello";随消息

c# - 为什么 c# 编译器需要在 switch 构造中使用 break 语句?

我很难理解为什么编译器需要使用break语句。不可能错过它,因为现在允许掉落。我看到了C或C++中断的原因,但这里是否需要中断。为什么在案件结束后中断不是内置行为?它不只是没有语义的语法吗?抱歉,如果这是一个愚蠢的问题。编辑:仅当案例为空时才允许掉落。当那里有语句时,你不能省略break语句。所以,这是另一回事。 最佳答案 编译器并不“需要”break语句,它需要它们。这是一个设计决定。它使代码在语义上接近C和C++,同时消除了一直是C语言的一个有争议的“特性”的失败陷阱。 关于c#-为

c# - 了解 dotPeek 反编译代码中编译器生成的类型

嘿嘿。我正在阅读DigiTrafficAccelerator的反编译源码(我认为这是最好的学习方式),直到我得到了一些看不懂的代码!请看一下:internalclassProxyFarm{privatestaticRandomrand=newRandom();privatestaticRegexUserPassAtHostPort=newRegex("\r\n^\r\n(?[^:]+?):(?[^@]+?)\r\n@\r\n(?[^:]+?(?::\\d+)?)\r\n$",RegexOptions.IgnorePatternWhitespace);privatestaticRegex

c# - 如果字段的顺序不同,为什么编译器会为匿名类型生成不同的类

我考虑过两种情况:vara=new{a=5};varb=new{a=6};Console.WriteLine(a.GetType()==b.GetType());//TrueIdeone:http://ideone.com/F8QwHY和:vara=new{a=5,b=7};varb=new{b=7,a=6};Console.WriteLine(a.GetType()==b.GetType());//FalseIdeone:http://ideone.com/hDTcxX问题是为什么字段顺序真的很重要?这是否有任何原因,或者仅仅是因为它是(这就是设计)。如果原因只是匿名类型不应该以这种