Re: [RFC] Lazy Objects

From: 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

« previous php.internals (#124179) next »