minimal/benchmark
Python vs JS vs C vs Java vs Golang vs Rust
Un petit benchmark avec quelques boucles et des calculs en entier.
Inspiré de NodeJS vs. Python 3 Performance
Résultats
$ time python prime.py
104743
real 0m31.852s
user 0m31.776s
sys 0m0.039s
$ time node prime.js
104743
real 0m1.769s
user 0m1.730s
sys 0m0.022s
$ time ./primec # C
104743
real 0m1.525s
user 0m1.519s
sys 0m0.003s
$ time java prime
104743
real 0m1.191s
user 0m1.167s
sys 0m0.026s
$ time ./primeg # Golang
104743
real 0m3.963s
user 0m3.942s
sys 0m0.007s
$ time ./primer # Rust
104743
real 0m31.614s
user 0m31.596s
sys 0m0.011s
Programmes
Python
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True
def get_prime(n):
count = 0
num = 2
while n > count:
if is_prime(num):
count += 1
num += 1
return num - 1
print(get_prime(10001))
JS / NodeJS
const isPrime = n => {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false
}
}
return true
}
const getPrime = n => {
let count = 0
let num = 2
while (n > count) {
if (isPrime(num)) {
count += 1
}
num += 1
}
return num - 1
}
console.log(getPrime(10001))
C
#include <stdbool.h>
#include <stdio.h>
#include <unistd.h>
bool isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int getPrime(int n) {
int count = 0;
int num = 2;
while (n > count) {
if (isPrime(num)) {
count += 1;
}
num += 1;
}
return num - 1;
}
int main() {
printf("%d\n", getPrime(10001));
}
Java
public class prime {
public static boolean isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static int getPrime(int n) {
int count = 0;
int num = 2;
while (n > count) {
if (isPrime(num)) {
count += 1;
}
num += 1;
}
return num - 1;
}
public static void main(String[] args) {
System.out.println(getPrime(10001));
}
}
Golang
package main
import "fmt"
func isPrime(n int) bool {
for i := 2; i < n; i++ {
if (n % i == 0) {
return false
}
}
return true
}
func getPrime(n int) int {
var count int = 0;
var num int = 2;
for n > count {
if (isPrime(num)) {
count += 1
}
num += 1
}
return num - 1
}
func main() {
fmt.Println(getPrime(10001))
}
Rust
fn main() {
println!("{}", get_prime(10001));
}
fn is_prime(n: u32) -> bool {
match n {
0...1 => false,
_ => !(2..n).any(|d| n % d == 0),
}
}
fn get_prime(n: u16) -> u32 {
let mut primes_found = 0;
let mut i: u32 = 2;
while n > primes_found {
if is_prime(i) {
primes_found += 1;
}
i += 1;
}
return i - 1;
}