Larry,

> Anthony, can you expand here at all about the practical benefits of
> strong-typing for variable passing for the compiler?  That seems to be the
> main point of contention: Whether or not there are real, practical benefits
> to be had in the compiler of knowing that a call will be in "strict mode".
> (If there are, then the split-mode makes sense  If there are not, then
> there's little benefit to it.)

For the normal compiler & engine there will be no benefit for the
foreseeable future.

For a tracing JIT compiler, there will be no advantage.

For a local JIT compiler, there can be some optimizations around
reduced conversion logic generated (and hence potentially better cache
efficiency, etc). A guard would still be generated, but that's a
single branch rather than the full cast logic. This would likely be a
small gain (likely less than 1%, possibly significantly less).

For a AOT compiler (optimizing compiler), more optimizations and
therefore gains can be had. The big difference here is that type
assertions can be done at compile time. So that means one less branch
(no guard) per argument per function call. In addition, native calls
can be used in a lot of cases, which means the compiled code doesn't
even need to know about a zval (significant memory and access
reduction). This has potential to be significant. Not to mention the
other optimizations that are possible.

However, I think making this decision based on performance is the
incorrect way of doing it. For the Zend engine, there will be no
discernible difference between the proposals. It's a red herring. The
difference I would focus on is the ability to statically analyze the
code (with the benefits that comes with).

Anthony

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

Reply via email to