summaryrefslogtreecommitdiff
path: root/c-luajit
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2025-03-29 01:39:29 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2025-03-29 01:39:29 +0100
commitfd6d278926495633fb0194e9520eb65fad91c502 (patch)
tree803741d4c6220d88e1f3f61ab912ff1f866c7fe9 /c-luajit
parent069304a75fa5d14b11d4fee999588530a0535cd3 (diff)
downloadprobe-fd6d278926495633fb0194e9520eb65fad91c502.tar.gz
Added Luajit experiments
Diffstat (limited to 'c-luajit')
-rw-r--r--c-luajit/.gitignore2
-rw-r--r--c-luajit/Makefile17
-rw-r--r--c-luajit/fibonacci.c14
-rw-r--r--c-luajit/fibonacci.lua15
-rw-r--r--c-luajit/measurements.txt28
5 files changed, 76 insertions, 0 deletions
diff --git a/c-luajit/.gitignore b/c-luajit/.gitignore
new file mode 100644
index 0000000..8b1d82d
--- /dev/null
+++ b/c-luajit/.gitignore
@@ -0,0 +1,2 @@
+fibonacci
+fibonacci.luac
diff --git a/c-luajit/Makefile b/c-luajit/Makefile
new file mode 100644
index 0000000..0da7741
--- /dev/null
+++ b/c-luajit/Makefile
@@ -0,0 +1,17 @@
+# Requires: sudo dnf install lua-devel luajit-devel
+
+all: normal jit embedded
+
+normal:
+ bash -c "time lua fibonacci.lua && echo"
+
+jit:
+ luajit -b fibonacci.lua fibonacci.luac
+ bash -c "time luajit fibonacci.luac && echo"
+
+embedded:
+ cc -o fibonacci fibonacci.c `pkg-config --cflags --libs luajit`
+ bash -c "time ./fibonacci && echo"
+
+clean:
+ @rm fibonacci fibonacci.luac
diff --git a/c-luajit/fibonacci.c b/c-luajit/fibonacci.c
new file mode 100644
index 0000000..d32afd1
--- /dev/null
+++ b/c-luajit/fibonacci.c
@@ -0,0 +1,14 @@
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+int main(int argc, char **argv) {
+ lua_State *L = luaL_newstate();
+ luaL_openlibs(L);
+ if (luaL_loadfile(L, "fibonacci.luac") || lua_pcall(L, 0, 0, 0)) {
+ fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
+ return 1;
+ }
+ lua_close(L);
+ return 0;
+}
diff --git a/c-luajit/fibonacci.lua b/c-luajit/fibonacci.lua
new file mode 100644
index 0000000..e52eb07
--- /dev/null
+++ b/c-luajit/fibonacci.lua
@@ -0,0 +1,15 @@
+-- Naive recursive implementation to increase the time of computation.
+function fibonacci(n)
+ if n == 0 then
+ return 0
+ elseif n == 1 then
+ return 1
+ else
+ return fibonacci(n - 1) + fibonacci(n - 2)
+ end
+end
+
+local n = 40
+local result = fibonacci(n)
+print("The " .. n .. "th Fibonacci number is: " .. result)
+
diff --git a/c-luajit/measurements.txt b/c-luajit/measurements.txt
new file mode 100644
index 0000000..0c2b2c9
--- /dev/null
+++ b/c-luajit/measurements.txt
@@ -0,0 +1,28 @@
+* Running with just normal Lua
+
+ $ time lua fibonacci.lua
+ The 40th Fibonacci number is: 102334155
+
+ real 0m5.601s
+ user 0m5.590s
+ sys 0m0.001s
+
+* Running with Luajit
+
+ $ luajit -b fibonacci.lua fibonacci.luac
+ $ time luajit fibonacci.luac
+ The 40th Fibonacci number is: 102334155
+
+ real 0m1.050s
+ user 0m1.047s
+ sys 0m0.001s
+
+* Running with Luajit embedded into C
+
+ $ cc -o fibonacci fibonacci.c `pkg-config --cflags --libs luajit`
+ $ time ./fibonacci
+ The 40th Fibonacci number is: 102334155
+
+ real 0m1.033s
+ user 0m1.031s
+ sys 0m0.000s