Hi
On 7/2/24 17:49, Arnaud Le Blanc wrote:
I'm curious, how did the implementation look like? Is there a proof of
concept commit or patch available somewhere? As the author of the first
internal enum (Random\IntervalBoundary) I had the pleasure of finding
out that there was no trivial way to efficiently match the various enum
cases. See the PR review here:
https://github.com/php/php-src/pull/9679#discussion_r1045943444
I've benchmarked this implementation:
https://github.com/arnaud-lb/php-src/commit/f5f87d8a7abeba2f406407606949e5c6e512baab.
Using a backed enum to have a more direct way to map enum cases to
integers didn't make a significant difference.
Here is the benchmark:
https://gist.github.com/arnaud-lb/76f77b5d7409a9e4deea995c179c6e96.
Caching the options array between calls had a less dramatic slowdown
(around 10%):
https://gist.github.com/arnaud-lb/87e7f58cc11463dd3aa098218eb95a90.
Your Gists don't seem to include the actual numbers, so the second link
is not particularly useful.
However you said that using a backed enum does not improve the
situation, so there probably really is not much that can be done.
For completeness I want to note, though: You might be able to improve
the type checking performance by directly checking the CE instead of
going through `instanceof_function()`, because you know that inheritance
is not a thing for enums. Not sure if this makes much of a difference,
given the fact that `instanceof_function()` already does this and is
force-inlined, but it might remove the branch with the call to
`instanceof_function_slow()`.
Best regards
Tim Düsterhus