我用几种语言编写了相同的控制台应用程序。应用程序向用户询问一个数字,并从1到该数字进行计数,在控制台的单独行上打印每个数字。我实际上期望vb.net在编程语言中变得最糟糕,让我好奇的是它没有,它实际上是最快的。
VB.Net - 运行VS调试器:
Sub Main()
Console.Write("Give me a number, any number: ")
For i = 1 To CInt(Console.ReadLine)
Console.WriteLine(i)
Next
Console.ReadLine()
End Sub
C ++ - 运行VS调试器(比VB慢约5倍):
#include <iostream>
using namespace std;
int main() {
cout << "Give me a number, any number: ";
int number; cin >> number;
cout << '\n';
for (int i = 1; i <= number; i++) cout << i << '\n';
while (true) {}
}
Haskell - 从控制台编译并运行(仅比VB略慢):
import System.IO
import Control.Monad
main = do
putStr "Give me a number, any number: "
hFlush stdout
input <- getLine
mapM print [1..read input]
return 0
Javascript - 在firefox中运行firebug(比VB慢很多):
for (i = 0; i<100000; i++){ console.log(i); }
Befunge - 使用chrome / javascript运行through this网站(比firefox快,但仍然比vb慢)
&1-0>1+:.134*+,\:#v_@
^ \-1<
那么简单,是什么让vb解决方案比其他语言更快?
答案 0 :(得分:5)
为什么你会期望VB.NET最慢?编译完成后,VB.NET程序就是一个CIL程序,与c#程序相同。在.NET JIT编译器编译之后,它被编译为本机代码,并进行了相当优化。 Javascript是一种解释型语言,firebug是一个解释器/调试器,它会降低代码速度,因此您可以跟踪调试信息。我希望C ++调试器也是如此。当你运行没有调试器的c ++程序时,你得到的结果会变慢吗?
答案 1 :(得分:-1)
当被要求在Release下优化和运行时,c ++会变慢,没有附加调试器,原因,c ++不是一种缓存语言,它必须在每一步都能解决所有问题。与CIL相比.Net Framework意识到它是相同的操作并解决了差异。加上c ++是一种古老的语言。