|
|
|
|
|
by jashmatthews
2071 days ago
|
|
Lua doesn’t have assignment as an expression. Lua 5.1 has float as the only numeric type. Lua varargs are easier to implement. Each VM op for Python or Ruby ends up being bigger and having more branches. For Ruby this is quite painful on the numeric types. Branching, boxing and unboxing is far slower than just testing and adding floats in the LuaJIT VM. Due assignment as an expression and things like x = foo(x, x+=1) Ruby, Python and JS all need to copy x into a new VM Register when it’s used. LuaJIT can assume locals aren’t reassigned mid statement and doesn’t need copies. |
|
That's quite easy to achieve if you directly generate bytecode. See e.g. https://github.com/rochus-keller/som.
> Lua 5.1 has float as the only numeric type
It internaly differs between int and float.
> Ruby, Python and JS all need to copy x into a new VM Register when it’s used
Even the OpenSmalltalk VM is much faster than CPython, as well as V8.