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

Remove the borrow checking from wiggle entirely #8702

Merged

Commits on May 31, 2024

  1. Remove the borrow checking from wiggle entirely

    This commit is a refactoring of the `wiggle` crate which powers the
    `*.witx`-based bindings generation of Wasmtime for wasip1 support.
    Originally `wiggle` had a full-blown runtime borrow checker which
    verified that borrows were disjoint when appropriate. In bytecodealliance#8277 this was
    removed in favor of a more coarse "either all shared or all mutable"
    guarantee. It turns out that this exactly matches what the Rust type
    system guarantees at compile time as well.
    
    This commit removes all runtime borrow checking in favor of compile-time
    borrow checking instead. This means that there is no longer the
    possibility of a runtime error arising from borrowing errors. Current
    bindings in Wasmtime needed no restructuring to work with this new API.
    
    The source of the refactors here are all in the `wiggle` crate. Changes
    include:
    
    * The `GuestPtr` type lost its type parameter. Additionally it only
      contains a `u32` pointer now instead.
    * The `GuestMemory` trait is replaced with a simple `enum` of
      possibilities.
    * Helper methods on `GuestPtr` are all moved to `GuestMemory`.
    * A number of abstractions were simplified now that borrow checking is
      no longer necessary.
    * Generated trait methods now all take `&mut GuestMemory<'_>` as an
      argument.
    
    These changes were then propagated to the `wasmtime-wasi` and
    `wasi-common` crates in their preview0 and preview1 implementations of
    WASI. All changes are just general refactors, no functional change is
    intended here.
    alexcrichton committed May 31, 2024
    Configuration menu
    Copy the full SHA
    1878dd0 View commit details
    Browse the repository at this point in the history
  2. Review comments

    alexcrichton committed May 31, 2024
    Configuration menu
    Copy the full SHA
    0130672 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    a92b42e View commit details
    Browse the repository at this point in the history
  4. Fix wiggle docs

    alexcrichton committed May 31, 2024
    Configuration menu
    Copy the full SHA
    27859af View commit details
    Browse the repository at this point in the history