44 releases

0.28.0 Jan 25, 2024
0.27.0 Nov 2, 2023
0.26.1 Mar 21, 2023
0.24.1 Sep 12, 2022
0.17.0 Jul 28, 2020

#123 in WebAssembly

Download history 908/week @ 2024-01-21 728/week @ 2024-01-28 661/week @ 2024-02-04 812/week @ 2024-02-11 2169/week @ 2024-02-18 595/week @ 2024-02-25 694/week @ 2024-03-03 513/week @ 2024-03-10 462/week @ 2024-03-17 397/week @ 2024-03-24 434/week @ 2024-03-31 344/week @ 2024-04-07 406/week @ 2024-04-14 543/week @ 2024-04-21 191/week @ 2024-04-28 225/week @ 2024-05-05

1,415 downloads per month
Used in 36 crates (14 directly)

MIT license

290KB
7K SLoC

This crate contains an implementation of WebAssembly Interface Types (abbreviated WIT). It is composed of 5 parts:

  1. Types and Values: To represent the WIT types and values representations,
  2. AST: To represent the WIT language as a tree (which is not really abstract). This is the central representation of the language.
  3. Decoders: To read the AST from a particular data representation; for instance, decoders::binary::parse reads the AST from a binary.
  4. Encoders: To write the AST into a particular format; for instance, encoders::wat writes the AST into a string representing WIT with its textual format.
  5. Interpreter: WIT defines a concept called Adapters. An adapter contains a set of instructions. So, in more details, this module contains:
    • A very light and generic stack implementation, exposing only the operations required by the interpreter,
    • A stack-based interpreter, defined by:
      • A compiler that transforms a set of instructions into a set of executable instructions,
      • A stack,
      • A runtime that holds the “invocation inputs” (arguments of the interpreter), the stack, and the WebAssembly instance (which holds the exports, the imports, the memories, the tables etc.),
    • An hypothetic WebAssembly runtime, represented as a set of enums, types, and traits —basically this is the part a runtime should take a look to use the wasmer-interface-types crate—.

Dependencies

~3.5–5MB
~99K SLoC