VB.net ---- 具有不聪明的编译器
淡蓝色2 2005-05-31 01:28:16 从VB.net2002到2003,它的代码编辑器具有了足够的“智能化”,然而,它的编译器却是非常不够聪明。
1.与VB6.0编译器的比较:
请看下面的代码段:
Sub x1()
Dim I As Long, J As Integer, K As Integer
For I = 0 To 50000000
J = J + K
Next
End Sub
这段代码 无须更改,即 可以在VB6.0 又 可以在VB.net中编译通过。
然而它们编译后的运行结果是不同的
启用VB6.0的任何一种优化,你会发现这段代码被VB6.0编译器完全忽略了,计算机根本就不会执行这段代码。理由很充分:这段代码毫无实质性的作用(如果你说它有延时的作用,那我会说用这种方法也够垃圾、蠢笨,延时没这么用的)。
不过,VB.net的编译器则不然,它会把这段代码原封不动地编译。VB.net编译器毫无“垃圾检测”能力。
2.与C#编译器的比较:
请看下面的VB.net代码段:
Sub X()
Dim A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q as Integer
A = B + C
B = A + B
C = A + B
End Sub
等效的C#代码段:
void X(){
int a,b,c,d,e,f,g,h,i,j,k,m,n,o,p,q;
a = 0; b = 0; c = 0;
a = b + c;
b = a + c;
c = a + b;
}
启用所有的优化编译它们,然后用反射器分别查看它们的编译结果,你会发现 VB.net把代码中所有的语句都原封不动地编译了。
而C#编译器则基本上没编译什么代码。理由也很充分:这段代码毫无执行意义。
这个可以理解:VB.net把力气都使到代码编辑上了,而编译器还未受到重视。
热切希望VB.net2005编译器 能够在这方面具有长足的进步。