Skip to content

Instantly share code, notes, and snippets.

@lbialy
Last active November 22, 2024 11:51
Show Gist options
  • Save lbialy/5ef6ccd5861e2362e228f375b30f510d to your computer and use it in GitHub Desktop.
Save lbialy/5ef6ccd5861e2362e228f375b30f510d to your computer and use it in GitHub Desktop.
comparing scala native perf and golang
// run `go build main.go`
package main
import (
"fmt"
"os"
"strconv"
)
func fibonacci(n int) int {
if n <= 1 {
return n
}
prev, current := 0, 1
for i := 2; i <= n; i++ {
prev, current = current, prev+current
}
return current
}
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage: go run main.go <number>")
return
}
arg := os.Args[1]
n, err := strconv.Atoi(arg)
if err != nil {
fmt.Printf("Error: '%s' is not a valid integer.\n", arg)
return
}
fmt.Printf("Fibonacci(%d) = %d\n", n, fibonacci(n))
}
// run `scala package main.scala --native -o main`
import scala.annotation.tailrec
def fibonacci(n: Int): Long =
@tailrec
def loop(n: Int, prev: Long, current: Long): Long =
if n == 0 then prev
else if n == 1 then current
else loop(n - 1, current, prev + current)
loop(n, 0, 1)
@main def run(args: String*): Unit =
if args.isEmpty then
println("Usage: run <number>")
else
try
val n = args(0).toInt
println(s"Fibonacci($n) = ${fibonacci(n)}")
catch
case _: NumberFormatException =>
println(s"Error: '${args(0)}' is not a valid integer.")
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/scala (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 13.21 millis fish external
usr time 2.88 millis 0.09 millis 2.79 millis
sys time 7.66 millis 2.37 millis 5.29 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/scala (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 13.10 millis fish external
usr time 2.41 millis 0.13 millis 2.28 millis
sys time 6.67 millis 2.43 millis 4.24 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/scala (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 13.21 millis fish external
usr time 3.48 millis 0.12 millis 3.36 millis
sys time 7.64 millis 2.69 millis 4.95 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/scala (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 9.39 millis fish external
usr time 1.95 millis 0.09 millis 1.86 millis
sys time 5.93 millis 2.17 millis 3.76 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/go (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 18.27 millis fish external
usr time 2.44 millis 0.11 millis 2.33 millis
sys time 8.55 millis 2.40 millis 6.15 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/go (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 12.62 millis fish external
usr time 3.29 millis 0.09 millis 3.20 millis
sys time 7.84 millis 2.09 millis 5.76 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/go (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 12.43 millis fish external
usr time 3.52 millis 0.10 millis 3.43 millis
sys time 7.93 millis 2.23 millis 5.70 millis
╭─lbialy at vl-d-1325 in ⌁/Projects/foss/tmp/compare-perf-go-scala/go (⎈ colima|default)
╰─λ time ./main 1000
Fibonacci(1000) = 817770325994397771
________________________________________________________
Executed in 16.87 millis fish external
usr time 3.10 millis 0.09 millis 3.01 millis
sys time 7.27 millis 1.91 millis 5.36 millis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment