<div dir="auto">Parrot got rather further along than rattlesnake as a register based VM. I don't think it every really beat CPython in speed though.<div dir="auto"><br></div><div dir="auto"><a href="http://parrot.org/">http://parrot.org/</a><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 11, 2019, 5:57 PM Neil Schemenauer <<a href="mailto:nas-python@arctrix.com">nas-python@arctrix.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2019-02-27, Victor Stinner wrote:<br>
> The compiler begins with using static single assignment form (SSA) but<br>
> then uses a register allocator to reduce the number of used registers.<br>
> Usually, at the end you have less than 5 registers for a whole<br>
> function.<br>
<br>
In case anyone is interested on working on this, I dug up some<br>
discussion from years ago.  Advice from Tim Peters:<br>
<br>
    [Python-Dev] Rattlesnake progress<br>
    <a href="https://mail.python.org/pipermail/python-dev/2002-February/020172.html" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/pipermail/python-dev/2002-February/020172.html</a><br>
    <a href="https://mail.python.org/pipermail/python-dev/2002-February/020182.html" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/pipermail/python-dev/2002-February/020182.html</a><br>
    <a href="https://mail.python.org/pipermail/python-dev/2002-February/020146.html" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/pipermail/python-dev/2002-February/020146.html</a><br>
<br>
Doing a prototype register-based compiler in Python seems like a<br>
good idea.  Using the 'compiler' package would give you a good<br>
start.  I think this is the most recent version of that package:<br>
<br>
    <a href="https://github.com/pfalcon/python-compiler" rel="noreferrer noreferrer" target="_blank">https://github.com/pfalcon/python-compiler</a><br>
<br>
Based on a little poking around, I think it has not been updated for<br>
the 16-bit word code.  Shouldn't be too hard to make it work though.<br>
<br>
I was thinking about the code format on the weekend.  Using<br>
three-register opcodes seems a good idea.   We could could retain<br>
the 16-bit word code format.  For opcodes that use three registers,<br>
use a second word for the last two registers.  I.e.<br>
<br>
    <8 bit opcode><8 bit register #><br>
    <8 bit register #><8 bit register #><br>
<br>
Limit the number of registers to 256.  If you run out, just push and<br>
pop from stack.  You want to keep the instruction decode path in the<br>
evaluation loop simple and not confuse the CPU branch predictor.<br>
<br>
Regards,<br>
<br>
  Neil<br>
_______________________________________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org" target="_blank" rel="noreferrer">Python-Dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-dev" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-dev</a><br>
Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/mertz%40gnosis.cx" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/options/python-dev/mertz%40gnosis.cx</a><br>
</blockquote></div>