Tips or strategies to understanding how CPython works under the hood
bartc
bc at freeuk.com
Wed Jan 10 07:08:30 EST 2018
On 09/01/2018 20:12, Alain Ketterlin wrote:
> ElChino <elchino at 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
More information about the Python-list
mailing list