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.
- Update
wasmparser-nostd
dependency from version0.83.0
->0.90.0
. Link:- This significantly improved
wasmi
's Wasm parsing, validation and Wasm towasmi
bytecode translation performance.
- This significantly improved
- Transition to the new
wasmparser::VisitOperator
API. Link- This again significantly improved
wasmi
's Wasm parsing, validation and Wasm towasmi
bytecode translation performance by avoiding many unnecessary unpredictable branches in the process.
- This again significantly improved
- Fixed bugs found during fuzzing the translation phase of
wasmi
. Link - Fix
Read
trait implementation forno_std
compilations. Link
- Update to
wasmi_core
version0.3.0
. - Changed API of
wasmi::Config
in order to better reflect the API ofwasmtime::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 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
- The
wasmi::Engine
now caches the bytes of the default linear memory for performance wins inmemory.store
andmemory.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
-
Added support for the following Wasm proposals:
- Import and export of mutable globals
- Non-trapping float-to-int conversions
- Sign-extension operators
- Multi-value
We plan to support more Wasm proposals in the future.
-
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 compilewasmi
using the following Cargoprofile
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 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.
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.
- Update dependency:
wasmi-validation v0.4.2 -> v0.5.0
wasmi
now depends on thewasmi_core
crate.- Deprecated
RuntimeValue::decode_{f32,f64}
methods.- Reason: These methods expose details about the
F32
andF64
types. TheRuntimeValue
type providesfrom_bits
methods for similar purposes. - Replacement: Replace those deprecated methods with
F{32,64}::from_bits().into()
respectively.
- Reason: These methods expose details about the
- Refactor traps in
wasmi
: PR- This change also renames
TrapKind
toTrapCode
. - The
wasmi
crate now properly reuses theTrapCode
definitions from thewasmi_core
crate.
- This change also renames
- Updated dependency:
parity-wasm v0.42 -> v0.45
memory_units v0.3.0 -> v0.4.0
- Rename
RuntimeValue
toValue
internally. - Now uses
wat
crate dependency instead ofwabt
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.
- 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)
- 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)
- 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.
- Support for virtual memory usage on Windows 64-bit platforms.
- Technically we now support the same set of platforms as the
region
crate does: https://github.com/darfink/region-rs#platforms
- Technically we now support the same set of platforms as the
- The
wasmi
andwasmi-validation
crates now both use Rust edition 2021. - The
README
now better teaches how to test and benchmark the crate. - Updated
num-rational
from version0.2.2
->0.4.0
.
- Deprecated
MemoryInstance::get
method.- Users are recommended to use
MemoryInstance::get_value
orMemoryInstance::get_into
methods instead.
- Users are recommended to use
- 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.
- Note that the existing support was supposedly not more efficient than the
- Removed the
core
crate feature that previously has been required forno_std
builds.- Now users only have to specify
--no-default-features
for ano_std
build.
- Now users only have to specify
- 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.
- Added possibility to forward
reduced_stack_buffers
crate feature toparity-wasm
crate.
- Added a default
rustfmt.toml
configuration file. - Fixed some warnings associated to Rust edition 2021.
- Note: The crate itself remains in Rust edition 2018.
- Updated
parity-wasm
from verion0.41
to0.42
. - Bumped
wasmi-validation
from version0.3.1
to0.4.0
.