Re: [DISCUSS] Should RFCs for new functions include a userland polyfill/reference implementation?
| From: | Tim Düsterhus | Date: | Fri, 04 Sep 2026 18:01:21 +0000 |
| Subject: | Re: [DISCUSS] Should RFCs for new functions include a userland polyfill/reference implementation? | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-132429@lists.php.net to get a copy of this message | ||
Hi
On 9/4/26 16:47, Larry Garfield wrote:
The “almost” does some heavy lifting there, I believe. I disagree that performance should be a contributing factor to whether or not a proposal is good, because performance is a property of the implementation and implementation is not what is being discussed and voted on as part of the RFC process.And that is also independent of whether it’s stdlib or a language feature (such as erased generics, which are fast, but have language design arguments against). Or in short: Performance is a property of the implementation, not a property of the feature.I think we're saying almost the same thing, from different directions. Performance alone is not an argument for a feature, but can be a contributing factor. Performance alone MAY be an argument against a feature, depending on the feature, but there are still many other factors to consider.
knowing the relative performance difference is a useful data point to have I disagree, because it rarely is an apples to apples comparison (bad userland vs good internal implementation and vice versa) and it ignores other possible solutions to fix a performance problem, for example improving the Optimizer to detect specific patterns and to transform them into equivalent, but faster code.Using the featured RFC which proposes a function that effectively just does:
array_filter($values, str_contains(?, 'foo'));as an example, an alternative improvement to investigate would be replacing calls to
array_filter() with PFA by a foreach loop:
$result = [];
foreach ($values as $key => $val) {
if (str_contains($val, 'foo')) $result[$key] = $val;
}
similarly to the array_map() transform that is already included in PHP 8.6.
Best regards
Tim Düsterhus