diff options
| -rw-r--r-- | README.md | 1 | ||||
| -rw-r--r-- | c-luajit/.gitignore | 2 | ||||
| -rw-r--r-- | c-luajit/Makefile | 17 | ||||
| -rw-r--r-- | c-luajit/fibonacci.c | 14 | ||||
| -rw-r--r-- | c-luajit/fibonacci.lua | 15 | ||||
| -rw-r--r-- | c-luajit/measurements.txt | 28 |
6 files changed, 77 insertions, 0 deletions
@@ -42,6 +42,7 @@ running it. | [c-bluetooth](./c-bluetooth) | clang-17 | Scans for all Bluetooth devices. | | [d-x11](./d-x11) | dmd-2.110 | Uses X11 to create a basic window without any bindings needed. | | [d-bmp-header](./d-bmp-header) | dmd-2.110 | Reads BMP image header and prints the information out. | +| [c-luajit](./c-luajit) | clang-19 | Testing execution speed of Lua vs Luajit vs embedded Luajit. | ## License 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 |
