Re: [PHP-DEV] Compiled variables and backpatching

2007-09-26 Thread Stanislav Malyshev

OK, so its a bit of caching. So it sounds like it stores a pointer
into the symbol table, so that if $a is redefined it will still be
correct. What happens if the symbol table must be rehashed? Does it
still work, or does it look it up again?


I think rehashing doesn't matter since hash table has pointers, not 
actual zvals, and so does CV - so rehashing just moved pointers around, 
and actual zvals still reside in the same place.



Is there a single CV for each $a in a scope, or is there one per
bytecode operand? In other words, in a function which uses $a a lot,
does it look it up for each bytecode which uses $a, or only once for
that function?


Each name has own CV, so that every time you say $a in same op-array it 
would be same CV. CVs are local per op-array - $a in two different 
op-arrays are different CVs, and local per function run - i.e. if the 
same function is run twice, $a has the same CV but values in this CV 
would be different, so you need one lookup each run.


So if the function uses $a a lot, CVs would save all lookups except the 
very first one in each function run.

--
Stanislav Malyshev, Zend Software Architect
[EMAIL PROTECTED]   http://www.zend.com/
(408)253-8829   MSN: [EMAIL PROTECTED]

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



Re: [PHP-DEV] Compiled variables and backpatching

2007-09-23 Thread Paul Biggar
On 9/23/07, Stanislav Malyshev <[EMAIL PROTECTED]> wrote:
> > What is a compiled variable?
> > How does it differ from a non-compiled-variable?
>
> When engine encounters variable like $a what it usually does is it looks
> up current symbol table for an entry named 'a', and then takes zval*
> sitting there. However, since during the same scope the entry for $a
> will be the same (though not a value sitting there!), once found in can
> be stored so future calls to $a will not require looking up in the hash
> table. That's what CVs do. The reason, of course, is performance :)

OK, so its a bit of caching. So it sounds like it stores a pointer
into the symbol table, so that if $a is redefined it will still be
correct. What happens if the symbol table must be rehashed? Does it
still work, or does it look it up again?

Is there a single CV for each $a in a scope, or is there one per
bytecode operand? In other words, in a function which uses $a a lot,
does it look it up for each bytecode which uses $a, or only once for
that function?


Thanks for the quick response,
Paul


-- 
Paul Biggar
[EMAIL PROTECTED]

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



Re: [PHP-DEV] Compiled variables and backpatching

2007-09-23 Thread Stanislav Malyshev

What is a compiled variable?
How does it differ from a non-compiled-variable?


When engine encounters variable like $a what it usually does is it looks 
up current symbol table for an entry named 'a', and then takes zval* 
sitting there. However, since during the same scope the entry for $a 
will be the same (though not a value sitting there!), once found in can 
be stored so future calls to $a will not require looking up in the hash 
table. That's what CVs do. The reason, of course, is performance :)


--
Stanislav Malyshev, Zend Software Architect
[EMAIL PROTECTED]   http://www.zend.com/
(408)253-8829   MSN: [EMAIL PROTECTED]

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



[PHP-DEV] Compiled variables and backpatching

2007-09-23 Thread Paul Biggar
Hi,

I'd be very interested to have an overview of compiled variable and
backpatching within the interpreter. I can find plenty of emails and
code that refers to the two topics, but none that defines them. If
there is an overview somewhere, could somebody point me to it?

If not, I have a few questions. Answers of any length are appreciated.

What is a compiled variable?
How does it differ from a non-compiled-variable?
Why were they introduced?
I presume that this is for performance - what performance impact do they have?

What is backpatching?
Is it related to compiled variables, or are they different concepts?
Why was backpatching necessary?
Is this performance related, and what performance impact does backpatching have?


Thanks in advance,
Paul

-- 
Paul Biggar
[EMAIL PROTECTED]

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