[Pre-RFC] Reified generics

php.internals

Barel

26 days ago
Hi, In this RFC https://wiki.php.net/rfc/bound_erased_generic_types Seifeddine Gmati proposed bound-erased generics for PHP. The RFC did not pass mainly because people thought that, if later on reified generics were added on top of this, there would be BC breaks for code that was not type checked and then started to be type checked. To try to avoid this objection, Rob Landers implemented an experimental reified version of generics on top of Seifeddine's proposal. There was very little discussion about this proposal because Seifeddine put the RFC to vote very soon after Rob sent it. I think that this was a very valid proposal that should have been explored in more detail. What I have tried to do is to bring this proposal forward and make it complete. This is the branch where you can find my implementation (it's based on Rob's branch): https://github.com/carlos-granados/php-src/tree/reify I wrote a document about all the changes and the findings: https://github.com/carlos-granados/php-src/blob/reify/docs/source/core/reify.md Looking forward to your thoughts, comments and suggestions Cheers Carlos

Rob Landers

26 days ago
On Thu, Aug 6, 2026, at 11:00, Barel wrote:
> Hi, > > In this RFC https://wiki.php.net/rfc/bound_erased_generic_types Seifeddine Gmati proposed bound-erased generics for PHP. The RFC did not pass mainly because people thought that, if later on reified generics were added on top of this, there would be BC breaks for code that was not type checked and then started to be type checked. To try to avoid this objection, Rob Landers implemented an experimental reified version of generics on top of Seifeddine's proposal. > > There was very little discussion about this proposal because Seifeddine put the RFC to vote very soon after Rob sent it. I think that this was a very valid proposal that should have been explored in more detail. What I have tried to do is to bring this proposal forward and make it complete. > > This is the branch where you can find my implementation (it's based on Rob's branch): https://github.com/carlos-granados/php-src/tree/reify > > I wrote a document about all the changes and the findings: https://github.com/carlos-granados/php-src/blob/reify/docs/source/core/reify.md > > Looking forward to your thoughts, comments and suggestions > > Cheers > > Carlos
Hi Carlos, You really should have reached out instead of a working in isolation. Join us in discord, the proposal is delayed until September-ish. — Rob

Barel

26 days ago
> > > > Hi Carlos, > > You really should have reached out instead of a working in isolation. Join > us in discord, the proposal is delayed until September-ish. > > — Rob >
I have no idea where that discord is, can you point me to it? Cheers Carlos

Rob Landers

26 days ago
On Thu, Aug 6, 2026, at 11:45, Barel wrote:
>> >> Hi Carlos, >> >> You really should have reached out instead of a working in isolation. Join us in discord, the proposal is delayed until September-ish. >> >> — Rob > > I have no idea where that discord is, can you point me to it? > > Cheers > > Carlos
https://discord.com/channels/356354025865740288/970793312791445514 or https://discord.com/channels/356354025865740288/1507404597571092590 — Rob

Barel

26 days ago
On Thu, 6 Aug 2026 at 11:49, Rob Landers <rob@getswytch.com> wrote:
> > > On Thu, Aug 6, 2026, at 11:45, Barel wrote: > > > Hi Carlos, > > You really should have reached out instead of a working in isolation. Join > us in discord, the proposal is delayed until September-ish. > > — Rob > > > I have no idea where that discord is, can you point me to it? > > Cheers > > Carlos > > > https://discord.com/channels/356354025865740288/970793312791445514 or > https://discord.com/channels/356354025865740288/1507404597571092590 > > — Rob >
Rob, Thanks, it seems that to join a channel I also need to know the server where It lives (I've never used Discord much before). Can you share this info as well? Cheers Carlos

Larry Garfield

26 days ago
On Thu, Aug 6, 2026, at 4:53 AM, Barel wrote:
> Thanks, it seems that to join a channel I also need to know the server > where It lives (I've never used Discord much before). Can you share > this info as well? > > Cheers > > Carlos
https://phpc.chat/ The PHP Community chat is unofficial, but lately it's where the big names are hanging out, including a lot of Internals regulars. Beware, the Internals channel is annoyingly noisy and has a hard time staying on topic. :-) --Larry Garfield

Alexander Lissachenko

22 days ago
Hello, internals! Want to share some proof-of-concept and ideas regarding the Php Generics. I've recreated the memoization generics as a user-land library https://github.com/lisachenko/userland-php-generics, installable as a simple composer package to check the concept itself and see where we have limits now. What I discovered - that a significant part of the core is suitable to define generics *and keep the opcode arrays shared *between all concrete memoized versions with different types: I tried to deep-clone a template's zend_class_entry under a new name and rewrited only the zend_type of its properties, parameters and return types while sharing the compiled method bodies through the engine's own op_array refcount. Thus, cost of a specialization is about sizeof(zend_op_array) per method, independent of how large those methods are, rather than a full copy of the opcodes. Best regards, Alexander чт, 6 авг. 2026 г. в 18:46, Larry Garfield <larry@garfieldtech.com>: