Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Agenda for subgroup meeting - June 2, 2020 #89

Closed
binji opened this issue May 18, 2020 · 15 comments
Closed

Agenda for subgroup meeting - June 2, 2020 #89

binji opened this issue May 18, 2020 · 15 comments
Labels

Comments

@binji
Copy link
Member

binji commented May 18, 2020

We will have our first subgroup meeting on June 2, 2020 at 9am PDT (6pm CET). As with other Wasm meetings, we'll host this on zoom. If you would like to attend, please fill out this form.

Please respond to this issue with topics for the agenda.

@RossTate
Copy link
Contributor

Here's an idea for a discussion topic, but I'd want to know if people are interested. I was chatting with @steveblackburn about the various challenges and constraints with helping linear-memory memory managers cooperate (asynchronously) with host memory managers. We had some ideas, and got a good sense of what the real problematic cases look like, but it would help to get a sense from y'all of what the various patterns look like concretely rather than just abstractly. Unfortunately, Steve won't be able to make the meeting due to the timezone differences (he's in Australia), but I'll do my best to collect notes for him. Does that seem like a useful topic?

@titzer
Copy link
Contributor

titzer commented May 26, 2020

This is a useful topic. I'm in the same time zone as Steve. His office is 20 feet away. Office....ah, those were the days, two months ago....

Yes, I would like to discuss this issue.

@jakobkummerow
Copy link
Contributor

From a timeline/priorities point of view, I would appreciate it if this subgroup's initial focus was on finding consensus on a first version ("MVP") of GC support for Wasm, or in other words: what needs to happen so that https://github.com/WebAssembly/gc/blob/master/proposals/gc/MVP.md can move along the phases process and become a standard:

  • do we simply need more discussions / explanations to address doubts and concerns?
  • do we need more clarity / elaboration on plans and visions for post-MVP additions? Can we, maybe, find agreement on a fairly minimal MVP if we at the same time agree on a specific "to-do" list for future additions to seriously look into? Would items on such a list already need to include rough outlines on how they will interface/interact with the foundations laid in the MVP?
  • do we need to cut scope, or to expand scope, or both, to ensure that the "MVP" feature set fits that name?
  • do we need any fundamental changes in the design of the overall approach, or of individual features?
  • as a variant of the above, do we need to spend some time exploring alternatives, even if we expect to eventually rule them out as "not better" (and document the reasons), just so we're sure we haven't overlooked any compelling alternatives? (To what extent would this be different from what's already happened since this proposal was created ~3 years ago?)
  • how do we answer the several open questions, including (in no particular order):
    • include runtime types (in their current form, or not at all, or differently)?
    • include i31ref (now, or later, or never)? As a generalization of this, what are the principles for finding the right balance between (1) Wasm-side expressiveness and flexibility of managed objects, (2) Wasm-side ease of use and conciseness, (3) implementation simplicity, (4) freedom of implementation choices, and (5) implementation optimization potential?
    • structural or nominal typing or both? (e.g. structural semantics for static types and nominal semantics for runtime types)
    • probably a dozen other open questions that I'll skip here because this post is already too long

In this framing, I'm not sure how y'all are thinking about the topic @RossTate suggested above. Do you see it as a fundamental question that must be answered before we can agree to move ahead with a non-linear-memory GC proposal? If so, by all means, let's have that discussion and get that clarity one way or the other. Or do you see it as an interesting beyond-MVP exploration? If so, I would humbly suggest to postpone it until after we've brought the MVP closer to finalization.

As a specific first step, I would suggest that any relevant conversations that may have happened in smaller rounds report their outcomes to the wider group. That could happen in the Zoom meeting, or in the form of PRs and issues filed at any time.

Maybe it would also be useful to collectively assemble a (more authoritative than my sketch above) list of things that will need to be addressed/decided in order to make progress on the/a proposal, so that we know where we stand?

@RossTate
Copy link
Contributor

That's a reasonable request. There were a few reasons I suggested the above topic:

  1. It's not contentious (I believe), so given that this is our first subgroup meeting I thought it might set up a better group dynamic.
  2. One of the requests for the charter was to incorporate consideration of linear-memory garbage collection, so this sets up an inclusive environment for those concerns.
  3. Depending on what the details of the problem looks like, one potential solution involves some variant of finalizers, and it would be useful to know if such a feature should be considered MVP.
  4. There are some ongoing discussions that affect the bigger issues above, such as the ones in Type Imports, so it would be useful to have more progress on those first.

That last item connects to your suggestion of listing items, which I think is a good suggestion. Were you suggesting doing that here or at the meeting?

@jakobkummerow
Copy link
Contributor

Were you suggesting doing that here or at the meeting?

I was thinking it might fit in well as a meeting agenda item, but we can certainly also do it here if folks prefer. Or maybe we don't need a new list, and this issue tracker should just be the list? 54 open issues, many of which haven't been updated in a year or more, could do with some curating then though.

@binji
Copy link
Member Author

binji commented May 27, 2020

I agree with @jakobkummerow that our first meeting should focus on getting the subgroup up-to-speed with the disparate developments in this space. So I think for the first meeting we should start with a quick round of introductions, then status updates organized by topic.

As for the topics, I think we should list them here and ask one person to present an overview to the group about that topic. We don't have time to cover these comprehensively. But perhaps we could do 5-10 minutes each, starting with summary, pointers to the most recent information, followed by any open questions, and next steps/future work. I imagine we can pretty easily fill up the full hour this way.

Here is a quick list of topics that we may want to cover, feel free to suggest more:

What does everyone think?

@binji
Copy link
Member Author

binji commented May 27, 2020

54 open issues, many of which haven't been updated in a year or more, could do with some curating then though.

Good point, I'll do some triage today.

@Horcrux7
Copy link

Status from various languages/runtimes:

FYI: Java (JWebAssembly project) use currently a polyfill via JavaScript or the SpiderMonkey prototype. If a binary release of WABT with GC is available, I will switch fully to GC. Just my two cents.

@rossberg
Copy link
Member

I can present proposal statuses. Should probably start with the upstream ones, since that's were most of the spec-side action has moved.

@binji
Copy link
Member Author

binji commented May 28, 2020

Thanks, @rossberg. I assume you won't cover the various other GC alternative proposals, right?

Should we try to do status of those too in this meeting? @RossTate @aardappel What do you think?

@jakobkummerow @eqrion An update on the v8/SM prototypes would be useful too, would you be able to present?

@RossTate
Copy link
Contributor

I'm happy to put something together, but would appreciate some more guidance on what y'all would like. Maybe a quick video chat would be good to hash out what you think would work well?

@binji
Copy link
Member Author

binji commented May 28, 2020

@RossTate My thought here is to try to make sure everyone in the group knows what is currently being worked on, since there's a lot going on and it's hard to keep up with all of the discussions. So I was hoping that you could do a short summary of the discussions/designs you've been involved with. Maybe that's too much to cram into one meeting though? But yeah, let's chat offline.

@aardappel
Copy link

@binji I'd be happy to summarize #78 .. I can keep it as short as needed :)

@fgmccabe
Copy link

In the spirit of facilitating a smooth process over the lifetime of this effort, I offer the following thoughts on process:

  • Identify the stakeholders.

When raising a topic, or expressing an opinion, it is useful to be able to identify the stakeholders you are representing. E.g., we need nominal types in order to implement Scheme records (not).

  • Criteria first

Identify criteria before technical solutions. This allows given ideas to be measured against the criteria; as opposed to simple argumentation on the different features of the proposed solution.
E.g., before arguing about how memory structures might make interoperability with JS code impossible, establish that support for multiple GC languages is important; then one can measure the effect on that of memory structures (if any)

  • Are you ‘RoadKill’?

Being roadkill for an idea means that you are sufficiently certain of your case that you are willing to be ‘run over’ by the rest of the group if they disagree with you.

Signalling whether you are roadkill or not can be very helpful to other members of the group. In the given heat of the moment, it can be difficult for others to truly discern your intentions.

  • Put up or shut up.

The most effective way to get agreement for a particular idea is to frame it in terms that amount to a ‘git commit’ to an eventual specification.
For example, instead of complaining about arrays in complex structures, frame your input as a specific modification of a document that has the effect of adding your input. This is after establishing criteria and stakeholders ...

@binji
Copy link
Member Author

binji commented Jun 2, 2020

Notes from today's meeting are here: WebAssembly/meetings#571. Please update them as needed.

@binji binji closed this as completed Jun 2, 2020
rossberg added a commit that referenced this issue Feb 24, 2021
* Upgrade to latest Sphinx release (2.4.4) (#1171)

Fixes #1157

* Support 4GB of memory both in initial and max.

* [interpreter] Strictify and specify .bin.wast format (#1173)

* Merge nontrapping-float-to-int proposal into spec (#1143)

See the non-trapping-float-to-int-conversions proposal here:

https://github.com/WebAssembly/nontrapping-float-to-int-conversions

* Merge sign-extension-ops proposal into spec (#1144)

See the sign-extension-ops proposal here:

https://github.com/WebAssembly/sign-extension-ops

This PR is built on top of #1143 (merge nontrapping-float-to-int).

* Merge multi-value proposal into spec (#1145)

See the multi-value proposal here:

https://github.com/WebAssembly/multi-value

This PR is built on top of the following PRs:

* #1143 (merge nontrapping-float-to-int)
* #1144 (merge sign-extension-ops)

* [interpreter] Remove junk in README

* [interpreter] Remove junk in README

* [spec] Fix grammar for fractions (#1178)

* [spec] Add missing i64.extend32_s syntax (#1179)

* [js-api][web-api] Fix some markup errors.

* Add a README to the proposals directory.

* Add more address overflow tests (#1188)

There are already tests for effective address overflow, but those have a
large value baked into the offset. These tests all use `1` as the
immediate offset, and use `-1` for the address on the stack, which may
be compiled differently.

* Add a test for non-treelike behavior of stack (#961)

We've recently found a bug in a WebAssembly library we've been working
with where we're mapping WebAssembly to a tree-like IR internally. The
way we parse into this representation, however, has a bug when the
function isn't itself tree-like but rather exibits properties that
exploit a stack machine. For example this isn't so straightforward to
represent in a tree-like fashion:

    (import "" "a" (func $foo))
    (import "" "b" (func $foo (result i32)))
    (func (result i32)
      call $b
      call $b
      call $a
      i32.xor)

The extra `call $a` in the middle is valid `WebAssembly` but needs
special treatment when converting to a more tree-like IR format. I
figured it'd be good to ensure there's a spec test covering this case as
we currently pass the suite of spec tests but still contain this bug!

* [js-api] Various editorial improvements.

* [js-api] Replace pseudo-ASCII characters by normal ones.

This also required disambiguating the references to "module", as there are now
two definitions by that name.

* [js-api] Improve prose in 'run a host function'.

* [js-api] Improve some of the multi-value prose.

* Synchronize js-api tests.

* Add script to synchronize js-api tests.

Co-authored-by: Ng Zhi An <[email protected]>
Co-authored-by: Alon Zakai <[email protected]>
Co-authored-by: Ben Smith <[email protected]>
Co-authored-by: Ms2ger <[email protected]>
Co-authored-by: Alex Crichton <[email protected]>
rossberg added a commit that referenced this issue Mar 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

8 participants