Re: The case for transpiled generics
| From: | Rowan Tommins | Date: | Fri, 18 Sep 2020 13:38:23 +0000 |
| Subject: | Re: The case for transpiled generics | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-111904@lists.php.net to get a copy of this message | ||
On Thu, 17 Sep 2020 at 20:25, Levi Morrison via internals <
internals@lists.php.net> wrote:
>
> In summary:
> - Checked at run-time (and probably also compile-time when possible):
> reified generics.
> - Checked only at compile-time and thrown away at run-time: erased
> generics.
> - Not checked at all: ____?. Maybe we can call them "ignored generics"?
>
I think this is making the common assumption that "official" static
analysis and compilation are necessarily the same process, but the compiler
itself only needs to "understand" enough to choose a target representation;
running other analysis at the same time is just a choice for programmer
convenience.
My understanding is that in reality there are three stages:
1) Static analysis: checks may be made whether erasing or reifying, because
erasure hasn't happened yet.
2) Compilation: erased generics are converted to non-generic types; reified
generics are compiled to a representation available at run-time
3) Run-time: reified generics have run-time behaviour; erased generics
aren't ignored, they simply don't exist because the compiler already erased
them
In PHP, we currently have a compile step, run on-demand, but do not have an
official static analysis step. I have said before that in order to make the
type system richer without sacrificing run-time performance, we need to
consider having such an official tool. That could be run automatically
alongside the existing on-demand compilation; it could be entirely manual
as a separate tool; or it could be combined with a new, manually executed
compiler or transpiler. I believe there is precedent for all of these
approaches.
Regards,
--
Rowan Tommins
[IMSoP]