Hi internals,

One idea I had that was related to this (but not in the scope of this RFC)
would be adding a way to force the interpreter to treat an argument (variable, 
array field, property access, etc) as being passed by value,
and refuse to modify it by reference (e.g. emit a notice and create a separate 
reference (or throw an Error))

i.e. instead of using the opcode SEND_VAR_EX, use a brand new opcode kind 
SEND_VAR_BY_VALUE that would do that, if the method signature was unknown.

- Currently, php emits a notice and creates a temporary reference for 
non-variables, such as when passing the result of a function returning a 
non-reference to a reference parameter.
- I assume SEND_VAR_BY_VALUE is equivalent to the new opcode needed if a 
subsequent RFC made call-site pass-by-reference mandatory in a given file.

Possible syntaxes (only within argument lists):

```
$a->someMethod(*$foo);
$a->someMethod(&&$foo);
$a->someMethod(\$foo);
$a->someMethod(identity($foo));  // add a new keyword such as identity or value
$a->someMethod(=$foo);
```

Context: From the current thread's RFC 
https://wiki.php.net/rfc/explicit_send_by_ref

> In fact, our inability to determine at compile-time whether a certain 
> argument is passed by-value or by-reference is one of the most significant 
> obstacles in our ability to analyze and optimize compiled code

I suggested this because it would be useful for optimizing frequently used code 
(after profiling it (e.g. with phpspy) and checking opcache debug output),
especially in frequently called functions/methods.

I'd prefer a declare directive (or edition) to make call-site pass-by-reference 
mandatory to pass by reference over this suggestion, though.

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

Reply via email to