Hey:

On Wed, Jan 28, 2015 at 11:47 AM, Dmitry Stogov <dmi...@zend.com> wrote:
> Hi,
>
> I have this in mind. May be It's even possible to remove JMP.
>
>     FE_RESET op1=<array> op2=<label 2> result=<var>
>     OP_DATA op1=<iterator> result=<key>
> 1: statements...
>     FE_FETCH op1=<iterator> op2=<label 1> result=<var>
>     OP_DATA result=<key>
> 2:  FREE <iterator>
>
> Anyway, it's not a big problem implementing this, but eliminating of array
> duplication is more important.
> We still have to solve more serious problems first.
>
of course, I just was curious maybe this could give us more
improvement added to that ~1%.

thanks
> Thanks. Dmitry.
>
> On Wed, Jan 28, 2015 at 6:22 AM, Xinchen Hui <xinche...@zend.com> wrote:
>>
>> Hey:
>>
>> On Wed, Jan 28, 2015 at 12:55 AM, Dmitry Stogov <dmi...@zend.com> wrote:
>> > Hi,
>> >
>> > I'm working on a PoC, implementing the proposed behavior -
>> > https://gist.github.com/dstogov/a311e8b0b2cabee4dab4
>> >
>> > Only few PHPT tests had to be changed to confirm new behavior and
>> > actually
>> > they started to behave as HHVM.
>> > 2 tests are still unfixed XFAILed. Foreach by reference is still need to
>> > be
>> > improved to support different array modifications.
>> >
>> > The patch makes ~1% improvement on Wordpress-3.6 (saving duplication and
>> > destruction of 200 arrays on each request)
>>
>> I just have got an idea:
>>
>> Droping use of ZEND_OP_DATA make it possible to generate better
>> foreach loop opcodes
>>
>> previously FE_RESET and FE_FETCH  share one same OP_DATA based on offset.
>>
>> 0 FE_RESET
>> 1 FE_FETCH fail-> 5
>> 2 OP_DATA
>> 3  ..... statements
>> 4 JMP 1
>> 5....
>>
>> without depending on that OP_DATA, we can change this to
>>
>> 0 FE_RESET
>> 1 JMP 3
>> 2 ....statements
>> 3 FE_FETCH success->2
>> 4 ....
>>
>> that will reduce on JMP in every foreach loop
>>
>> could you please also try this?
>>
>> thanks
>>
>> >
>> > Thanks. Dmitry.
>> >
>> >
>> >
>> > On Thu, Jan 22, 2015 at 1:38 PM, Benjamin Coutu <ben.co...@zeyos.com>
>> > wrote:
>> >>
>> >> Hi Nikita,
>> >>
>> >> I would suggest using the proposal for the by-value case and sticking
>> >> with
>> >> the current behavior for the by-reference case as you suggested.
>> >> Granted, we
>> >> then cannot remove the internal pointer all together, but we would just
>> >> use
>> >> it for the less common by-reference case as well as for the legacy
>> >> reset/next functions, of course. This would still improve most for-each
>> >> traversals. At least we then wouldn't have to find a replacement
>> >> solution
>> >> for rest/prev/next/end. Moreover we can then move the internal position
>> >> pointer out of the hashtable structure into zend_array because it is
>> >> only
>> >> used for userland arrays, not other hash tables (such as object
>> >> properties
>> >> or internal structures that build upon the hashtable struct).
>> >>
>> >> Thanks,
>> >>
>> >> Ben
>> >>
>> >> ========== Original ==========
>> >> From: Nikita Popov <nikita....@gmail.com>
>> >> To: Benjamin Coutu <ben.co...@zeyos.com>
>> >> Date: Thu, 22 Jan 2015 10:53:19 +0100
>> >> Subject: Re: [PHP-DEV] Improvements to for-each implementation
>> >>
>> >> Doing this was the idea I had in mind as well, i.e. change the
>> >> semantics
>> >> of
>> >> foreach to say that it will always work on a copy for by-value
>> >> iteration
>> >> (which ironically avoids having to actually copy it). Note that this
>> >> will
>> >> differ from the current behavior in a number of ways. In particular it
>> >> means that changes to arrays that were references prior to iteration
>> >> will
>> >> not influence the iteration.
>> >>
>> >> The real question is what we should do in the by-reference case. Given
>> >> that
>> >> we need to acquire references to elements of the original array we
>> >> can't
>> >> reasonably work with copy-semantics (at least I don't see how). So
>> >> would
>> >> we
>> >> just stick with the previous behavior (using the hash position hack)
>> >> for
>> >> that?
>> >>
>> >> Nikita
>> >>
>> >>
>> >> --
>> >> PHP Internals - PHP Runtime Development Mailing List
>> >> To unsubscribe, visit: http://www.php.net/unsub.php
>> >>
>> >
>>
>>
>>
>> --
>> Xinchen Hui
>> @Laruence
>> http://www.laruence.com/
>
>



-- 
Xinchen Hui
@Laruence
http://www.laruence.com/

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to