Skip to content

Instantly share code, notes, and snippets.

@s0kil
Last active June 29, 2022 10:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save s0kil/155b78580d1b68768a6c601a66f8e29b to your computer and use it in GitHub Desktop.
Save s0kil/155b78580d1b68768a6c601a66f8e29b to your computer and use it in GitHub Desktop.
Crystal vs Ocaml vs Go Fibonacci Benchmark

Fibonacci - Crystal vs OCaml vs Go

Crystal

Program: fibonacci.cr

def fibonacci(n)
  return n if n < 2
  fibonacci(n - 1) + fibonacci(n - 2)
end

print fibonacci(46)

Clean Cache:

rm -rf ~/.cache/crystal/

Compile:

$ time crystal build --release -o fibonacci-cr fibonacci.cr

real 0m8.205s
user 0m8.317s
sys  0m0.112s

Run:

$ /usr/bin/time -v ./fibonacci-cr
1836311903
Command being timed: "./fibonacci-cr"
  User time (seconds): 9.09
  Percent of CPU this job got: 99%
  Maximum resident set size (kbytes): 3192

Result:

Compilation: 8.2s
Runtime:     9.1s

Conclusion: 17.3s

OCaml

Program: fibonacci.ml

let rec fibonacci =
  function n -> if n < 2 then n else fibonacci (n - 1) + fibonacci (n - 2)
;;

print_int (fibonacci(46))

Compile:

$ time ocamlopt -o fibonacci-ml fibonacci.ml
real 0m0.082s
user 0m0.065s
sys  0m0.017s

Run:

$ /usr/bin/time -v ./fibonacci-ml
1836311903
Command being timed: "./fibonacci-ml"
  User time (seconds): 9.02
  Percent of CPU this job got: 99%
  Maximum resident set size (kbytes): 2308

Result:

Compilation: 0.1s
Runtime:     9.0s

Conclusion: 9.1s

Go

Program: fibonacci.go

package main

func fibonacci(n int) int {
  if n <= 1 {
    return n
  }
  return fibonacci(n-1) + fibonacci(n-2)
}

func main() {
  print(fibonacci(46))
}

Compile:

$ time go build -o fibonacci-go fibonacci.go

real 0m0.122s
user 0m0.132s
sys  0m0.045s

Run:

$ /usr/bin/time -v ./fibonacci-go
1836311903
Command being timed: "./fibonacci-go"
  User time (seconds): 12.50
  Percent of CPU this job got: 100%
  Maximum resident set size (kbytes): 1244

Result:

Compilation: 0.1s
Runtime:     12.5s

Conclusion: 12.6s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment