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;
}