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 internals+get-125059@lists.php.net to get a copy of this message
> On Aug 19, 2024, at 7:37 PM, Rob Landers <rob@bottled.codes> 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

« previous php.internals (#125059) next »