Raybench - Lua (Programming Languages Comparison pt.3)

Going for the low hanging fruit...

For this and the following two or three posts, I'll be taking on programming languages that I already know; this time, Lua.

Lua is a dynamic language with an easy syntax, similar to pseudocode; functions are first class citizens and it is very easy to embed into larger programs.

One big point in favor is that its more common interpreters: luajit and the regular lua interpreter, are very fast when loading, and have a very small footprint. Also, both are available in a wide range of platforms.


Two interpreters where used to measure Lua performance: lua 5.2.3 and luajit 2.0.2

Loading time

Lua being an interpreted language has no compilation phase, compared to languages like C or Haskell. The following are the timings for how long the interpreter takes to load the code and parse it. For this, I simply commented out the last line to avoid triggering the rendering.

$ time lua luarb.lua 

real    0m0.092s  
user    0m0.000s  
sys     0m0.000s  
$ time luajit luarb.lua 

real    0m0.063s  
user    0m0.000s  
sys     0m0.000s  

Loading times are blazing fast.

Running time

$ time lua luarb.lua 

real    611m38.925s  
user    605m54.136s  
sys     0m37.716s  
$time luajit luarb.lua 

real    225m58.621s  
user    224m2.140s  
sys     0m14.044s  

As can be seen, luajit is almost 3x as fast as the regular lua interpreter, but both lag way behind the 2 minutes mark from C.

Code metrics

Line count: 283 code, 103 blanks, 386 total.
File size: 6685 bytes

General Thoughts

Lua has a very simple syntax that reminds me of BASIC, it's easy to read, variable types are dynamic and functions can be passed around. I have used it as a scripting language in some other projects with no problem, the interpreter is very easy to embed.

Too bad it's very slow while running, although it's not meant to be used for high performance computing, it is a bit of a let down. Code is just a bit more compact than C, but has an abysmal performance.


You can follow the development of this project on GitHub: