Re: [RFC] Lazy Objects
| From: | Arnaud Le Blanc | Date: | Tue, 02 Jul 2024 15:49:26 +0000 |
| Subject: | Re: [RFC] Lazy Objects | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-124179@lists.php.net to get a copy of this message | ||
Hi Tim,
On Sun, Jun 30, 2024 at 3:54 PM Tim Düsterhus <tim@bastelstu.be> wrote:
> On 6/27/24 16:27, Arnaud Le Blanc wrote:
> >> * flags should be a
> >> F1ϱ‹¹€EO@Kêlist<SomeEnumAroundProxies> instead. A bitmask for
> >> a new API feels unsafe and anachronistic, given the tiny performance hit.
> >>
> >
> > Unfortunately this leads to a 30% slowdown in newLazyGhost() when switching
> > to an array of enums, in a micro benchmark. I'm not sure how this would
> > impact a real application, but given this is a performance critical
>
> 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.
Best Regards,
Arnaud