Skip to content

Latest commit

 

History

History
237 lines (173 loc) · 9.61 KB

CHANGELOG.md

File metadata and controls

237 lines (173 loc) · 9.61 KB

Changelog

All notable changes to this project will be documented in this file.

The format is loosely based on Keep a Changelog, and this project adheres to Semantic Versioning. Additionally we have an Internal section for changes that are of interest to developers.

[0.16.0] - 2022-08-30

Changed

  • Update wasmparser-nostd dependency from version 0.83.0 -> 0.90.0. Link:
    • This significantly improved wasmi's Wasm parsing, validation and Wasm to wasmi bytecode translation performance.

Internal

  • Transition to the new wasmparser::VisitOperator API. Link
    • This again significantly improved wasmi's Wasm parsing, validation and Wasm to wasmi bytecode translation performance by avoiding many unnecessary unpredictable branches in the process.

[0.15.0] - 2022-08-22

Fixed

  • Fixed bugs found during fuzzing the translation phase of wasmi. Link
  • Fix Read trait implementation for no_std compilations. Link

Changed

  • Update to wasmi_core version 0.3.0.
  • Changed API of wasmi::Config in order to better reflect the API of wasmtime::Config.
  • Refactor Trap type to be of pointer size which resulted in significant performance wins across the board especially for call intense work loads. Link

Removed

  • Removed support for virtual memory based Wasm linear memory. We decided to remove support since benchmarks showed that our current implementation actually regresses performance compared to our naive Vec based implementation. Link

Internal

  • The wasmi::Engine now caches the bytes of the default linear memory for performance wins in memory.store and memory.load intense work loads. Link
  • The wasmi engine internals have been reorganized and modernised to improve performance on function call intense work loads. This resulted in performance improvements across the board. Link
  • The Wasm to wasmi bytecode translation now properly reuses heap allocations across function translation units which improved translation performance by roughly 10%. Link
  • Optimized the wasmi engine Wasm value stack implementation for significant performance wins across the board. Link
  • Shrunk size of some internal identifier types for minor performance wins. Link
  • Added initial naive fuzz testing for Wasm parsing, validation and Wasm to wasmi bytecode translation. Link

[0.14.0] - 2022-07-26

Added

Changed

  • Wasmi has been entirely redesigned and reimplemented. This work resulted in an entirely new API that is heavily inspired by the Wasmtime API, a brand new Wasm execution engine that performs roughly 30-40% better than the previous engine according to our benchmarks, the support of many Wasm proposals and Wasm parsing and validation using the battle tested wasmparser crate by the BytecodeAlliance.

    The new wasmi design allows to reuse the Wasm execution engine resources instead of spinning up a new Wasm execution engine for every function call.

    Note: If you plan to use wasmi it is of critical importance to compile wasmi using the following Cargo profile settings:

    [profile.release]
    lto = "fat"
    codegen-units = 1

    If you do not use these profile settings you might risk regressing performance of wasmi by up to 400%. You can read more about this issue here.

Removed

  • Removed support for resuming function execution. We may consider to add this feature back into the new engine. If you are a user of wasmi and want this feature please feel free to open an issue and provide us with your use case.

[0.13.0] - 2022-07-25

Note: This is the last release using the legacy wasmi engine. Future releases are using the new Wasm execution engines that are currently in development. We may consider to publish new versions of this Wasm engine as wasmi-legacy crate.

Changed

  • Update dependency: wasmi-validation v0.4.2 -> v0.5.0

[0.12.0] - 2022-07-24

Changed

  • wasmi now depends on the wasmi_core crate.
  • Deprecated RuntimeValue::decode_{f32,f64} methods.
    • Reason: These methods expose details about the F32 and F64 types. The RuntimeValue type provides from_bits methods for similar purposes.
    • Replacement: Replace those deprecated methods with F{32,64}::from_bits().into() respectively.
  • Refactor traps in wasmi: PR
    • This change also renames TrapKind to TrapCode.
    • The wasmi crate now properly reuses the TrapCode definitions from the wasmi_core crate.
  • Updated dependency:
    • parity-wasm v0.42 -> v0.45
    • memory_units v0.3.0 -> v0.4.0

Internal

  • Rename RuntimeValue to Value internally.
  • Now uses wat crate dependency instead of wabt for reading .wat files in tests.
  • Updated dev-dependencies:
    • assert_matches: v1.1 -> v1.5
    • rand 0.4.2 -> 0.8.2
  • Fix some clippy warnings.

[0.11.0] - 2022-01-06

Fixed

  • Make wasmi traps more conformant with the Wasm specification. (wasmi-labs#300)
  • Fixed a bug in {f32, f64}_copysign implementations. (wasmi-labs#293)
  • Fixed a bug in {f32, f64}_{min, max} implementations. (wasmi-labs#295)

Changed

  • Optimized Wasm to host calls. (wasmi-labs#291)
    • In some artificial benchmarks we saw improvements of up to 42%!
  • Introduce a more efficient LittleEndianConvert trait. (wasmi-labs#290)

Internal

  • Refactor and clean up benchmarking code and added more benchmarks.
  • Apply some clippy suggestions with respect ot #[must_use]. (wasmi-labs#288)
  • Improve Rust code formatting of imports.
  • Improve debug impl of ValueStack so that only the live parts are printed.

[0.10.0] - 2021-12-14

Added

Changed

  • The wasmi and wasmi-validation crates now both use Rust edition 2021.
  • The README now better teaches how to test and benchmark the crate.
  • Updated num-rational from version 0.2.2 -> 0.4.0.

Deprecated

  • Deprecated MemoryInstance::get method.
    • Users are recommended to use MemoryInstance::get_value or MemoryInstance::get_into methods instead.

Removed

  • Removed support for virtual memory on 32-bit platforms.
    • Note that the existing support was supposedly not more efficient than the Vec based fallback implementation anyways due to technical design.
  • Removed the core crate feature that previously has been required for no_std builds.
    • Now users only have to specify --no-default-features for a no_std build.

Internal

  • Fully deploy GitHub Actions CI and remove deprecated Travis based CI. Added CI jobs for:
    • Testing on Linux, MacOS and Windows
    • Checking docs and dead links in docs.
    • Audit crate dependencies for vulnerabilities.
    • Check Wasm builds.
    • File test coverage reports to codecov.io.

[0.9.1] - 2021-09-23

Changed

  • Added possibility to forward reduced_stack_buffers crate feature to parity-wasm crate.

Internal

  • Added a default rustfmt.toml configuration file.
  • Fixed some warnings associated to Rust edition 2021.
    • Note: The crate itself remains in Rust edition 2018.

[0.9.0] - 2021-05-27

Changed

  • Updated parity-wasm from verion 0.41 to 0.42.
  • Bumped wasmi-validation from version 0.3.1 to 0.4.0.