很多人推荐Rust,说是这门语言很厉害,执行速度靠近C,内存很安全,balalalalalla,我也顿时被吸引过去了,一直没有机会实验下,趁着今天还有钱上网,我做了下实验。
验证了下加法和乘法,这两个运算是科学计算必不可少的,当然还有其他的东西,比如浮点数、字符串等等,具体实现有傅立叶、矩阵、三角函数等等。
GO语言先下看代码。
func main() {
runtime.GC()
t := time.Now()
sum := 0
for i := 0; i < 20000; i++ {
for j := 0; j < 20000; j++ {
sum = sum + i*j
}
}
fmt.Println(time.Now().Sub(t))
fmt.Println(sum)
}
输出结果:
187.0107ms 。多执行几次时间区间很稳定,大约在180毫秒-188毫秒之间。
39996000100000000
Rust我刚下载下来没几分钟,看下文档写了个demo。
use std::time::SystemTime;
fn main() {
let sys_time = SystemTime::now();
println!("{:?}", sys_time);
let mut x = 0;
let mut i = 0;
let mut y:u64 = 0;
while x<20000 {
i=0;
while i<20000 {
y=y+x*i;
i=i+1;
}
x=x+1;
}
let sys_time1 = SystemTime::now();
println!("{:?}", sys_time1);
println!("The value of y is: {}", y);
}
输出结果:
SystemTime { intervals: 131345635886368025 }
SystemTime { intervals: 131345635908319281 }
The value of y is: 39996000100000000
计算下:(90831-88636)/1000=2.195秒 ,多执行几次 ,结果在1.5秒-2.5秒之间
发现和GO的执行速度相差了接近10倍。
当我计算比这数据量还大的时候,等了半天没有结果,我还以为是机子的问题,因为我无论如何也不会联想到它的执行速度上。
在RUST中,不太方便搞for循环,因为那是和python中类似的一个for in迭代器,遍历的时候有非常大性能影响。剩下一个loop和while,不太方便,编写代码的时候不小心很容易造成死循环。
我用平时用得多的delphi7编译了下,计算结果用时1.25秒,delphi还是2002?由borland推出的,发现RUST的编译器,在处理加法和乘法的时候,还比不过15年前的产物。
var i,j,t:integer;
sum:double;
begin
sum:=0;
t:=Gettickcount ;
for i:=0 to 20000-1 do
for J:=0 to 20000-1 do
sum:=sum +i*j;
ts:= Gettickcount-t;
SHOWMESSAGE( INTTOSTR(ts )+' '+ floattostr(SUM))
end;
end.
不过性能是要强于我们国产的易语言的,这是毋庸置疑的。否则没人拿去玩了。