Re: Reusing main VM stack for generators

From: Date: Mon, 25 Jan 2016 08:13:21 +0000
Subject: Re: Reusing main VM stack for generators
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-90904@lists.php.net to get a copy of this message
On 01/22/2016 10:29 PM, Bob Weinand wrote:
Am 22.01.2016 um 15:43 schrieb Dmitry Stogov <dmitry@zend.com <mailto:dmitry@zend.com>>: Hi, Could you please, take a look into the PoC. It's incomplete, but may be you get ideas how to fix this. https://gist.github.com/dstogov/285024375d15cacf2a9b Few tests are failed, because YIELD may be used as expression in nested calls (between INIT_FCALL/DO_FCALL), and the caller function restores EG(vm_stack_top), loosing and overwriting that active frame. <?php function gen() {
    var_dump(yield 1);
} for ($gen = gen(); $gen->valid(); $gen->send(0)) {
    var_dump($gen->current());
} ?> Thanks. Dmitry.
Hey, that's pretty similar to what I did https://github.com/php/php-src/commit/0f0471a9893230918084798d4e35db37d7b4519d <https://github.com/php/php-src/compare/master...bwoebi:stackless_generators> in that old patch, which you rejected because we hadn't found any solution for that issue with yield inside calls.
yes, this is similar.
We basically need a way to properly first fetch the args (beware: func_arg fetches...) before instantiating the call frame, an issue which for example could be solved if we applied my vm_stack_restructuring patch (because it only installs call frames after all args were fetched).
I thought about that approach, but the amount of changes doesn't worth the result. Doing this only for generators doesn't make a lot of sense.
I believe this patch won't work without significant refactoring (like vm_stack_refactoring branch) … so, either we bite the bullet and look at that patch again, or we can forget this idea too.
most probably, you are right. Thanks. Dmitry.
Thanks, Bob


« previous php.internals (#90904) next »