What are VM kinds for? Are they just a prototyping tool to allow
different implementation strategies to be benchmarked? Or are they
permanent? Does anyone use them?
I ask because I'm working on a VM bug, and non-default VM kinds make
already complex code even more complex and harder to edit.
-- Tim Starling
On Wed, Nov 10, 2021 at 8:13 AM Tim Starling tstarling@wikimedia.org
wrote:
What are VM kinds for? Are they just a prototyping tool to allow
different implementation strategies to be benchmarked? Or are they
permanent? Does anyone use them?I ask because I'm working on a VM bug, and non-default VM kinds make
already complex code even more complex and harder to edit.-- Tim Starling
I don't think anyone uses them, and the GOTO/SWITCH VMs receive little
testing in practice (we don't use them in CI), and I believe they're not
supported by the JIT either. Personally, I would be fine with simply
dropping them, as they do add additional maintenance burden without any
apparent benefit. Maybe Dmitry has some thoughts on this.
Regards,
Nikita
I prefer to keep GOTO and SWITCH VMs. It's easy to drop something, but it's
going to be much more complex to reimplement it again.
Note that HYBRID VM (based on CALL and GOTO VMs) was introduced only in
PHP-7.2, because GOTO was already implemented a long time ago. In the
future, it's possible to extend HYBRID VM, to make it work with
GCC-incompatible compilers through SWITCH. We might also like to move from
direct-threaded to indirect-threaded dispatch.
Thanks. Dmitry.
On Wed, Nov 10, 2021 at 8:13 AM Tim Starling tstarling@wikimedia.org
wrote:What are VM kinds for? Are they just a prototyping tool to allow
different implementation strategies to be benchmarked? Or are they
permanent? Does anyone use them?I ask because I'm working on a VM bug, and non-default VM kinds make
already complex code even more complex and harder to edit.-- Tim Starling
I don't think anyone uses them, and the GOTO/SWITCH VMs receive little
testing in practice (we don't use them in CI), and I believe they're not
supported by the JIT either. Personally, I would be fine with simply
dropping them, as they do add additional maintenance burden without any
apparent benefit. Maybe Dmitry has some thoughts on this.Regards,
Nikita
OK, thanks for the answer.
My PR is up now, with a fixme comment for the GOTO and SWITCH VMs. I'm
still not sure how to make them work.
https://github.com/php/php-src/pull/7642
-- Tim Starling
I prefer to keep GOTO and SWITCH VMs. It's easy to drop something,
but it's going to be much more complex to reimplement it again.Note that HYBRID VM (based on CALL and GOTO VMs) was introduced only
in PHP-7.2, because GOTO was already implemented a long time ago. In
the future, it's possible to extend HYBRID VM, to make it work with
GCC-incompatible compilers through SWITCH. We might also like to
move from direct-threaded to indirect-threaded dispatch.Thanks. Dmitry.
On Wed, Nov 10, 2021 at 11:35 AM Nikita Popov <nikita.ppv@gmail.com
mailto:nikita.ppv@gmail.com> wrote:On Wed, Nov 10, 2021 at 8:13 AM Tim Starling <tstarling@wikimedia.org <mailto:tstarling@wikimedia.org>> wrote: > What are VM kinds for? Are they just a prototyping tool to allow > different implementation strategies to be benchmarked? Or are they > permanent? Does anyone use them? > > I ask because I'm working on a VM bug, and non-default VM kinds make > already complex code even more complex and harder to edit. > > -- Tim Starling > I don't think anyone uses them, and the GOTO/SWITCH VMs receive little testing in practice (we don't use them in CI), and I believe they're not supported by the JIT either. Personally, I would be fine with simply dropping them, as they do add additional maintenance burden without any apparent benefit. Maybe Dmitry has some thoughts on this. Regards, Nikita