Skip to content

0.2.0

Compare
Choose a tag to compare
@syrusakbary syrusakbary released this 25 Feb 22:01

The version 0.2.0 moves the WebAssembly wasmer runtime forward making it more stable, with a more mature API and preparing the software to be ready in production environments.
It also accelerates the startup time when running a WebAssembly module by an order of magnitude.

This version also ships with experimental Windows support (all WebAssembly spectests pass, emscripting bindings are on the works).

Changelog

  • Completely refactored our codebase, moving the runtime, Cranelift backend and emscripten into it's own isolated libs #80
  • Added Cache #134 #198 #200, so WebAssembly compiled modules can be loaded much faster (100x speedup on compile time)
  • Added integration tests #109 #91
  • Improved support for Windows #51 #94 #143 #144 #138 #175
  • Improved function signature checks #155
  • Improved imports API #120 #130
  • Naive short circuiting implementation for user panics and results #167
  • Improved traps support #103
  • Use parallel compilation for cranelift backend #209
  • Improved debug #61 #67 #129 #204
  • Added benchmark runner #201

Breaking changes

The breaking changes affect mainly to other libraries that were depending in any of the crates for embedding Wasmer in their systems.
You can check an example PR with all the changes included here: https://github.com/wasmerio/wasmer-rust-example/pull/5/files

Summary:

  • Now the imported functions take Ctx as first argument instead of the last one #171
// Previous (0.1.x)
fn print_num(n: i32, ctx: &mut vm::Ctx) {
    println!("print_num({})", n);
}

// Now (>= 0.2.0)
fn print_num(ctx: &mut vm::Ctx, n: i32) {
    println!("print_num({})", n);
}
  • The imported function in imports! should use now the func! macro.
// Previous (0.1.x)
let import_object = imports! {
    "env" => {
        "print_num" => print_num<[i32] -> []>,
    },
};

// Now (>= 0.2.0)
let import_object = imports! {
    "env" => {
        // The func! macro will automatically detect the signature
        "print_num" => func!(print_num),
    },
};
  • Access to memory slices is now safe
// Previous (0.1.x)
let memory = ctx.memory(0);
let str_slice = &memory[ptr as usize..(ptr + len) as usize];


// Now (>= 0.2.0)
let memory = ctx.memory(0);
let str_slice: Vec<_> = memory.view()[ptr as usize..(ptr + len) as usize].iter().map(|cell| cell.get()).collect();

Other