bytecodealliance / bytecodealliance/component-docs

What changes to WIT are "compatible" and which are not?

未关闭
#335 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Rust
星标
137
派生
88
平均合并
5 天 12 小时
30 天内合并 PR
4

描述

Suppose I have a WIT definition, and some old WebAssembly components built/defined using the old definition, and then I want to make a change to my interface without requiring the component to be modified or rebuilt. Or perhaps I want to do the same in the reverse direction—make a change to my WASM component that remains backward-compatible with a host using an older WIT.

What changes to the WIT could be considered "compatible", if any, and which are not?

In essence, I'm looking for guidance similar to what Protobuf offers in their [Updating a Message Type](https://protobuf.dev/programming-guides/proto3/#updating) documentation.

A few example questions/scenarios I can think of: are the following compatible in one or both directions (old host/new guest vs. new guest/old host)?

1. Removing an argument to a function
2. Adding a new optional argument to a function
3. Adding a new optional field to a struct
4. Removing a field from a struct
5. Adding a new case to a variant
6. Removing a case from a variant

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。