<分区>
我正在初始化一个数组,然后多次反转它以查看性能。
我想知道我是否编写了无法比较的代码,或者 Rust 真的很糟糕以至于花了这么多时间吗?
这是 Rust 的构建和计时过程:
rustc main.rs
time ./main
这会一直运行下去。这是令人惊讶的
使用rust
fn reverse(mylist: &mut Vec<u16>) {
let length = mylist.len();
let mid_length = length / 2;
for number in 0..mid_length {
let mut a = mylist[number];
let mut b = mylist[length - number - 1];
mylist[number] = b;
mylist[length - number - 1] = a;
}
}
fn main() {
let array_size = 100000;
let iterations = 100000;
let mut v = vec![0u16; array_size];
for _ in 0..iterations {
reverse(&mut v);
}
}
开始
Go 代码与上面的 Rust 代码完全相同。需要注意的重要一点是 Go 有垃圾收集,而 Rust 没有。令人惊讶的是,Go 在不到 6 秒的时间内完成了这项工作:
go build main.go
time ./main 100000 100000
real 0m5.932s
user 0m5.928s
sys 0m0.004s
开始
package main
import (
"os"
"strconv"
)
func reverse(mylist []int) []int {
length := len(mylist)
half := int(length / 2)
for i := 0; i < half; i++ {
mylist[i], mylist[length-i-1] = mylist[length-i-1], mylist[i]
}
return mylist
}
func main() {
array_size, _ := strconv.Atoi(os.Args[1])
iterations, _ := strconv.Atoi(os.Args[2])
mylist := make([]int, array_size)
for i := 0; i < iterations; i++ {
reverse(mylist)
}
}