On Tue, Sep 15, 2020 at 9:51 AM Benas IML <benas.molis....@gmail.com> wrote:

> Ah, sorry! Misread your post. Anyways, the compiler doesn't transform
> `\array_keys()` yet, so there's no optimization for that.
>
> As for other compiler optimizations, 2 that I know that the compiler does
> is:
>
> 1. Binary OP evaluation i. e. `2 * 2` does not yield `ZEND_ADD` opcode but
> is instead computed by the compiler directly.
>
> 2. There are special functions that have their own opcodes. You can learn
> more about those here:
>
> https://phpinternals.net/articles/optimising_internal_functions_via_new_opcode_instructions
>

That's a good starting point, thanks.




>
> Best regards,
> Benas
>
> On Tue, Sep 15, 2020, 4:44 PM Chase Peeler <chasepee...@gmail.com> wrote:
>
>> I wasn't proposing that my example be supported. I'm totally okay with
>> the fact that it doesn't. My question was about whether or not those kinds
>> of optimizations are documented anywhere so that developers can make sure
>> they don't miss out on them by not fitting the proper pattern.
>>
>> On Tue, Sep 15, 2020 at 9:40 AM Benas IML <benas.molis....@gmail.com>
>> wrote:
>>
>>> Hey,
>>>
>>> During my free time, I'm implementing that specific `array_keys`
>>> optimization. I'm not planning on supporting cases like yours (i. e.
>>> indirection through a variable) since there's no point in doing that. And
>>> also, it's not feasible to support every use case. Should we also support
>>> cases like this?
>>>
>>> ```php
>>> $a = 'array_keys';
>>> $b = $a(...);
>>> $c = 'b';
>>>
>>> foreach ($$c as $key) {
>>>     ...
>>> }
>>> ```
>>>
>>> Obviously not. `\array_keys` optimization will work the same way as an
>>> optimized `strlen` function works.
>>>
>>> That means that the optimization is only going to be applied if the
>>> `array_keys` function is used directly in the `foreach` loop and only if a)
>>> either the namespace is global b) or `\array_keys(...)`/`use function
>>> array_keys` is used.
>>>
>>>
>>> Best regards,
>>> Benas
>>>
>>> On Tue, Sep 15, 2020, 4:23 PM Chase Peeler <chasepee...@gmail.com>
>>> wrote:
>>>
>>>> I brought this up on another thread, but it wasn't addressed (which is
>>>> fine, since it was somewhat off-topic). I thought it might be
>>>> worth bringing up in its own thread, though.
>>>>
>>>> In the other thread, someone had mentioned the following compiler
>>>> optimization
>>>>
>>>> foreach(\array_keys($arr) as $key) {
>>>>
>>>> and quietly transform that into:
>>>>
>>>> foreach ($arr as $key =>
>>>> $_unusedVariableNameThatIsntEvenSpilledToTheScope)
>>>> {
>>>>
>>>> I would be more likely to write:
>>>>   $keys = array_keys($arr);
>>>>   foreach($keys as $key){
>>>> Which would prevent me from being able to take advantage of the
>>>> optimization.
>>>>
>>>> So, what I was wondering, is if there are other optimizations I might be
>>>> missing out on, and if so, are they documented anywhere?
>>>>
>>>>
>>>> --
>>>> Chase Peeler
>>>> chasepee...@gmail.com
>>>>
>>>
>>
>> --
>> Chase Peeler
>> chasepee...@gmail.com
>>
>

-- 
Chase Peeler
chasepee...@gmail.com

Reply via email to