Releases: wasmi-labs/wasmi
v0.13.2 - 2022-09-20
Note: This is going to be the last release with the legacy wasmi
engine.
Future releases are going to use the new Wasm execution engines
that are currently in development.
We may consider to publish the legacy wasmi
engine as wasmi-legacy
crate.
Fixed
- Support allocating 4GB of memory (#452)
v0.16.0 - 2022-08-30
Changed
- 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
Internal
- 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
v0.15.0 - 2022-08-22
Fixed
- Fixed bugs found during fuzzing the translation phase of
wasmi
.
Link - Fix
Read
trait implementation forno_std
compilations.
Link
Changed
- Update to
wasmi_core
version0.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 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
v0.14.0 - 2022-07-26
Added
-
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.
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 testedwasmparser
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 ofwasmi
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 ofwasmi
and want this feature please feel
free to open an issue
and provide us with your use case.
v0.13.0 - 2022-07-25
Note: This is going to be the last release with the legacy wasmi
engine.
Future releases are going to use the new Wasm execution engines
that are currently in development.
We may consider to publish the legacy wasmi
engine as wasmi-legacy
crate.
Changed
- Update dependency:
wasmi-validation v0.4.2 -> v0.5.0
v0.12.0 - 2022-07-24
Note: This is going to be the last release with the legacy
wasmi
engine.
Future releases are going to use the new Wasm execution engines
that are currently in development. We may consider to publish the legacywasmi
engine aswasmi-legacy
crate.
Changed
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
Internal
- 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.
v0.11.0 - 2022-01-06
Fixed
- Make
wasmi
traps more conformant with the Wasm specification. (#300) - Fixed a bug in
{f32, f64}_copysign
implementations. (#293) - Fixed a bug in
{f32, f64}_{min, max}
implementations. (#295)
Changed
- Optimized Wasm to host calls. (#291)
- In some artificial benchmarks we saw improvements of up to 42%!
- Introduce a more efficient
LittleEndianConvert
trait. (#290)
Internal
v0.10.0 - 2021-12-14
Added
- 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
Changed
- 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
- Deprecated
MemoryInstance::get
method.- Users are recommended to use
MemoryInstance::get_value
orMemoryInstance::get_into
methods instead.
- Users are recommended to use
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.
- 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
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.