我编写了一个基准测试,计算前10000个素数的总和,并将其与JavaScript进行比较.NodeJS上的JavaScript在Rust、Scala和Java中速度最快.尽管这些程序有意使用函数风格来测试素性,以展示Rust的零成本抽象的优势,但NodeJS胜过了所有这些.
NodeJS,一个动态输入运行时,怎么能这么快?
Rust code
fn sum_primes(n: usize) -> u64 {
let mut primes = Vec::new();
let mut current: u64 = 2;
let mut sum: u64 = 0;
while primes.len() < n {
if primes.iter().all(|p| current % p != 0) {
sum += current;
primes.push(current);
}
current += 1;
}
sum
}
JavaScript code
function sumPrimes(n) {
let primes = [];
let current = 2;
let sum = 0;
while (primes.length < n) {
if (primes.every(p => current % p != 0)) {
sum += current;
primes.push(current);
}
++current;
}
return sum;
}
完整的基准可以在on GitHub中找到.