Releases: bytecodealliance/wasmtime
v15.0.1: Release Wasmtime 15.0.1 (#7619)
v15.0.0: Release Wasmtime 15.0.0 (#7557)
15.0.0
Released 2023-11-20.
Added
-
Multiple versions of interfaces are now supported in
bindgen!
.
#7172 -
Support for custom stack memory allocation has been added.
#7209 -
The
memory_init_cow
setting can now be configured in the C API.
#7227 -
The
splice
method of WASI streams has been implemented.
#7234 -
Wasmtime binary releases now have a
wasmtime-min
executable in addition to
libwasmtime-min.*
libraries for the C API. These showcase a minimal
build of Wasmtime for comparison.
#7282
#7315
#7350
Changed
-
Many changes to
wasi:http
WITs have happened to keep up with the proposal as
it prepares to reach a more stable status.
#7161
#7406
#7383
#7417
#7451 -
Add an error resource to WASI streams.
#7152 -
Syntax in
bindgen!
'strappable_error_type
configuration has changed.
#7170 -
TCP errors in
wasi:sockets
have been simplified and clarified.
#7120 -
Wasmtime/Cranelift now require Rust 1.71.0 to compile.
#7206 -
Logging in Wasmtime is now configured with
WASMTIME_LOG
instead of
RUST_LOG
.
#7239 -
Fuel-related APIs on
Store
have been refactored and reimplemented with two
new methodsset_fuel
andreset_fuel
. Previous methods have been removed.
#7240
#7298 -
The
forward
method of WASI streams has been removed.
#7234 -
The WebAssembly
threads
,multi-memory
, andrelaxed-simd
proposals are
now enabled by default.
#7285 -
Logging is now implemented for
wasmtime serve
.
#7366 -
Filesystem locking has been temporarily removed from WASI.
#7355 -
Wasmtime's implementation of WASI preview1 built on top of preview2
(-Spreview2
) has been enabled by default.
#7365 -
The
wasi:clocks
interface now has twosubscribe
functions and aduration
type.
#7358 -
The
wasi:io/poll
interface has seen some refactoring.
#7427
Fixed
-
Profiling the first function in a module now works.
#7254 -
Consecutive writes to files in preview2 have been fixed.
#7394 -
Copy-on-write initialization of linear memories has been fixed for components.
#7459
Cranelift
-
Support for proof-carrying code has been added to Cranelift to assist with an
extra layer of validation about properties such as WebAssembly memory accesses
in the future.
#7165
#7180
#7219
#7231
#7262
#7263
#7274
#7280
#7281
#7352
#7389
#7468 -
Rematerialization of values no longer accidentally overrides LICM.
#7306 -
Inline stack probes no longer make Valgrind unhappy.
#7470
v14.0.4: Release Wasmtime 14.0.4 (#7431)
v14.0.3: Release Wasmtime 14.0.3 (#7399)
14.0.3
Released 2023-10-29
Fixed
-
The
wasmtime
executable will now attempt to more gracefully handle the
transition from the 13.0.0 CLI arguments and parsing to the changes in 14.0.0.
CLI commands should now warn if they no longer work with the new parser, but
still execute as they previously did. This behavior can be controlled via a
newWASMTIME_NEW_CLI
environment variable if necessary.
#7385 -
The
serve
subcommand of thewasmtime
CLI is now enabled by default for the
wasmtime
executable.
#7392
v14.0.2: Release Wasmtime 14.0.2 (#7367)
v13.0.1: Release Wasmtime 13.0.1 (#7375)
v14.0.1: Release Wasmtime 14.0.1 (#7334)
14.0.1
Released 2023-10-23
Fixed
- Cranelift: preserve uext and sext flags for parameters on x86_64 and apple
aarch64. Note that this does not affect Wasmtime and is only intended for
Cranelift embedders such asrustc_codegen_cranelift
.
#7333
v14.0.0: Release Wasmtime 14.0.0 (#7308)
14.0.0
Released 2023-10-20
One of the larger changes in this release is a redesign of Wasmtime's CLI
arguments and where arguments are passed. This means that previous invocations
of the wasmtime
CLI executable will need to be updated. No functionality was
removed but most of it is behind new flags. One major change is that Wasmtime
CLI flags are now grouped behind short options like -O
. For example
wasmtime run --opt-level 2 foo.wasm
is now:
wasmtime run -O opt-level=2 foo.wasm
Additionally options prefixed with --enable-*
or --disable-*
now
consistently are considered boolean setters. For example:
wasmtime run --disable-cache foo.wasm
is now:
wasmtime run -C cache=n foo.wasm
Options can be explored with wasmtime -C help
for example, and wasmtime -h
will show all option groups that can be expanded.
Another major change in the CLI is that any CLI argument which positionally
comes after the wasm file specified will be passed as an argument to the guest
module. For example this invocations
wasmtime run foo.wasm --epoch-interruption
was previously accepted as enabling epoch interruption for the foo.wasm
file.
This is now interpreted as if it were ./foo.wasm --epoch-interruption
,
however, passing the flag to the wasm file itself. Flags to Wasmtime must now
come after Wasmtime's subcommand (in this case run
) and before the wasm file
that's being run, for example:
wasmtime run -W epoch-interruption foo.wasm
More information about this change can be found on
#6925 and
#6946.
Added
-
Added the
wasmtime::FrameInfo::module
method, which returns the
wasmtime::Module
associated with the stack frame. -
The
wasmtime::component::Linker
type now implementsClone
.
#7032 -
Wasmtime's
TypedFunc
API now supports thev128
WebAssembly type on x86_64
and aarch64.
#7010 -
Support for resources exported from a WebAssembly guest has been added to the
componentbindgen!
macro.
#7050 -
The C API now supports learning about a module's
image_range
.
#7064 -
Passing values between components is now possible with a more complete
implementation of type-checking of values.
#7065 -
Types representing resources can now be customized with
bindgen!
.
#7069 -
Wasm-defined globals and memories are now included in core dumps, and the
wasmtime::WasmCoreDump
type is now serializable.
#6935
#7078 -
Initial experimental support for Intel MPK has been added to support running
more instances concurrently.
#7072 -
The implementation of
wasi:http
now supports inbound requests in addition to
outbound requests. A newwasmtime serve
command is an example way of
handling http requests with wasm files.
#7091 -
The C API now supports Wasmtime's "host memory creation" API to customize the
allocation of linear memories.
#7115 -
The C API now supports asynchronous invocation of WebAssembly programs.
#7106 -
The C API now supports Wasmtime's
InstancePre<T>
type.
#7140 -
The
wasi:sockets/ip-name-lookup
interface is now implemented by Wasmtime.
#7109
Changed
-
Wasmtime's CLI has been significantly overhauled. See the note above.
#6925
#6946 -
The
wasmtime::FrameInfo::module_name
has been removed, however you can now
get identical results by chainingwasmtime::FrameInfo::module
and
wasmtime::Module::name
:my_frame.module().name()
. -
WASI interfaces have seen significant work since the previous release. Streams
for example have a new backpressure and flushing design. Additionally WIT
resource
s are now used ubiquitously throughout the specification and
implementation.
#6877
#7029
#7090 -
The implementation of
wasi:http
now uses{input,output}-stream
from the
wasi:io/streams
interface.
#7056 -
Lifting and lowering of the
list<u8>
component values has been significantly
optimized.
#6971 -
The
wasmtime-c-api
crate is now additionally built as an rlib as well as the
previous cdylib/staticlib combo.
#6765
Fixed
-
Support referencing stack slots in the DWARF debug info.
#6960 -
Printing unicode to stdio on Windows has been fixed.
#6825 -
Building for x86_64-linux-android has been fixed.
#7055 -
Fixed stdout/stderr becoming nonblocking by accident with WASI preview2 on
macOS.
#7058 -
Fixed some character boundary-related panics in the preview2 implementation of
preview1.
#7011 -
Fixed an issue of guests sleeping for an incorrect amount of time with
preview2.
#6993 -
Cranelift will now return an error when running out of temporaries in a very
large function instead of panicking.
#7114
v13.0.0: Release Wasmtime 13.0.0 (#7067)
13.0.0
Released 2023-09-20
Added
-
Configuration of mach ports vs signals on macOS is now done through a
Config
instead of at compile time.
#6807 -
Engine::detect_precompiled{,_file}
can be used to to determine whether some
bytes or a file look like a precompiled module or a component.
#6832
#6937 -
A new feature "wmemcheck" has been added to enable Valgrind-like detection of
use-after-free within a WebAssembly guest module.
#6820
#6856 -
The
wasmtime
CLI now supports executing components.
#6836 -
Support for WASI preview2's TCP sockets interface has been added.
#6837 -
Wasmtime's implementation of the wasi-nn proposal now supports named models.
#6854 -
The C API now supports configuring
native_unwind_info
,
dynamic_memory_reserved_for_growth
,target
, and Cranelift settings.
#6896
#6934 -
The
wasmtime
crate now has initial support for component model bindings
generation for the WITresource
type.
#6886 -
Cranelift's RISC-V backend now has a complete implementation of the
WebAssembly SIMD proposal. Many thanks to Afonso Bordado for all their
contributions!
#6920
#6924 -
The
bindgen!
macro in thewasmtime
crate now supports conditional
configuration for which imports should beasync
and which should be
synchronous.
#6942
Changed
-
The pooling allocator was significantly refactored and the
PoolingAllocationConfig
has some minor breaking API changes that reflect
those changes.Previously, the pooling allocator had
count
slots, and each slot hadN
memories andM
tables. Every allocated instance would reserve thoseN
memories andM
tables regardless whether it actually needed them all or
not. This could lead to some waste and over-allocation when a module used less
memories and tables than the pooling allocator's configured maximums.After the refactors in this release, the pooling allocator doesn't have
one-size-fits-all slots anymore. Instead, memories and tables are in separate
pools that can be allocated from independently, and we allocate exactly as
many memories and tables as are necessary for the instance being allocated.To preserve your old configuration with the new methods you can do the following:
let mut config = PoolingAllocationConfig::default(); // If you used to have this old, no-longer-compiling configuration: config.count(count); config.instance_memories(n); config.instance_tables(m); // You can use these equivalent settings for the new config methods: config.total_core_instances(count); config.total_stacks(count); // If using the `async` feature. config.total_memories(count * n); config.max_memories_per_module(n); config.total_tables(count * m); config.max_tables_per_module(m);
There are additionally a variety of methods to limit the maximum amount of
resources a single core Wasm or component instance can take from the pool:PoolingAllocationConfig::max_memories_per_module
PoolingAllocationConfig::max_tables_per_module
PoolingAllocationConfig::max_memories_per_component
PoolingAllocationConfig::max_tables_per_component
PoolingAllocationConfig::max_core_instances_per_component
These methods do not affect the size of the pre-allocated pool.
#6835 -
Builder methods for WASI contexts now use
&mut self
instead ofself
.
#6770 -
Native unwinding information is now properly disabled when it is configured to
be turned off.
#6547 -
Wasmtime's minimum supported Rust version (MSRV) is now 1.70.0. Wasmtime's
MSRV policy of supporting the last three releases of Rust (N-2) is now
additionally documented. More discussion can additionally be found on the PR
itself.
#6900 -
Wasmtime's support for DWARF debugging information has seen some fixes for
previously reported crashes.
#6931
Removed
v12.0.2: [12.0.0] Fix test expectations (#7038)
* Fix test expectations [automatically-tag-and-release-this-commit] * CI: upgrade to qemu 8.0.4. (#6849) * CI: upgrade to qemu 8.0.4. This should resolve a bug in qemu triggered by changes in #6820 (see [here](https://github.com/bytecodealliance/wasmtime/pull/6820#issuecomment-1678908361)). * ci: Update QEMU patch for 8.0.2 --------- Co-authored-by: Afonso Bordado <[email protected]> --------- Co-authored-by: Chris Fallin <[email protected]> Co-authored-by: Afonso Bordado <[email protected]>