On 09/01/2018 20:12, Alain Ketterlin wrote:
ElChino <elch...@cnn.cn> writes:
Chris Angelico wrote:
CPython is a stack-based interpreter, which means it loads values onto
an (invisible) internal stack, processes values at the top of the
stack, and removes them when it's done.
Is this similar to how Lua operates too?
No. Lua uses a register-based (virtual) machine. See
https://www.lua.org/doc/jucs05.pdf
"Registers are kept in the run-time stack ... an array".
So it sounds like a stack is still used, but instructions directly
access specific slots on the stack, within a particular register window.
It means there need be fewer instructions to implement some code, but
each has more operands.
Also interesting is that the comparison operators include only EQ, LT
and LE. There is no NE, so no issues such as those discussed recently.
I think Lua was the first language in widespread use to move to a
register-based machine.
I believe stack-based byte-code, which is very easy to generate, can be
transformed to some 'register'-based version, if performance is the
motivation.
(But I'm not convinced that register-based is necessarily faster. Lua is
quite fast, especially LuaJIT, but the language is also smaller and
simpler.)
--
bartc
--
https://mail.python.org/mailman/listinfo/python-list