diff --git a/clean.sh b/clean.sh index 955e44fb..3e357dfe 100755 --- a/clean.sh +++ b/clean.sh @@ -13,3 +13,4 @@ rm fortran/code rm zig/code rm lua/code rm -f swift/code +rm ocaml/code ocaml/code.cm* ocaml/code.o diff --git a/compile.sh b/compile.sh index 4a5d27f7..1df644a0 100755 --- a/compile.sh +++ b/compile.sh @@ -15,3 +15,4 @@ gfortran -O3 fortran/code.f90 -o fortan/code zig build-exe -O ReleaseFast -femit-bin=zig/code zig/code.zig luajit -b lua/code.lua lua/code swiftc -O -parse-as-library -Xcc -funroll-loops -Xcc -march=native -Xcc -ftree-vectorize -Xcc -ffast-math swift/code.swift -o swift/code +ocamlopt ocaml/code.ml -o ocaml/code diff --git a/fibonacci/ocaml/code.ml b/fibonacci/ocaml/code.ml new file mode 100644 index 00000000..7bd2190c --- /dev/null +++ b/fibonacci/ocaml/code.ml @@ -0,0 +1,14 @@ + + +let rec fibonacci n = + if n < 2 then n + else fibonacci (n-1) + fibonacci (n-2) + + +let () = +let u = int_of_string Sys.argv.(1) in +let r = ref 0 in + for i = 1 to u - 1 do + r := !r + fibonacci i + done; + Printf.printf "%d" !r \ No newline at end of file diff --git a/loops/ocaml/code.ml b/loops/ocaml/code.ml new file mode 100644 index 00000000..2ddd6626 --- /dev/null +++ b/loops/ocaml/code.ml @@ -0,0 +1,15 @@ +let () = Random.self_init () + +let () = + let u = int_of_string Sys.argv.(1) in + let r = Random.int 10000 in + let a = Array.make 10000 0 in + + for i = 0 to 9999 do + for j = 0 to 99999 do + a.(i) <- a.(i) + (j mod u); + done; + a.(i) <- a.(i) + r; + done; + + Printf.printf "%d" a.(r) diff --git a/run.sh b/run.sh index c5417a11..bfbdfabe 100755 --- a/run.sh +++ b/run.sh @@ -39,3 +39,5 @@ run "LuaJIT" "luajit ./lua/code 40" run "Lua" "lua ./lua/code.lua 40" run "Swift" "./swift/code 40" run "Julia" "julia ./julia/code.jl 40" +run "OCaml" "./ocaml/code 40" +