0.2.0
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 thefunc!
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
- Published
wasmer-emscripten
0.2.0 crate - Published
wasmer-runtime
0.2.0 crate - Published
wasmer-clif-backend
0.2.0 crate