Re: State of Generics and Collections

From: Date: Tue, 20 Aug 2024 00:44:40 +0000
Subject: Re: State of Generics and Collections
References: 1 2  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
> On Aug 19, 2024, at 7:37 PM, Rob Landers <[email protected]> wrote:
> As an experiment, awhile ago, I went a different route for reified generics by
> 'hacking' type aliases (which I was also experimenting with). Such that a generic becomes
> compiled into a concrete implementation with a dangling type alias:
> 
> class Box<T> {
>   function __construct(T $thing) {}
> }
> 
> is essentially compiled to
> 
> class Box {
>   use alias __Box_T => ???;
> 
>   function __construct(__Box_T $thing) {}
> }
> 
> This just gets a T type alias (empty-ish, with a mangled name) that gets filled in during
> runtime (every instance gets its own type alias table, and uses that along with the file alias
> table). There shouldn't be any performance impact this way (or at least, as bad as using type
> aliases, in general; which is also an oft-requested feature).

From what I understand this is essentially how Go implements Generics.  So +1 for considering this
approach.

> FYI though, people seemed really turned off by file-level type aliases (at least exposed to
> user-land, so I never actually pursued it).

Shame. Type aliases are super useful in practice in other languages, with many used for single-file
scope in my experience.

-Mike


Thread (36 messages)

« previous php.internals (#125059) next »