Some simple tests measuring performance of programming languages. Maybe not so scientific, it just provides a brief concept.
Here are the results for Fibonacci sequence fib(40) using recursive function calls, single-threaded, on Thinkpad X200, Ubuntu 14.04:
Language | Finished in seconds |
---|---|
C/gcc 4.8.4 (no optimization) | 2s |
C/gcc 4.8.4 (-O3 optimization) | 0.37s |
C/clang 4.0.1 (no optimization) | 2.08s |
C/clang 4.0.1 (-O3 optimization) | 1.13s |
Rust 1.23.0 (no optimization) | 2.4s |
Rust 1.23.0 (-O optimization) | 0.8s |
Swift 5.11-dev (no optimization) | 2.5s |
Swift 5.11-dev (-O optimization) | 1.57s |
Go 1.9.2 (go run) | 2.25s |
Go 1.9.2 (compiled) | 1.97s |
OCaml 4.02.3 | 1.48s |
F# 3.0 | 1.45s |
Language | Finished in seconds |
---|---|
Java 1.8.0_161 | 0.76s |
Scala 2.12.4 | 0.72s |
Clojure 1.9.0 | 4.4s |
Kotlin 1.2.0 (JRE 1.8.0_161-b12) | 0.8s |
C# / Mono 3.2.8 | 1.66s |
Language | Finished in seconds |
---|---|
JavaScript/node.js 6.11.5 | 1.95s |
Python 2.7.6 | 45s |
Python 3.4.3 | 39s |
Python 3.6.1 (non-optimized) | 66s |
Python 3.6.4 (--enable-optimizations) | 47s |
Python 3.6.1 / Cython 0.27.3 | 0.38s |
Python 3.6.1 / Numba 0.33.0 | 2.2s |
Python 3.5.3 / PyPy 5.10.1 | 2.6s |
Ruby 2.4.0p0 | 15s |
Crystal 0.24.1 (crystal run fib.rb) | 2.76s |
Crystal 0.24.1 (compiled) | 1.65s |
Crystal 0.24.1 (--release compiled) | 1.11s |
Julia 0.6.2 | 1.51s |
Language | Finished in seconds |
---|---|
Elixir 1.5.2 / Erlang/OTP 20 | 5.7s |
#include <stdio.h>
int fib(int n)
{
if (n < 3)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
int main(int argc, char const *argv[])
{
printf("fib(40) = %d\n", fib(40));
return 0;
}
def fib(n)
if n < 3
return 1
else
return fib(n-2) + fib(n-1)
end
end
puts(fib(40))
def fib(n):
if n < 3:
return 1
else:
return fib(n-2) + fib(n-1)
print(fib(40))
function fib(n)
if (n < 3)
return 1
else
return fib(n - 2) + fib(n - 1)
end
end
println(fib(40))
defmodule Math do
def fib(1), do: 1
def fib(2), do: 1
def fib(n) do
fib(n-2) + fib(n-1)
end
end
IO.puts Math.fib(40)
package main
import (
"fmt"
)
func fib(n int) int {
if n < 3 {
return 1
}
return fib(n-2) + fib(n-1)
}
func main() {
fmt.Printf("fib(40) = %d\n", fib(40))
}
public class Fib {
static int fib(int n) {
if (n < 3)
return 1;
else
return fib(n -2) + fib(n - 1);
}
public static void main(String[] args) {
long tStart = System.currentTimeMillis();
System.out.printf("fib(40) = %d\n", fib(40));
long tEnd = System.currentTimeMillis();
long tDelta = tEnd - tStart;
double elapsedSeconds = tDelta / 1000.0;
System.out.printf("Elapsed time: %g\n", elapsedSeconds);
}
}
fn fib(n: i64) -> i64 {
if n < 3 {
1
} else {
fib(n - 2) + fib(n - 1)
}
}
fn main() {
print!("fib(40) = {}\n", fib(40));
}
func fib(n: Int) -> Int {
if n < 3 {
return 1
} else {
return fib(n: n-2) + fib(n: n-1)
}
}
print(fib(n: 40))
let rec fib n =
if n < 3 then
1
else
fib (n-1) + fib (n-2)
let () =
Printf.printf "%d\n" (fib 40)
function fib(n)
{
if (n < 3)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
console.log(fib(40));