> 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