Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Minimal delta for evaluating nominal types #234

Closed
@titzer

Description

@titzer

After much reflection, and after many offline discussions with people involved here, I think the best way forward to start undoing the schism between structural and nominal types is to gather empirical data with a true apples-to-apples comparison.

I think we should work together, here, in this issue, to define the minimal extension to the Wasm GC MVP, which currently has equi-recursive structural types, to add a nominal types mechanism. Note, by minimal, I mean, the tiniest possible addition, not a radical design change or throwing away what we have. We need to keep forward momentum and not circle back.

As I mentioned in #232 (comment), our technical discussions have a tendency to either go off the rails or get dragged into the same divisive grooves. At times they have actually been negative progress. In contrast, the positive developments we have enjoyed recently have all be centered around implementing things and trying them out, both in the reference interpreter, tools, engines, and with languages targeting the current proposal.

There are many perspectives on what this means, but most importantly I believe doing this will turn schism-like discussions into empirically-evaluable programs to be written. The mode of argument can be code that can be typechecked and run. Fewer discussions about hypothetical alternatives. Performance costs can be quantified, tools can be adjusted, languages targeted differently. Doing things together in the same reference interpreter, engines, with the same text and binary format, even if that is literally (the smallest possible) union of two seemingly different ways of doing the same thing, makes it possible to have the clearest and fairest comparison. I think that would be hugely healthy for our collaboration for us all to work together on this path forward.

Let's please also do this without committing to a particular outcome, though we might have strong opinions on what that might be. For example. if it does turn out in the end that we need to ship the "union", then I say, in all seriousness, so be it. If it turns out that that we can't ship structural types, then so be it. If we can't ship nominal types, so be it. That means that we probably might end up ripping out one or the other...and, again, so be it. At least we'll have the work done, and we will have arrived at that decision via a chain of trial and error and not exasperated submission (which unfortunately, seems to be the only outcome of protracted technical digression could ever produce). I think this path is the most efficient, fairest, and respectful way to get not only useful data, but an almost-done system we can ship with confidence.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions