Re: GOTO operator
| From: | Robert Cummings | Date: | Thu, 29 Jul 2004 15:36:43 +0000 |
| Subject: | Re: GOTO operator | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-11619@lists.php.net to get a copy of this message | ||
On Thu, 2004-07-29 at 11:04, Sara Golemon wrote:
> > Note
> > ----
> > Goto jumping is O(1) if getting to the jump destination doesn't require
> > a hash lookup due to "wuring" of the destination at compile time. If a
> > hash lookup is required then it is probably something like O(lg n) which
> > is still superior in efficiency to O(n). Additionally, while it is true
> > that an O(lg n) lookup might be necessary at compile time to find the
> > pointer to the labeled code block, this is a one time event and has
> > little bearing on the efficiency overall when during runtime the goto
> > might be hit thousands or millions of times.
> >
> *this* implementation of GOTO requires a hash lookup, however it could be
> reworked to use the same backpatching as the ZEND_JMP ops used with
> conditional statements. While doing that would speed execution time by
> skipping the hash lookup, it'd slow compile time and remove the ability to
> use complex expressions as goto targets (i.e. goto "foo$i"; ).
I'm not sure whether this is feasible or not, but perhaps a mix of
compile-time/runtime logic is possible. If the argument of the goto is a
literal then a compile-time jump hook is created, otherwise the argument
is evaluated at run-time. This would provide the best of both worlds,
but as I said I have no idea as to its feasibility.
Cheers,
Rob.
--
.------------------------------------------------------------.
| InterJinn Application Framework - http://www.interjinn.com
|
:------------------------------------------------------------:
| An application and templating framework for PHP. Boasting |
| a powerful, scalable system for accessing system services |
| such as forms, properties, sessions, and caches. InterJinn |
| also provides an extremely flexible architecture for |
| creating re-usable components quickly and easily. |
`------------------------------------------------------------'