Crate wasmer_runtime_fl[][src]

Expand description

Wasmer-runtime is a library that makes embedding WebAssembly in your application easy, efficient, and safe.

How to use Wasmer-Runtime

The easiest way is to use the instantiate function to create an Instance. Then you can use call or func and then call to call an exported function safely.

Here’s an example:

Given this WebAssembly:

(module
  (type $t0 (func (param i32) (result i32)))
  (func $add_one (export "add_one") (type $t0) (param $p0 i32) (result i32)
    get_local $p0
    i32.const 1
    i32.add))

compiled into wasm bytecode, we can call the exported “add_one” function:

static WASM: &'static [u8] = &[
    // The module above compiled to bytecode goes here.
    // ...
];

use wasmer_runtime::{
    instantiate,
    Value,
    imports,
    error,
    Func,
};

fn main() -> error::Result<()> {
    // We're not importing anything, so make an empty import object.
    let import_object = imports! {};

    let mut instance = instantiate(WASM, &import_object)?;

    let add_one: Func<i32, i32> = instance.exports.get("add_one")?;

    let value = add_one.call(42)?;

    assert_eq!(value, 43);

    Ok(())
}

Additional Notes:

wasmer-runtime is built to support multiple compiler backends. Currently, we support the Singlepass, Cranelift, and LLVM compilers with the wasmer-singlepass-backend, wasmer-clif-backend, and wasmer-llvm-backend crates, respectively.

You can specify the compiler you wish to use with the compile_with function or use the default with the compile function.

Modules

The cache module provides the common data structures used by compiler backends to allow serializing compiled wasm code to a binary format. The binary format can be persisted, and loaded to allow skipping compilation and fast startup.

The error module contains the data structures and helper functions used to implement errors that are produced and returned from the wasmer runtime.

The memory module contains the implementation data structures and helper functions used to manipulate and access wasm memory.

Types used in the Wasm runtime and conversion functions.

Various unit types.

Various types exposed by the Wasmer Runtime.

Macros

Helper macro to create a new Func object using the provided function pointer.

Generate an ImportObject safely.

Structs

The Array marker type. This type can be used like WasmPtr<T, Array> to get access to methods

A CodeVersion is a container for a unit of generated code for a module.

Configuration data for the compiler

The context of the currently running WebAssembly instance.

A representation of an exported WebAssembly function.

Controls which experimental features will be enabled. Features usually have a corresponding WebAssembly proposal.

Represents a function that can be used by WebAssembly.

A handle to a Wasm Global

All of the import data used when instantiating.

An instantiated WebAssembly module.

The Item marker type. This is the default and does not usually need to be specified.

A shared or unshared wasm linear memory.

A container for a chain of middlewares.

A compiled WebAssembly module.

A streaming compiler which is designed to generated code for a module based on a stream of wasm parser events.

Container with a descriptor and a reference to a table storage.

A zero-cost type that represents a pointer to something in Wasm linear memory.

Enums

Enum used to select which compiler should be used to generate code.

The code of an exception.

Kind of WebAssembly export.

Represents a WebAssembly value.

Constants

The current version of this crate.

Traits

This trait represents objects that act as a namespace for imports. For example, an Instance or ImportObject could be considered namespaces that could provide imports to an instance.

Functions

Compile WebAssembly binary code into a Module. This function is useful if it is necessary to compile a module before it can be instantiated (otherwise, the instantiate function should be used).

Compile a Module using the provided compiler from WebAssembly binary code. This function is useful if it is necessary to a compile a module before it can be instantiated and must be used if you wish to use a different backend from the default.

The same as compile but takes a CompilerConfig for the purpose of changing the compiler’s behavior

The same as compile_with_config but takes a Compiler for the purpose of changing the backend.

Get the Compiler as a trait object for the given Backend. Returns Option because support for the requested Compiler may not be enabled by feature flags.

Get a single instance of the default compiler to use.

Compile and instantiate WebAssembly code without creating a Module.

Pops a CodeVersion from the current code versions.

Pushes a new CodeVersion to the current code versions.

Perform validation as defined by the WebAssembly specification. Returns true if validation succeeded, false if validation failed.