-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Remove the need to have a Store
for an InstancePre
#5683
Remove the need to have a Store
for an InstancePre
#5683
Conversation
This commit relaxes a requirement of the `InstancePre` API, notably its construction via `Linker::instantiate_pre`. Previously this function required a `Store<T>` to be present to be able to perform type-checking on the contents of the linker, and now this requirement has been removed. Items stored within a linker are either a `HostFunc`, which has type information inside of it, or an `Extern`, which doesn't have type information inside of it. Due to the usage of `Extern` this is why a `Store` was required during the `InstancePre` construction process, it's used to extract the type of an `Extern`. This commit implements a solution where the type information of an `Extern` is stored alongside the `Extern` itself, meaning that the `InstancePre` construction process no longer requires a `Store<T>`. One caveat of this implementation is that some items, such as tables and memories, technically have a "dynamic type" where during type checking their current size is consulted to match against the minimum size required of an import. This no longer works when using `Linker::instantiate_pre` as the current size used is the one when it was inserted into the linker rather than the one available at instantiation time. It's hoped, however, that this is a relatively esoteric use case that doesn't impact many real-world users. Additionally note that this is an API-breaking change. Not only is the `Store` argument removed from `Linker::instantiate_pre`, but some other methods such as `Linker::define` grew a `Store` argument as the type needs to be extracted when an item is inserted into a linker. Closes bytecodealliance#5675
Subscribe to Label Actioncc @fitzgen, @peterhuene
This issue or pull request has been labeled: "fuzzing", "wasmtime:api"
Thus the following users have been cc'd because of the following labels:
To subscribe or unsubscribe from this label, edit the |
Subscribe to Label Actioncc @peterhuene
This issue or pull request has been labeled: "wasmtime:c-api"
Thus the following users have been cc'd because of the following labels:
To subscribe or unsubscribe from this label, edit the |
Co-authored-by: Andrew Brown <andrew.brown@intel.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome! Requiring a store to Linker::define any externs makes sense, and I don't expect it will break any users.
This includes a breaking change, following bytecodealliance/wasmtime#5683. `Wasmtime::Linker#define` now takes a store as a first argument.
This includes a breaking change, following bytecodealliance/wasmtime#5683. `Wasmtime::Linker#define` now takes a store as a first argument.
The `store` param was removed in bytecodealliance#5683
The `store` param was removed in #5683
This commit relaxes a requirement of the
InstancePre
API, notably its construction viaLinker::instantiate_pre
. Previously this function required aStore<T>
to be present to be able to perform type-checking on the contents of the linker, and now this requirement has been removed.Items stored within a linker are either a
HostFunc
, which has type information inside of it, or anExtern
, which doesn't have type information inside of it. Due to the usage ofExtern
this is why aStore
was required during theInstancePre
construction process, it's used to extract the type of anExtern
. This commit implements a solution where the type information of anExtern
is stored alongside theExtern
itself, meaning that theInstancePre
construction process no longer requires aStore<T>
.One caveat of this implementation is that some items, such as tables and memories, technically have a "dynamic type" where during type checking their current size is consulted to match against the minimum size required of an import. This no longer works when using
Linker::instantiate_pre
as the current size used is the one when it was inserted into the linker rather than the one available at instantiation time. It's hoped, however, that this is a relatively esoteric use case that doesn't impact many real-world users.Additionally note that this is an API-breaking change. Not only is the
Store
argument removed fromLinker::instantiate_pre
, but some other methods such asLinker::define
grew aStore
argument as the type needs to be extracted when an item is inserted into a linker.Closes #5675