Added Luajit experiments

Author Mitja Felicijan <mitja.felicijan@gmail.com> 2025-03-29 01:39:29 +0100
Committer Mitja Felicijan <mitja.felicijan@gmail.com> 2025-03-29 01:39:29 +0100
Commit fd6d278926495633fb0194e9520eb65fad91c502 (patch)
-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
diff --git a/README.md b/README.md
...
42
| [c-bluetooth](./c-bluetooth)           | clang-17   | Scans for all Bluetooth devices.                               |
42
| [c-bluetooth](./c-bluetooth)           | clang-17   | Scans for all Bluetooth devices.                               |
43
| [d-x11](./d-x11)                       | dmd-2.110  | Uses X11 to create a basic window without any bindings needed. |
43
| [d-x11](./d-x11)                       | dmd-2.110  | Uses X11 to create a basic window without any bindings needed. |
44
| [d-bmp-header](./d-bmp-header)         | dmd-2.110  | Reads BMP image header and prints the information out.         |
44
| [d-bmp-header](./d-bmp-header)         | dmd-2.110  | Reads BMP image header and prints the information out.         |
  
45
| [c-luajit](./c-luajit)                 | clang-19   | Testing execution speed of Lua vs Luajit vs embedded Luajit.   |
45
  
46
  
46
## License
47
## License
47
  
48
  
...
diff --git a/c-luajit/.gitignore b/c-luajit/.gitignore
  
1
fibonacci
  
2
fibonacci.luac
diff --git a/c-luajit/Makefile b/c-luajit/Makefile
  
1
# Requires: sudo dnf install lua-devel luajit-devel
  
2
  
  
3
all: normal jit embedded
  
4
  
  
5
normal:
  
6
	bash -c "time lua fibonacci.lua && echo"
  
7
  
  
8
jit:
  
9
	luajit -b fibonacci.lua fibonacci.luac
  
10
	bash -c "time luajit fibonacci.luac && echo"
  
11
  
  
12
embedded:
  
13
	cc -o fibonacci fibonacci.c `pkg-config --cflags --libs luajit`
  
14
	bash -c "time ./fibonacci && echo"
  
15
  
  
16
clean:
  
17
	@rm fibonacci fibonacci.luac
diff --git a/c-luajit/fibonacci.c b/c-luajit/fibonacci.c
  
1
#include <lua.h>
  
2
#include <lualib.h>
  
3
#include <lauxlib.h>
  
4
  
  
5
int main(int argc, char **argv) {
  
6
    lua_State *L = luaL_newstate();
  
7
    luaL_openlibs(L);
  
8
    if (luaL_loadfile(L, "fibonacci.luac") || lua_pcall(L, 0, 0, 0)) {
  
9
        fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
  
10
        return 1;
  
11
    }
  
12
    lua_close(L);
  
13
    return 0;
  
14
}
diff --git a/c-luajit/fibonacci.lua b/c-luajit/fibonacci.lua
  
1
-- Naive recursive implementation to increase the time of computation.
  
2
function fibonacci(n)
  
3
    if n == 0 then
  
4
        return 0
  
5
    elseif n == 1 then
  
6
        return 1
  
7
    else
  
8
        return fibonacci(n - 1) + fibonacci(n - 2)
  
9
    end
  
10
end
  
11
  
  
12
local n = 40
  
13
local result = fibonacci(n)
  
14
print("The " .. n .. "th Fibonacci number is: " .. result)
  
15
  
diff --git a/c-luajit/measurements.txt b/c-luajit/measurements.txt
  
1
* Running with just normal Lua
  
2
  
  
3
  $ time lua fibonacci.lua
  
4
  The 40th Fibonacci number is: 102334155
  
5
  
  
6
  real    0m5.601s
  
7
  user    0m5.590s
  
8
  sys     0m0.001s
  
9
  
  
10
* Running with Luajit
  
11
  
  
12
  $ luajit -b fibonacci.lua fibonacci.luac
  
13
  $ time luajit fibonacci.luac
  
14
  The 40th Fibonacci number is: 102334155
  
15
  
  
16
  real    0m1.050s
  
17
  user    0m1.047s
  
18
  sys     0m0.001s
  
19
  
  
20
* Running with Luajit embedded into C
  
21
  
  
22
  $ cc -o fibonacci fibonacci.c `pkg-config --cflags --libs luajit`
  
23
  $ time ./fibonacci
  
24
  The 40th Fibonacci number is: 102334155
  
25
  
  
26
  real    0m1.033s
  
27
  user    0m1.031s
  
28
  sys     0m0.000s