xref: /wasmtime-44.0.1/RELEASES.md (revision d3087487)
1--------------------------------------------------------------------------------
2
3## 0.38.0
4
5Unreleased.
6
7### Added
8
9### Changed
10
11--------------------------------------------------------------------------------
12
13## 0.37.0
14
15Unreleased.
16
17### Added
18
19* Updated Cranelift to use regalloc2, a new register allocator. This should
20  result in ~20% faster compile times, and for programs that suffered from
21  register-allocation pressure before, up to ~20% faster generated code.
22  [#3989](https://github.com/bytecodealliance/wasmtime/pull/3989)
23
24* Pre-built binaries for macOS M1 machines are now available as release
25  artifacts.
26  [#3983](https://github.com/bytecodealliance/wasmtime/pull/3983)
27
28* Copy-on-write images of memory can now be manually initialized for a `Module`
29  with an explicit method call, but it is still not required to call this method
30  and will automatically otherwise happen on the first instantiation.
31  [#3964](https://github.com/bytecodealliance/wasmtime/pull/3964)
32
33### Fixed
34
35* Using `InstancePre::instantiate` or `Linker::instantiate` will now panic as
36  intended when used with an async-configured `Store`.
37  [#3972](https://github.com/bytecodealliance/wasmtime/pull/3972)
38
39### Changed
40
41* The unsafe `ValRaw` type in the `wasmtime` crate now always stores its values
42  in little-endian format instead of the prior native-endian format. Users of
43  `ValRaw` are recommended to audit their existing code for usage to continue
44  working on big-endian platforms.
45  [#4035](https://github.com/bytecodealliance/wasmtime/pull/4035)
46
47### Removed
48
49* Support for `Config::paged_memory_initialization` and the `uffd` crate feature
50  have been removed from the `wasmtime` crate. Users should migrate to using
51  `Config::memory_init_cow` which is more portable and faster at this point.
52  [#4040](https://github.com/bytecodealliance/wasmtime/pull/4040)
53
54--------------------------------------------------------------------------------
55
56## 0.36.0
57
58Released 2022-04-20
59
60### Added
61
62* Support for epoch-based interruption has been added to the C API.
63  [#3925](https://github.com/bytecodealliance/wasmtime/pull/3925)
64
65* Support for disabling libunwind-based backtraces of WebAssembly code at
66  compile time has been added.
67  [#3932](https://github.com/bytecodealliance/wasmtime/pull/3932)
68
69* Async support for call hooks has been added to optionally execute "blocking"
70  work whenever a wasm module is entered or exited relative to the host.
71  [#3876](https://github.com/bytecodealliance/wasmtime/pull/3876)
72
73### Fixed
74
75* Loading a `Module` will now check, at runtime, that the compilation settings
76  enabled in a `Config` are compatible with the native host. For example this
77  ensures that if avx2 is enabled that the host actually has avx2 support.
78  [#3899](https://github.com/bytecodealliance/wasmtime/pull/3899)
79
80### Removed
81
82* Support for `Config::interruptable` and `InterruptHandle` has been removed
83  from the `wasmtime` crate. Users should migrate to using epoch-based
84  interruption instead.
85  [#3925](https://github.com/bytecodealliance/wasmtime/pull/3925)
86
87* The module linking implementation of Wasmtime has been removed to make room
88  for the upcoming support for the component model.
89  [#3958](https://github.com/bytecodealliance/wasmtime/pull/3958)
90
91--------------------------------------------------------------------------------
92
93## 0.35.3
94
95Released 2022-04-11.
96
97### Fixed
98
99* Backported a bugfix for an instruction lowering issue that could cause a
100  regalloc panic due to an undefined register in some cases. No miscompilation
101  was ever possible, but panics would result in a compilation failure.
102  [#4012](https://github.com/bytecodealliance/wasmtime/pull/4012)
103
104--------------------------------------------------------------------------------
105
106## 0.35.2
107
108Released 2022-03-31.
109
110### Security Fixes
111
112* [CVE-2022-24791](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gwc9-348x-qwv2):
113  Fixed a use after free with `externref`s and epoch interruption.
114
115## 0.35.1
116
117Released 2022-03-09.
118
119### Fixed
120
121* Fixed a bug in the x86-64 lowering of the `uextend` opcode for narrow (`i8`,
122  `i16`) integer sources when the value is produced by one of several
123  arithmetic instructions.
124  [#3906](https://github.com/bytecodealliance/wasmtime/pull/3906)
125
126## 0.35.0
127
128Released 2022-03-07.
129
130### Added
131
132* The `wasmtime_wasi::add_to_linker` function now allows providing
133  a context object of a custom type instead of `wasmtime_wasi::WasiCtx`,
134  as long as that type implements the required WASI snapshot traits.
135  This allows, for example, wrapping `WasiCtx` into a struct and providing
136  custom implementations for those traits to override the default behaviour.
137
138### Changed
139
140* WebAssembly tables of `funcref` values are now lazily initialized which can,
141  in some cases, greatly speed up instantiation of a module.
142  [#3733](https://github.com/bytecodealliance/wasmtime/pull/3733)
143
144* The `memfd` feature in 0.34.0, now renamed to `memory-init-cow`, has been
145  enabled by default. This means that, where applicable, WebAssembly linear
146  memories are now initialized with copy-on-write mappings. Support from this
147  has been expanded from Linux-only to include macOS and other Unix systems when
148  modules are loaded from precompiled `*.cwasm` files on disk.
149  [#3777](https://github.com/bytecodealliance/wasmtime/pull/3777)
150  [#3778](https://github.com/bytecodealliance/wasmtime/pull/3778)
151  [#3787](https://github.com/bytecodealliance/wasmtime/pull/3787)
152  [#3819](https://github.com/bytecodealliance/wasmtime/pull/3819)
153  [#3831](https://github.com/bytecodealliance/wasmtime/pull/3831)
154
155* Clarify that SSE 4.2 (and prior) is required for running WebAssembly code with
156  simd support enabled on x86\_64.
157  [#3816](https://github.com/bytecodealliance/wasmtime/pull/3816)
158  [#3817](https://github.com/bytecodealliance/wasmtime/pull/3817)
159  [#3833](https://github.com/bytecodealliance/wasmtime/pull/3833)
160  [#3825](https://github.com/bytecodealliance/wasmtime/pull/3825)
161
162* Support for profiling with VTune is now enabled at compile time by default,
163  but it remains disabled at runtime by default.
164  [#3821](https://github.com/bytecodealliance/wasmtime/pull/3821)
165
166* The `ModuleLimits` type has been removed from the configuration of the pooling
167  allocator in favor of configuring the total size of an instance allocation
168  rather than each individual field.
169  [#3837](https://github.com/bytecodealliance/wasmtime/pull/3837)
170
171* The native stack size allowed for WebAssembly has been decreased from 1 MiB to
172  512 KiB on all platforms to better accomodate running wasm on the main thread
173  on Windows.
174  [#3861](https://github.com/bytecodealliance/wasmtime/pull/3861)
175
176* The `wasi-common` crate now supports doing polls for both read and write
177  interest on a file descriptor at the same time.
178  [#3866](https://github.com/bytecodealliance/wasmtime/pull/3866)
179
180### Fixed
181
182* The `Store::call_hook` callback is now invoked when entering host functions
183  defined with `*_unchecked` variants.
184  [#3881](https://github.com/bytecodealliance/wasmtime/pull/3881)
185
186### Removed
187
188* The incomplete and unmaintained ARM32 backend has been removed from Cranelift.
189  [#3799](https://github.com/bytecodealliance/wasmtime/pull/3799)
190
191--------------------------------------------------------------------------------
192
193## 0.34.2
194
195Released 2022-03-31.
196
197### Security Fixes
198
199* [CVE-2022-24791](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gwc9-348x-qwv2):
200  Fixed a use after free with `externref`s and epoch interruption.
201
202## 0.34.1
203
204Released 2022-02-16.
205
206### Security Fixes
207
208* [CVE-2022-23636](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-88xq-w8cq-xfg7):
209  Fixed an invalid drop of a partially-initialized instance in the pooling instance
210  allocator.
211
212## 0.33.1
213
214Released 2022-02-16.
215
216### Security Fixes
217
218* [CVE-2022-23636](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-88xq-w8cq-xfg7):
219  Fixed an invalid drop of a partially-initialized instance in the pooling instance
220  allocator.
221
222## 0.34.0
223
224Released 2022-02-07.
225
226### Fixed
227
228* The `wasi-common` default implementation of some attributes of files has been
229  updated to ensure that `wasi-libc`'s `isatty` function works as intended.
230  [#3696](https://github.com/bytecodealliance/wasmtime/pull/3696)
231
232* A benign debug assertion related to `externref` and garbage-collection has
233  been fixed.
234  [#3734](https://github.com/bytecodealliance/wasmtime/pull/3734)
235
236### Added
237
238* Function names are now automatically demangled when informing profilers of
239  regions of JIT code to apply Rust-specific demangling rules if applicable.
240  [#3683](https://github.com/bytecodealliance/wasmtime/pull/3683)
241
242* Support for profiling JIT-generated trampolines with VTune has been added.
243  [#3687](https://github.com/bytecodealliance/wasmtime/pull/3687)
244
245* Wasmtime now supports a new method of async preemption dubbed "epoch-based
246  interruption" which is intended to be much more efficient than the current
247  fuel-based method of preemption.
248  [#3699](https://github.com/bytecodealliance/wasmtime/pull/3699)
249
250* On Linux Wasmtime will now by default use copy-on-write mappings to initialize
251  memories of wasm modules where possible, accelerating instantiation by
252  avoiding costly memory copies. When combined with the pooling allocator this
253  can also be used to speed up instance-reuse cases due to fewer syscalls to
254  change memory mappings being necessary.
255  [#3697](https://github.com/bytecodealliance/wasmtime/pull/3697)
256  [#3738](https://github.com/bytecodealliance/wasmtime/pull/3738)
257  [#3760](https://github.com/bytecodealliance/wasmtime/pull/3760)
258
259* Wasmtime now supports the recently-added `sock_accept` WASI function.
260  [#3711](https://github.com/bytecodealliance/wasmtime/pull/3711)
261
262* Cranelift now has support for specifying blocks as cold.
263  [#3698](https://github.com/bytecodealliance/wasmtime/pull/3698)
264
265### Changed
266
267* Many more instructions for the x64 backend have been migrated to ISLE,
268  additionally with refactorings to make incorrect lowerings harder to
269  accidentally write.
270  [#3653](https://github.com/bytecodealliance/wasmtime/pull/3653)
271  [#3659](https://github.com/bytecodealliance/wasmtime/pull/3659)
272  [#3681](https://github.com/bytecodealliance/wasmtime/pull/3681)
273  [#3686](https://github.com/bytecodealliance/wasmtime/pull/3686)
274  [#3688](https://github.com/bytecodealliance/wasmtime/pull/3688)
275  [#3690](https://github.com/bytecodealliance/wasmtime/pull/3690)
276  [#3752](https://github.com/bytecodealliance/wasmtime/pull/3752)
277
278* More instructions in the aarch64 backend are now lowered with ISLE.
279  [#3658](https://github.com/bytecodealliance/wasmtime/pull/3658)
280  [#3662](https://github.com/bytecodealliance/wasmtime/pull/3662)
281
282* The s390x backend's lowering rules are now almost entirely defined with ISLE.
283  [#3702](https://github.com/bytecodealliance/wasmtime/pull/3702)
284  [#3703](https://github.com/bytecodealliance/wasmtime/pull/3703)
285  [#3706](https://github.com/bytecodealliance/wasmtime/pull/3706)
286  [#3717](https://github.com/bytecodealliance/wasmtime/pull/3717)
287  [#3723](https://github.com/bytecodealliance/wasmtime/pull/3723)
288  [#3724](https://github.com/bytecodealliance/wasmtime/pull/3724)
289
290* Instantiation of modules in Wasmtime has been further optimized now that the
291  copy-on-write memory initialization removed the previously most-expensive part
292  of instantiating a module.
293  [#3727](https://github.com/bytecodealliance/wasmtime/pull/3727)
294  [#3739](https://github.com/bytecodealliance/wasmtime/pull/3739)
295  [#3741](https://github.com/bytecodealliance/wasmtime/pull/3741)
296  [#3742](https://github.com/bytecodealliance/wasmtime/pull/3742)
297
298--------------------------------------------------------------------------------
299
300## 0.33.0
301
302Released 2022-01-05.
303
304### Added
305
306* Compiled wasm modules may now optionally omit debugging information about
307  mapping addresses to source locations, resulting in smaller binaries.
308  [#3598](https://github.com/bytecodealliance/wasmtime/pull/3598)
309
310* The WebAssembly SIMD proposal is now enabled by default.
311  [#3601](https://github.com/bytecodealliance/wasmtime/pull/3601)
312
313--------------------------------------------------------------------------------
314
315## 0.32.1
316
317Released 2022-01-04.
318
319### Fixed
320
321* Cranelift: remove recently-added build dependency on `sha2` to allow usage in
322  some dependency-sensitive environments, by computing ISLE manifest hashes
323  with a different hash function.
324  [#3619](https://github.com/bytecodealliance/wasmtime/pull/3619)
325
326* Cranelift: fixed 8- and 16-bit behavior of popcount (bit population count)
327  instruction. Does not affect Wasm frontend.
328  [#3617](https://github.com/bytecodealliance/wasmtime/pull/3617)
329
330* Cranelift: fixed miscompilation of 8- and 16-bit bit-rotate instructions.
331  Does not affect Wasm frontend.
332  [#3610](https://github.com/bytecodealliance/wasmtime/pull/3610)
333
334--------------------------------------------------------------------------------
335
336## 0.32.0
337
338Released 2021-12-13.
339
340### Added
341
342* A new configuration option has been added to force using a "static" memory
343  style to automatically limit growth of memories in some configurations.
344  [#3503](https://github.com/bytecodealliance/wasmtime/pull/3503)
345
346* The `InstancePre<T>` type now implements `Clone`.
347  [#3510](https://github.com/bytecodealliance/wasmtime/pull/3510)
348
349* Cranelift's instruction selection process has begun to be migrated towards the
350  ISLE compiler and definition language.
351  [#3506](https://github.com/bytecodealliance/wasmtime/pull/3506)
352
353* A `pooling-allocator` feature has been added, which is on-by-default, to
354  disable the pooling allocator at compile time.
355  [#3514](https://github.com/bytecodealliance/wasmtime/pull/3514)
356
357### Fixed
358
359* A possible panic when parsing a WebAssembly `name` section has been fixed.
360  [#3509](https://github.com/bytecodealliance/wasmtime/pull/3509)
361
362* Generating native DWARF information for some C-produced modules has been
363  fixed, notably those where there may be DWARF about dead code.
364  [#3498](https://github.com/bytecodealliance/wasmtime/pull/3498)
365
366* A number of SIMD code generation bugs have been fixed in the x64 backend
367  by migrating their lowerings to ISLE.
368
369--------------------------------------------------------------------------------
370
371## 0.31.0
372
373Released 2021-10-29.
374
375### Added
376
377* New `Func::new_unchecked` and `Func::call_unchecked` APIs have been added with
378  accompanying functions in the C API to improve the performance of calls into
379  wasm and the host in the C API.
380  [#3350](https://github.com/bytecodealliance/wasmtime/pull/3350)
381
382* Release binaries are now available for the s390x-unknown-linux-gnu
383  architecture.
384  [#3372](https://github.com/bytecodealliance/wasmtime/pull/3372)
385
386* A new `ResourceLimiterAsync` trait is added which allows asynchronous blocking
387  of WebAssembly on instructions such as `memory.grow`.
388  [#3393](https://github.com/bytecodealliance/wasmtime/pull/3393)
389
390### Changed
391
392* The `Func::call` method now takes a slice to write the results into rather
393  than returning a boxed slice.
394  [#3319](https://github.com/bytecodealliance/wasmtime/pull/3319)
395
396* Trampolines are now covered when jitdump profiling is enabled.
397  [#3344](https://github.com/bytecodealliance/wasmtime/pull/3344)
398
399### Fixed
400
401* Debugging with GDB has been fixed on Windows.
402  [#3373](https://github.com/bytecodealliance/wasmtime/pull/3373)
403
404* Some quadradic behavior in Wasmtime's compilation of modules has been fixed.
405  [#3469](https://github.com/bytecodealliance/wasmtime/pull/3469)
406  [#3466](https://github.com/bytecodealliance/wasmtime/pull/3466)
407
408* Bounds-checks for wasm memory accesses in certain non-default configurations
409  have been fixed to correctly allow loads at the end of the address space.
410  [#3462](https://github.com/bytecodealliance/wasmtime/pull/3462)
411
412* When type-checking memories and tables for satisfying instance imports the
413  runtime size of the table/memory is now consulted instead of the object's
414  original type.
415  [#3450](https://github.com/bytecodealliance/wasmtime/pull/3450)
416
417### Removed
418
419* The Lightbeam backend has been removed, as per [RFC 14].
420  [#3390](https://github.com/bytecodealliance/wasmtime/pull/3390)
421
422[RFC 14]: https://github.com/bytecodealliance/rfcs/pull/14
423
424* Cranelift's old x86 backend has been removed, as per [RFC 12].
425  [#3309](https://github.com/bytecodealliance/wasmtime/pull/3009)
426
427[RFC 12]: https://github.com/bytecodealliance/rfcs/pull/12
428
429## 0.30.0
430
431Released 2021-09-17.
432
433### Security Fixes
434
435* [CVE-2021-39216](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-v4cp-h94r-m7xf):
436  Fixed a use after free passing `externref`s to Wasm in Wasmtime.
437
438* [CVE-2021-39218](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-4873-36h9-wv49):
439  Fixed an out-of-bounds read/write and invalid free with `externref`s and GC
440  safepoints in Wasmtime.
441
442* [CVE-2021-39219](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-q879-9g95-56mx):
443  Fixed a bug where using two different `Engine`s with the same `Linker`-define
444  functions caused unsafety without `unsafe` blocks.
445
446### Added
447
448* Added experimental support for the in-progress 64-bit memories Wasm proposal.
449
450* Added support to build Wasmtime without the compiler. This lets you run
451  pre-compiled Wasm modules, without the ability (or potential attack surface)
452  of compiling new Wasm modules. The compilation functionality is gated by the
453  on-by-default `cranelift` cargo feature.
454
455* Added support for NaN canonicalization with SIMD vectors.
456
457* Added support for differential fuzzing against V8's Wasm engine.
458
459* Added support for fuzzing against the Wasm spec interpreter.
460
461* Enabled SIMD fuzzing on oss-fuzz.
462
463### Changed
464
465* A variety of performance improvements to loading pre-compiled modules.
466
467* A variety of performance improvements to function calls, both through Rust and
468  the C API.
469
470* Leaf functions that do not use the stack no longer bump the frame pointer on
471  aarch64 and s390x.
472
473* Many updates and expanded instruction support to the in-progress CLIF
474  interpreter.
475
476* Expanded fuzzing of reference types and GC.
477
478### Fixed
479
480* A number of fixes to both aarch64 and x86_64 support for the Wasm SIMD
481  proposal and the underlying CLIF vector instructions.
482
483* Fixed a potential infinite loop in the SSA computation for
484  `cranelift-frontend`. This was not reachable from `cranelift-wasm` or
485  Wasmtime, but might have affected general Cranelift users.
486
487### Removed
488
489* The `wasmtime wasm2obj` subcommand has been removed. Generating raw object
490  files for linking natively is no longer supported. Use the `wasmtime compile`
491  subcommand to pre-compile a Wasm module and `wasmtime run` to run pre-compiled
492  Wasm modules.
493
494## 0.29.0
495
496Released 2021-08-02.
497
498### Changed
499
500* Instance exports are now loaded lazily from instances instead of eagerly as
501  they were before. This is an internal-only change and is not a breaking
502  change.
503  [#2984](https://github.com/bytecodealliance/wasmtime/pull/2984)
504
505* All linear memories created by Wasmtime will now, by default, have guard pages
506  in front of them in addition to after them. This is intended to help mitigate
507  future bugs in Cranelift, should they arise.
508  [#2977](https://github.com/bytecodealliance/wasmtime/pull/2977)
509
510* Linear memories now correctly support a maximum size of 4GB. Previously, the
511  limit field was 32 bits, which did not properly support a full 4GB memory.
512  This update is also a necessary change in preparation for future memory64
513  support.
514  [#3013](https://github.com/bytecodealliance/wasmtime/pull/3013)
515  [#3134](https://github.com/bytecodealliance/wasmtime/pull/3134)
516
517* Injection counts of fuel into a `wasmtime::Store` now uses a u64 instead of a
518  u32.
519  [#3048](https://github.com/bytecodealliance/wasmtime/pull/3048)
520
521### Added
522
523* Support for `i128` has improved in the AArch64 backend.
524  [#2959](https://github.com/bytecodealliance/wasmtime/pull/2959)
525  [#2975](https://github.com/bytecodealliance/wasmtime/pull/2975)
526  [#2985](https://github.com/bytecodealliance/wasmtime/pull/2985)
527  [#2990](https://github.com/bytecodealliance/wasmtime/pull/2990)
528  [#3002](https://github.com/bytecodealliance/wasmtime/pull/3002)
529  [#3004](https://github.com/bytecodealliance/wasmtime/pull/3004)
530  [#3005](https://github.com/bytecodealliance/wasmtime/pull/3005)
531  [#3008](https://github.com/bytecodealliance/wasmtime/pull/3008)
532  [#3027](https://github.com/bytecodealliance/wasmtime/pull/3027)
533
534* The s390x backend now supports z14 and atomics.
535  [#2988](https://github.com/bytecodealliance/wasmtime/pull/2988)
536  [#2991](https://github.com/bytecodealliance/wasmtime/pull/2991)
537
538* The `wasmtime::Linker` type now implements `Clone`.
539  [#2993](https://github.com/bytecodealliance/wasmtime/pull/2993)
540
541* Support for the SIMD proposal on both x86\_64 and AArch64 has improved. On
542  x86\_64, all SIMD opcodes are now supported.
543  [#2997](https://github.com/bytecodealliance/wasmtime/pull/2997)
544  [#3035](https://github.com/bytecodealliance/wasmtime/pull/3035)
545  [#2982](https://github.com/bytecodealliance/wasmtime/pull/2982)
546  [#3084](https://github.com/bytecodealliance/wasmtime/pull/3084)
547  [#3082](https://github.com/bytecodealliance/wasmtime/pull/3082)
548  [#3107](https://github.com/bytecodealliance/wasmtime/pull/3107)
549  [#3105](https://github.com/bytecodealliance/wasmtime/pull/3105)
550  [#3114](https://github.com/bytecodealliance/wasmtime/pull/3114)
551  [#3070](https://github.com/bytecodealliance/wasmtime/pull/3070)
552  [#3126](https://github.com/bytecodealliance/wasmtime/pull/3126)
553
554* A `Trap` can now display its reason without also displaying the backtrace.
555  [#3033](https://github.com/bytecodealliance/wasmtime/pull/3033)
556
557* An initiall fuzzer for CLIF has been added.
558  [#3038](https://github.com/bytecodealliance/wasmtime/pull/3038)
559
560* High-level architecture documentation has been added for Wasmtime.
561  [#3019](https://github.com/bytecodealliance/wasmtime/pull/3019)
562
563* Support for multi-memory can now be configured in Wasmtime's C API.
564  [#3071](https://github.com/bytecodealliance/wasmtime/pull/3071)
565
566* The `wasmtime` crate now supports a `posix-signals-on-macos` feature to force
567  the usage of signals instead of mach ports to handle traps on macOS.
568  [#3063](https://github.com/bytecodealliance/wasmtime/pull/3063)
569
570* Wasmtime's C API now has a `wasmtime_trap_code` function to get the raw trap
571  code, if present, for a trap.
572  [#3086](https://github.com/bytecodealliance/wasmtime/pull/3086)
573
574* Wasmtime's C API now has a `wasmtime_linker_define_func` function to define a
575  store-independent function within a linker.
576  [#3122](https://github.com/bytecodealliance/wasmtime/pull/3122)
577
578* A `wasmtime::Linker::module_async` function was added as the asynchronous
579  counterpart to `wasmtime::Linker::module`.
580  [#3121](https://github.com/bytecodealliance/wasmtime/pull/3121)
581
582### Fixed
583
584* Compiling the `wasmtime` crate into a `dylib` crate type has been fixed.
585  [#3010](https://github.com/bytecodealliance/wasmtime/pull/3010)
586
587* The enter/exit hooks for WebAssembly are now executed for an instance's
588  `start` function, if present.
589  [#3001](https://github.com/bytecodealliance/wasmtime/pull/3001)
590
591* Some WASI functions in `wasi-common` have been fixed for big-endian platforms.
592  [#3016](https://github.com/bytecodealliance/wasmtime/pull/3016)
593
594* Wasmtime no longer erroneously assumes that all custom sections may contain
595  DWARF information, reducing instances of `Trap`'s `Display` implementation
596  providing misleading information to set an env var to get more information.
597  [#3083](https://github.com/bytecodealliance/wasmtime/pull/3083)
598
599* Some issues with parsing DWARF debug information have been fixed.
600  [#3116](https://github.com/bytecodealliance/wasmtime/pull/3116)
601
602## 0.28.0
603
604Released 2021-06-09.
605
606### Changed
607
608* Breaking: Wasmtime's embedding API has been redesigned, as specified in [RFC
609  11]. Rust users can now enjoy easier times with `Send` and `Sync`, and all
610  users can now more clearly manage memory, especially in the C API. Language
611  embeddings have been updated to the new API as well.
612  [#2897](https://github.com/bytecodealliance/wasmtime/pull/2897)
613
614[RFC 11]: https://github.com/bytecodealliance/rfcs/pull/11
615
616### Added
617
618* A new `InstancePre` type, created with `Linker::instantiate_pre`, has been
619  added to perform type-checking of an instance once and reduce the work done
620  for each instantiation of a module:
621  [#2962](https://github.com/bytecodealliance/wasmtime/pull/2962)
622
623* Deserialization of a module can now optionally skip checking the wasmtime
624  version string:
625  [#2945](https://github.com/bytecodealliance/wasmtime/pull/2945)
626
627* A method has been exposed to frontload per-thread initialization costs if the
628  latency of every last wasm call is important:
629  [#2946](https://github.com/bytecodealliance/wasmtime/pull/2946)
630
631* Hooks have been added for entry/exit into wasm code to allow embeddings to
632  track time and other properties about execution in a wasm environment:
633  [#2952](https://github.com/bytecodealliance/wasmtime/pull/2952)
634
635* A [C++ embedding of Wasmtime has been written][cpp].
636
637[RFC 11]: https://github.com/bytecodealliance/rfcs/pull/11
638[cpp]: https://github.com/bytecodealliance/wasmtime-cpp
639
640### Fixed
641
642* Multiple returns on macOS AArch64 have been fixed:
643  [#2956](https://github.com/bytecodealliance/wasmtime/pull/2956)
644
645## 0.27.0
646
647Released 2021-05-21.
648
649### Security Fixes
650
651* Fixed a security issue in Cranelift's x64 backend that could result in a heap
652  sandbox escape due to an incorrect sign-extension:
653  [#2913](https://github.com/bytecodealliance/wasmtime/issues/2913).
654
655### Added
656
657* Support for IBM z/Archiecture (`s390x`) machines in Cranelift and Wasmtime:
658  [#2836](https://github.com/bytecodealliance/wasmtime/pull/2836),
659  [#2837](https://github.com/bytecodealliance/wasmtime/pull/2837),
660  [#2838](https://github.com/bytecodealliance/wasmtime/pull/2838),
661  [#2843](https://github.com/bytecodealliance/wasmtime/pull/2843),
662  [#2854](https://github.com/bytecodealliance/wasmtime/pull/2854),
663  [#2870](https://github.com/bytecodealliance/wasmtime/pull/2870),
664  [#2871](https://github.com/bytecodealliance/wasmtime/pull/2871),
665  [#2872](https://github.com/bytecodealliance/wasmtime/pull/2872),
666  [#2874](https://github.com/bytecodealliance/wasmtime/pull/2874).
667
668* Improved async support in wasi-common runtime:
669  [#2832](https://github.com/bytecodealliance/wasmtime/pull/2832).
670
671* Added `Store::with_limits`, `StoreLimits`, and `ResourceLimiter` to the
672  Wasmtime API to help with enforcing resource limits at runtime. The
673  `ResourceLimiter` trait can be implemented by custom resource limiters to
674  decide if linear memories or tables can be grown.
675
676* Added `allow-unknown-exports` option for the run command:
677  [#2879](https://github.com/bytecodealliance/wasmtime/pull/2879).
678
679* Added API to notify that a `Store` has moved to a new thread:
680  [#2822](https://github.com/bytecodealliance/wasmtime/pull/2822).
681
682* Documented guidance around using Wasmtime in multithreaded contexts:
683  [#2812](https://github.com/bytecodealliance/wasmtime/pull/2812).
684  In the future, the Wasmtime API will change to allow some of its core types
685  to be Send/Sync; see the in-progress
686  [#2897](https://github.com/bytecodealliance/wasmtime/pull/2897) for details.
687
688* Support calls from native code to multiple-return-value functions:
689  [#2806](https://github.com/bytecodealliance/wasmtime/pull/2806).
690
691### Changed
692
693* Breaking: `Memory::new` has been changed to return `Result` as creating a
694  host memory object is now a fallible operation when the initial size of
695  the memory exceeds the store limits.
696
697### Fixed
698
699* Many instruction selection improvements on x64 and aarch64:
700  [#2819](https://github.com/bytecodealliance/wasmtime/pull/2819),
701  [#2828](https://github.com/bytecodealliance/wasmtime/pull/2828),
702  [#2823](https://github.com/bytecodealliance/wasmtime/pull/2823),
703  [#2862](https://github.com/bytecodealliance/wasmtime/pull/2862),
704  [#2886](https://github.com/bytecodealliance/wasmtime/pull/2886),
705  [#2889](https://github.com/bytecodealliance/wasmtime/pull/2889),
706  [#2905](https://github.com/bytecodealliance/wasmtime/pull/2905).
707
708* Improved performance of Wasmtime runtime substantially:
709  [#2811](https://github.com/bytecodealliance/wasmtime/pull/2811),
710  [#2818](https://github.com/bytecodealliance/wasmtime/pull/2818),
711  [#2821](https://github.com/bytecodealliance/wasmtime/pull/2821),
712  [#2847](https://github.com/bytecodealliance/wasmtime/pull/2847),
713  [#2900](https://github.com/bytecodealliance/wasmtime/pull/2900).
714
715* Fixed WASI issue with file metadata on Windows:
716  [#2884](https://github.com/bytecodealliance/wasmtime/pull/2884).
717
718* Fixed an issue with debug info and an underflowing (trapping) offset:
719  [#2866](https://github.com/bytecodealliance/wasmtime/pull/2866).
720
721* Fixed an issue with unwind information in the old x86 backend:
722  [#2845](https://github.com/bytecodealliance/wasmtime/pull/2845).
723
724* Fixed i32 spilling in x64 backend:
725  [#2840](https://github.com/bytecodealliance/wasmtime/pull/2840).
726
727## 0.26.0
728
729Released 2021-04-05.
730
731### Added
732
733* Added the `wasmtime compile` command to support AOT compilation of Wasm
734  modules. This adds the `Engine::precompile_module` method. Also added the
735  `Config::target` method to change the compilation target of the
736  configuration. This can be used in conjunction with
737  `Engine::precompile_module` to target a different host triple than the
738  current one.
739  [#2791](https://github.com/bytecodealliance/wasmtime/pull/2791)
740
741* Support for macOS on aarch64 (Apple M1 Silicon), including Apple-specific
742  calling convention details and unwinding/exception handling using Mach ports.
743  [#2742](https://github.com/bytecodealliance/wasmtime/pull/2742),
744  [#2723](https://github.com/bytecodealliance/wasmtime/pull/2723)
745
746* A number of SIMD instruction implementations in the new x86-64 backend.
747  [#2771](https://github.com/bytecodealliance/wasmtime/pull/2771)
748
749* Added the `Config::cranelift_flag_enable` method to enable setting Cranelift
750  boolean flags or presets in a config.
751
752* Added CLI option `--cranelift-enable` to enable boolean settings and ISA presets.
753
754* Deduplicate function signatures in Wasm modules.
755  [#2772](https://github.com/bytecodealliance/wasmtime/pull/2772)
756
757* Optimize overheads of calling into Wasm functions.
758  [#2757](https://github.com/bytecodealliance/wasmtime/pull/2757),
759  [#2759](https://github.com/bytecodealliance/wasmtime/pull/2759)
760
761* Improvements related to Module Linking: compile fewer trampolines;
762
763  [#2774](https://github.com/bytecodealliance/wasmtime/pull/2774)
764
765* Re-export sibling crates from `wasmtime-wasi` to make embedding easier
766  without needing to match crate versions.
767  [#2776](https://github.com/bytecodealliance/wasmtime/pull/2776)
768
769### Changed
770
771* Switched the default compiler backend on x86-64 to Cranelift's new backend.
772  This should not have any user-visible effects other than possibly runtime
773  performance improvements. The old backend is still available with the
774  `old-x86-backend` feature flag to the `cranelift-codegen` or `wasmtime`
775  crates, or programmatically with `BackendVariant::Legacy`. We plan to
776  maintain the old backend for at least one more release and ensure it works on
777  CI.
778  [#2718](https://github.com/bytecodealliance/wasmtime/pull/2718)
779
780* Breaking: `Module::deserialize` has been removed in favor of `Module::new`.
781
782* Breaking: `Config::cranelift_clear_cpu_flags` was removed. Use `Config::target`
783  to clear the CPU flags for the host's target.
784
785* Breaking: `Config::cranelift_other_flag` was renamed to `Config::cranelift_flag_set`.
786
787* CLI changes:
788  * Wasmtime CLI options to enable WebAssembly features have been replaced with
789    a singular `--wasm-features` option. The previous options are still
790    supported, but are not displayed in help text.
791  * Breaking: the CLI option `--cranelift-flags` was changed to
792    `--cranelift-set`.
793  * Breaking: the CLI option `--enable-reference-types=false` has been changed
794    to `--wasm-features=-reference-types`.
795  * Breaking: the CLI option `--enable-multi-value=false` has been changed to
796    `--wasm-features=-multi-value`.
797  * Breaking: the CLI option `--enable-bulk-memory=false` has been changed to
798    `--wasm-features=-bulk-memory`.
799
800* Improved error-reporting in wiggle.
801  [#2760](https://github.com/bytecodealliance/wasmtime/pull/2760)
802
803* Make WASI sleeping fallible (some systems do not support sleep).
804  [#2756](https://github.com/bytecodealliance/wasmtime/pull/2756)
805
806* WASI: Support `poll_oneoff` with a sleep.
807  [#2753](https://github.com/bytecodealliance/wasmtime/pull/2753)
808
809* Allow a `StackMapSink` to be passed when defining functions with
810  `cranelift-module`.
811  [#2739](https://github.com/bytecodealliance/wasmtime/pull/2739)
812
813* Some refactoring in new x86-64 backend to prepare for VEX/EVEX (e.g.,
814  AVX-512) instruction encodings to be supported.
815  [#2799](https://github.com/bytecodealliance/wasmtime/pull/2799)
816
817### Fixed
818
819* Fixed a corner case in `srem` (signed remainder) in the new x86-64 backend:
820  `INT_MIN % -1` should return `0`, rather than trapping. This only occurred
821  when `avoid_div_traps == false` was set by the embedding.
822  [#2763](https://github.com/bytecodealliance/wasmtime/pull/2763)
823
824* Fixed a memory leak of the `Store` when an instance traps.
825  [#2803](https://github.com/bytecodealliance/wasmtime/pull/2803)
826
827* Some fuzzing-related fixes.
828  [#2788](https://github.com/bytecodealliance/wasmtime/pull/2788),
829  [#2770](https://github.com/bytecodealliance/wasmtime/pull/2770)
830
831* Fixed memory-initialization bug in uffd allocator that could copy into the
832  wrong destination under certain conditions. Does not affect the default
833  wasmtime instance allocator.
834  [#2801](https://github.com/bytecodealliance/wasmtime/pull/2801)
835
836* Fix printing of float values from the Wasmtime CLI.
837  [#2797](https://github.com/bytecodealliance/wasmtime/pull/2797)
838
839* Remove the ability for the `Linker` to instantiate modules with duplicate
840  import strings of different types.
841  [#2789](https://github.com/bytecodealliance/wasmtime/pull/2789)
842
843## 0.25.0
844
845Released 2021-03-16.
846
847### Added
848
849* An implementation of a pooling instance allocator, optionally backed by
850  `userfaultfd` on Linux, was added to improve the performance of embeddings
851  that instantiate a large number of instances continuously.
852  [#2518](https://github.com/bytecodealliance/wasmtime/pull/2518)
853
854* Host functions can now be defined on `Config` to share the function across all
855  `Store` objects connected to an `Engine`. This can improve the time it takes
856  to instantiate instances in a short-lived `Store`.
857  [#2625](https://github.com/bytecodealliance/wasmtime/pull/2625)
858
859* The `Store` object now supports having typed values attached to it which can
860  be retrieved from host functions.
861  [#2625](https://github.com/bytecodealliance/wasmtime/pull/2625)
862
863* The `wiggle` code generator now supports `async` host functions.
864  [#2701](https://github.com/bytecodealliance/wasmtime/pull/2701)
865
866### Changed
867
868* The `Func::getN{,_async}` APIs have all been removed in favor of a new
869  `Func::typed` API which should be more compact in terms of API surface area as
870  well as more flexible in how it can be used.
871  [#2719](https://github.com/bytecodealliance/wasmtime/pull/2719)
872
873* `Engine::new` has been changed from returning `Engine` to returning
874  `anyhow::Result<Engine>`. Callers of `Engine::new` will need to be updated to
875  use the `?` operator on the return value or otherwise unwrap the result to get
876  the `Engine`.
877
878### Fixed
879
880* Interpretation of timestamps in `poll_oneoff` for WASI have been fixed to
881  correctly use nanoseconds instead of microseconds.
882  [#2717](https://github.com/bytecodealliance/wasmtime/pull/2717)
883
884## 0.24.0
885
886Released 2021-03-04.
887
888### Added
889
890* Implement support for `async` functions in Wasmtime
891  [#2434](https://github.com/bytecodealliance/wasmtime/pull/2434)
892
893### Fixed
894
895* Fix preservation of the sigaltstack on macOS
896  [#2676](https://github.com/bytecodealliance/wasmtime/pull/2676)
897* Fix incorrect semver dependencies involving fs-set-times.
898  [#2705](https://github.com/bytecodealliance/wasmtime/pull/2705)
899* Fix some `i128` shift-related bugs in x64 backend.
900  [#2682](https://github.com/bytecodealliance/wasmtime/pull/2682)
901* Fix incomplete trap metadata due to multiple traps at one address
902  [#2685](https://github.com/bytecodealliance/wasmtime/pull/2685)
903
904## 0.23.0
905
906Released 2021-02-16.
907
908### Added
909
910* Support for limiting WebAssembly execution with fuel was added, including
911  support in the C API.
912  [#2611](https://github.com/bytecodealliance/wasmtime/pull/2611)
913  [#2643](https://github.com/bytecodealliance/wasmtime/pull/2643)
914* Wasmtime now has more knobs for limiting memory and table allocations
915  [#2617](https://github.com/bytecodealliance/wasmtime/pull/2617)
916* Added a method to share `Config` across machines
917  [#2608](https://github.com/bytecodealliance/wasmtime/pull/2608)
918* Added a safe memory read/write API
919  [#2528](https://github.com/bytecodealliance/wasmtime/pull/2528)
920* Added support for the experimental wasi-crypto APIs
921  [#2597](https://github.com/bytecodealliance/wasmtime/pull/2597)
922* Added an instance limit to `Config`
923  [#2593](https://github.com/bytecodealliance/wasmtime/pull/2593)
924* Implemented module-linking's outer module aliases
925  [#2590](https://github.com/bytecodealliance/wasmtime/pull/2590)
926* Cranelift now supports 128-bit operations for the new x64 backend.
927  [#2539](https://github.com/bytecodealliance/wasmtime/pull/2539)
928* Cranelift now has detailed debug-info (DWARF) support in new backends (initially x64).
929  [#2565](https://github.com/bytecodealliance/wasmtime/pull/2565)
930* Cranelift now uses the `POPCNT`, `TZCNT`, and `LZCNT`, as well as SSE 4.1
931  rounding instructions on x64 when available.
932* Cranelift now uses the `CNT`, instruction on aarch64 when available.
933
934### Changed
935
936* A new WASI implementation built on the new
937  [`cap-std`](https://github.com/bytecodealliance/cap-std) crate was added,
938  replacing the previous implementation. This brings improved robustness,
939  portability, and performance.
940
941* `wasmtime_wasi::WasiCtxBuilder` moved to
942  `wasi_cap_std_sync::WasiCtxBuilder`.
943
944* The WebAssembly C API is updated, with a few minor API changes
945  [#2579](https://github.com/bytecodealliance/wasmtime/pull/2579)
946
947### Fixed
948
949* Fixed a panic in WASI `fd_readdir` on large directories
950  [#2620](https://github.com/bytecodealliance/wasmtime/pull/2620)
951* Fixed a memory leak with command modules
952  [#2017](https://github.com/bytecodealliance/wasmtime/pull/2017)
953
954--------------------------------------------------------------------------------
955
956## 0.22.0
957
958Released 2021-01-07.
959
960### Added
961
962* Experimental support for [the module-linking
963  proposal](https://github.com/WebAssembly/module-linking) was
964  added. [#2094](https://github.com/bytecodealliance/wasmtime/pull/2094)
965
966* Added support for [the reference types
967  proposal](https://webassembly.github.io/reference-types) on the aarch64
968  architecture. [#2410](https://github.com/bytecodealliance/wasmtime/pull/2410)
969
970* Experimental support for [wasi-nn](https://github.com/WebAssembly/wasi-nn) was
971  added. [#2208](https://github.com/bytecodealliance/wasmtime/pull/2208)
972
973### Changed
974
975### Fixed
976
977* Fixed an issue where the `select` instruction didn't accept `v128` SIMD
978  operands. [#2391](https://github.com/bytecodealliance/wasmtime/pull/2391)
979
980* Fixed an issue where Wasmtime could potentially use the wrong stack map during
981  GCs, leading to a
982  panic. [#2396](https://github.com/bytecodealliance/wasmtime/pull/2396)
983
984* Fixed an issue where if a host-defined function erroneously returned a value
985  from a different store, that value would be
986  leaked. [#2424](https://github.com/bytecodealliance/wasmtime/pull/2424)
987
988* Fixed a bug where in certain cases if a module's instantiation failed, it
989  could leave trampolines in the store that referenced the no-longer-valid
990  instance. These trampolines could be reused in future instantiations, leading
991  to use after free bugs.
992  [#2408](https://github.com/bytecodealliance/wasmtime/pull/2408)
993
994* Fixed a miscompilation on aarch64 where certain instructions would read `SP`
995  instead of the zero register. This could only affect you if you explicitly
996  enabled the Wasm SIMD
997  proposal. [#2548](https://github.com/bytecodealliance/wasmtime/pull/2548)
998
999--------------------------------------------------------------------------------
1000
1001## 0.21.0
1002
1003Released 2020-11-05.
1004
1005### Added
1006
1007* Experimental support for the multi-memory proposal was added.
1008  [#2263](https://github.com/bytecodealliance/wasmtime/pull/2263)
1009
1010* The `Trap::trap_code` API enables learning what kind of trap was raised.
1011  [#2309](https://github.com/bytecodealliance/wasmtime/pull/2309)
1012
1013### Changed
1014
1015* WebAssembly module validation is now parallelized.
1016  [#2059](https://github.com/bytecodealliance/wasmtime/pull/2059)
1017
1018* Documentation is now available at docs.wasmtime.dev.
1019  [#2317](https://github.com/bytecodealliance/wasmtime/pull/2317)
1020
1021* Windows now compiles like other platforms with a huge guard page instead of
1022  having its own custom limit which made modules compile and run more slowly.
1023  [#2326](https://github.com/bytecodealliance/wasmtime/pull/2326)
1024
1025* The size of the cache entry for serialized modules has been greatly reduced.
1026  [#2321](https://github.com/bytecodealliance/wasmtime/pull/2321)
1027  [#2322](https://github.com/bytecodealliance/wasmtime/pull/2322)
1028  [#2324](https://github.com/bytecodealliance/wasmtime/pull/2324)
1029  [#2325](https://github.com/bytecodealliance/wasmtime/pull/2325)
1030
1031* The `FuncType` API constructor and accessors are now iterator-based.
1032  [#2365](https://github.com/bytecodealliance/wasmtime/pull/2365)
1033
1034### Fixed
1035
1036* A panic in compiling reference-types-using modules has been fixed.
1037  [#2350](https://github.com/bytecodealliance/wasmtime/pull/2350)
1038
1039--------------------------------------------------------------------------------
1040
1041## 0.20.0
1042
1043Released 2020-09-23.
1044
1045### Added
1046
1047* Support for explicitly serializing and deserializing compiled wasm modules has
1048  been added.
1049  [#2020](https://github.com/bytecodealliance/wasmtime/pull/2020)
1050
1051* A `wasmtime_store_gc` C API was added to run GC for `externref`.
1052  [#2052](https://github.com/bytecodealliance/wasmtime/pull/2052)
1053
1054* Support for atomics in Cranelift has been added. Support is not fully
1055  implemented in Wasmtime at this time, however.
1056  [#2077](https://github.com/bytecodealliance/wasmtime/pull/2077)
1057
1058* The `Caller::get_export` function is now implemented for `Func` references as
1059  well.
1060  [#2108](https://github.com/bytecodealliance/wasmtime/pull/2108)
1061
1062### Fixed
1063
1064* Leaks in the C API have been fixed.
1065  [#2040](https://github.com/bytecodealliance/wasmtime/pull/2040)
1066
1067* The `wasm_val_copy` C API has been fixed for reference types.
1068  [#2041](https://github.com/bytecodealliance/wasmtime/pull/2041)
1069
1070* Fix a panic with `Func::new` and reference types when the store doesn't have
1071  reference types enabled.
1072  [#2039](https://github.com/bytecodealliance/wasmtime/pull/2039)
1073
1074--------------------------------------------------------------------------------
1075
1076## 0.19.0
1077
1078Released 2020-07-14.
1079
1080### Added
1081
1082* The [WebAssembly reference-types proposal][reftypes] is now supported in
1083  Wasmtime and the C API.
1084  [#1832](https://github.com/bytecodealliance/wasmtime/pull/1832),
1085  [#1882](https://github.com/bytecodealliance/wasmtime/pull/1882),
1086  [#1894](https://github.com/bytecodealliance/wasmtime/pull/1894),
1087  [#1901](https://github.com/bytecodealliance/wasmtime/pull/1901),
1088  [#1923](https://github.com/bytecodealliance/wasmtime/pull/1923),
1089  [#1969](https://github.com/bytecodealliance/wasmtime/pull/1969),
1090  [#1973](https://github.com/bytecodealliance/wasmtime/pull/1973),
1091  [#1982](https://github.com/bytecodealliance/wasmtime/pull/1982),
1092  [#1984](https://github.com/bytecodealliance/wasmtime/pull/1984),
1093  [#1991](https://github.com/bytecodealliance/wasmtime/pull/1991),
1094  [#1996](https://github.com/bytecodealliance/wasmtime/pull/1996)
1095
1096* The [WebAssembly simd proposal's][simd] spec tests now pass in Wasmtime.
1097  [#1765](https://github.com/bytecodealliance/wasmtime/pull/1765),
1098  [#1876](https://github.com/bytecodealliance/wasmtime/pull/1876),
1099  [#1941](https://github.com/bytecodealliance/wasmtime/pull/1941),
1100  [#1957](https://github.com/bytecodealliance/wasmtime/pull/1957),
1101  [#1990](https://github.com/bytecodealliance/wasmtime/pull/1990),
1102  [#1994](https://github.com/bytecodealliance/wasmtime/pull/1994)
1103
1104* Wasmtime can now be compiled without the usage of threads for parallel
1105  compilation, although this is still enabled by default.
1106  [#1903](https://github.com/bytecodealliance/wasmtime/pull/1903)
1107
1108* The C API is [now
1109  documented](https://bytecodealliance.github.io/wasmtime/c-api/).
1110  [#1928](https://github.com/bytecodealliance/wasmtime/pull/1928),
1111  [#1959](https://github.com/bytecodealliance/wasmtime/pull/1959),
1112  [#1968](https://github.com/bytecodealliance/wasmtime/pull/1968)
1113
1114* A `wasmtime_linker_get_one_by_name` function was added to the C API.
1115  [#1897](https://github.com/bytecodealliance/wasmtime/pull/1897)
1116
1117* A `wasmtime_trap_exit_status` function was added to the C API.
1118  [#1912](https://github.com/bytecodealliance/wasmtime/pull/1912)
1119
1120* Compilation for the `aarch64-linux-android` target should now work, although
1121  keep in mind this platform is not fully tested still.
1122  [#2002](https://github.com/bytecodealliance/wasmtime/pull/2002)
1123
1124[reftypes]: https://github.com/WebAssembly/reference-types
1125
1126### Fixed
1127
1128* Runtime warnings when using Wasmtime on musl have been fixed.
1129  [#1914](https://github.com/bytecodealliance/wasmtime/pull/1914)
1130
1131* A bug affecting Windows unwind information with functions that have spilled
1132  floating point registers has been fixed.
1133  [#1983](https://github.com/bytecodealliance/wasmtime/pull/1983)
1134
1135### Changed
1136
1137* Wasmtime's default branch and development now happens on the `main` branch
1138  instead of `master`.
1139  [#1924](https://github.com/bytecodealliance/wasmtime/pull/1924)
1140
1141### Removed
1142
1143* The "host info" support in the C API has been removed since it was never fully
1144  or correctly implemented.
1145  [#1922](https://github.com/bytecodealliance/wasmtime/pull/1922)
1146
1147* Support for the `*_same` functions in the C API has been removed in the same
1148  vein as the host info APIs.
1149  [#1926](https://github.com/bytecodealliance/wasmtime/pull/1926)
1150
1151--------------------------------------------------------------------------------
1152
1153## 0.18.0
1154
1155Release 2020-06-09.
1156
1157### Added
1158
1159The `WasmTy` trait is now implemented for `u32` and `u64`.
1160
1161  [#1808](https://github.com/bytecodealliance/wasmtime/pull/1808)
1162
1163--------------------------------------------------------------------------------
1164
1165## 0.17.0
1166
1167Released 2020-06-01.
1168
1169### Added
1170
1171* The [Commands and Reactors ABI] is now supported in the Rust API. `Linker::module`
1172  loads a module and automatically handles Commands and Reactors semantics.
1173
1174  [#1565](https://github.com/bytecodealliance/wasmtime/pull/1565)
1175
1176[Commands and Reactors ABI]: https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md#current-unstable-abi
1177
1178The `Table::grow` function now returns the previous table size, making it consistent
1179with the `table.grow` instruction.
1180
1181  [#1653](https://github.com/bytecodealliance/wasmtime/pull/1653)
1182
1183New Wasmtime-specific C APIs for working with tables were added which provide more
1184detailed error information and which make growing a table more consistent with the
1185`table.grow` instruction as well.
1186
1187  [#1654](https://github.com/bytecodealliance/wasmtime/pull/1654)
1188
1189The C API now includes support for enabling logging in Wasmtime.
1190
1191  [#1737](https://github.com/bytecodealliance/wasmtime/pull/1737)
1192
1193### Changed
1194
1195The WASI `proc_exit` function no longer exits the host process. It now unwinds the
1196callstack back to the wasm entrypoint, and the exit value is available from the
1197`Trap::i32_exit_status` method.
1198
1199  [#1646](https://github.com/bytecodealliance/wasmtime/pull/1646)
1200
1201The WebAssembly [multi-value](https://github.com/WebAssembly/multi-value/) proposal
1202is now enabled by default.
1203
1204  [#1667](https://github.com/bytecodealliance/wasmtime/pull/1667)
1205
1206The Rust API does not require a store provided during `Module::new` operation. The `Module` can be send accross threads and instantiate for a specific store. The `Instance::new` now requires the store.
1207
1208  [#1761](https://github.com/bytecodealliance/wasmtime/pull/1761)
1209
1210--------------------------------------------------------------------------------
1211
1212## 0.16.0
1213
1214Released 2020-04-29.
1215
1216### Added
1217
1218* The `Instance` struct has new accessors, `get_func`, `get_table`,
1219  `get_memory`, and `get_global` for quickly looking up exported
1220  functions, tables, memories, and globals by name.
1221  [#1524](https://github.com/bytecodealliance/wasmtime/pull/1524)
1222
1223* The C API has a number of new `wasmtime_*` functions which return error
1224  objects to get detailed error information when an API fails.
1225  [#1467](https://github.com/bytecodealliance/wasmtime/pull/1467)
1226
1227* Users now have fine-grained control over creation of instances of `Memory`
1228  with a new `MemoryCreator` trait.
1229  [#1400](https://github.com/bytecodealliance/wasmtime/pull/1400)
1230
1231* Go bindings for Wasmtime are [now available][go-bindings].
1232  [#1481](https://github.com/bytecodealliance/wasmtime/pull/1481)
1233
1234* APIs for looking up values in a `Linker` have been added.
1235  [#1480](https://github.com/bytecodealliance/wasmtime/pull/1480)
1236
1237* Preliminary support for AArch64, also known as ARM64.
1238  [#1581](https://github.com/bytecodealliance/wasmtime/pull/1581)
1239
1240[go-bindings]: https://github.com/bytecodealliance/wasmtime-go
1241
1242### Changed
1243
1244* `Instance::exports` now returns `Export` objects which contain
1245  the `name`s of the exports in addition to their `Extern` definitions,
1246  so it's no longer necessary to use `Module::exports` to obtain the
1247  export names.
1248  [#1524](https://github.com/bytecodealliance/wasmtime/pull/1524)
1249
1250* The `Func::call` API has changed its error type from `Trap` to `anyhow::Error`
1251  to distinguish between wasm traps and runtime violations (like the wrong
1252  number of parameters).
1253  [#1467](https://github.com/bytecodealliance/wasmtime/pull/1467)
1254
1255* A number of `wasmtime_linker_*` and `wasmtime_config_*` C APIs have new type
1256  signatures which reflect returning errors.
1257  [#1467](https://github.com/bytecodealliance/wasmtime/pull/1467)
1258
1259* Bindings for .NET have moved to
1260  https://github.com/bytecodealliance/wasmtime-dotnet.
1261  [#1477](https://github.com/bytecodealliance/wasmtime/pull/1477)
1262
1263* Passing too many imports to `Instance::new` is now considered an error.
1264  [#1478](https://github.com/bytecodealliance/wasmtime/pull/1478)
1265
1266### Fixed
1267
1268* Spurious segfaults due to out-of-stack conditions when handling signals have
1269  been fixed.
1270  [#1315](https://github.com/bytecodealliance/wasmtime/pull/1315)
1271
1272--------------------------------------------------------------------------------
1273
1274## 0.15.0
1275
1276Released 2020-03-31.
1277
1278### Fixed
1279
1280Full release produced for all artifacts to account for hiccups in 0.13.0 and
12810.14.0.
1282
1283--------------------------------------------------------------------------------
1284
1285## 0.14.0
1286
1287*This version ended up not getting a full release*
1288
1289### Fixed
1290
1291Fix build errors in wasi-common on Windows.
1292
1293--------------------------------------------------------------------------------
1294
1295## 0.13.0
1296
1297Released 2020-03-24.
1298
1299### Added
1300
1301* Lots of documentation of `wasmtime` has been updated. Be sure to check out the
1302  [book](https://bytecodealliance.github.io/wasmtime/) and [API
1303  documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/)!
1304
1305* All wasmtime example programs are now in a top-level `examples` directory and
1306  are available in both C and Rust.
1307  [#1286](https://github.com/bytecodealliance/wasmtime/pull/1286)
1308
1309* A `wasmtime::Linker` type was added to conveniently link link wasm modules
1310  together and create instances that reference one another.
1311  [#1384](https://github.com/bytecodealliance/wasmtime/pull/1384)
1312
1313* Wasmtime now has "jitdump" support enabled by default which allows [profiling
1314  wasm code on linux][jitdump].
1315  [#1310](https://github.com/bytecodealliance/wasmtime/pull/1310)
1316
1317* The `wasmtime::Caller` type now exists as a first-class way to access the
1318  caller's exports, namely memory, when implementing host APIs. This can be the
1319  first argument of functions defined with `Func::new` or `Func::wrap` which
1320  allows easily implementing methods which take a pointer into wasm memory. Note
1321  that this only works for accessing the caller's `Memory` for now and it must
1322  be exported. This will eventually be replaced with a more general-purpose
1323  mechanism like interface types.
1324  [#1290](https://github.com/bytecodealliance/wasmtime/pull/1290)
1325
1326* The bulk memory proposal has been fully implemented.
1327  [#1264](https://github.com/bytecodealliance/wasmtime/pull/1264)
1328  [#976](https://github.com/bytecodealliance/wasmtime/pull/976)
1329
1330* Virtual file support has been added to `wasi-common`.
1331  [#701](https://github.com/bytecodealliance/wasmtime/pull/701)
1332
1333* The C API has been enhanced with a Wasmtime-specific `wasmtime_wat2wasm` to
1334  parse `*.wat` files via the C API.
1335  [#1206](https://github.com/bytecodealliance/wasmtime/pull/1206)
1336
1337[jitdump]: https://bytecodealliance.github.io/wasmtime/examples-profiling.html
1338
1339### Changed
1340
1341* The `wast` and `wasm2obj` standalone binaries have been removed. They're
1342  available via the `wasmtime wast` and `wasmtime wasm2obj` subcommands.
1343  [#1372](https://github.com/bytecodealliance/wasmtime/pull/1372)
1344
1345* The `wasi-common` crate now uses the new `wiggle` crate to auto-generate a
1346  trait which is implemented for the current wasi snapshot.
1347  [#1202](https://github.com/bytecodealliance/wasmtime/pull/1202)
1348
1349* Wasmtime no longer has a dependency on a C++ compiler.
1350  [#1365](https://github.com/bytecodealliance/wasmtime/pull/1365)
1351
1352* The `Func::wrapN` APIs have been consolidated into one `Func::wrap` API.
1353  [#1363](https://github.com/bytecodealliance/wasmtime/pull/1363)
1354
1355* The `Callable` trait has been removed and now `Func::new` takes a closure
1356  directly.
1357  [#1363](https://github.com/bytecodealliance/wasmtime/pull/1363)
1358
1359* The Cranelift repository has been merged into the Wasmtime repository.
1360
1361* Support for interface types has been temporarily removed.
1362  [#1292](https://github.com/bytecodealliance/wasmtime/pull/1292)
1363
1364* The exit code of the `wasmtime` CLI has changed if the program traps.
1365  [#1274](https://github.com/bytecodealliance/wasmtime/pull/1274)
1366
1367* The `wasmtime` CLI now logs to stderr by default and the `-d` flag has been
1368  renamed to `--log-to-file`.
1369  [#1266](https://github.com/bytecodealliance/wasmtime/pull/1266)
1370
1371* Values cannot cross `Store` objects, meaning you can't instantiate a module
1372  with values from different stores nor pass values from different stores into
1373  methods.
1374  [#1016](https://github.com/bytecodealliance/wasmtime/pull/1016)
1375
1376--------------------------------------------------------------------------------
1377
1378## 0.12.0
1379
1380Released 2020-02-26.
1381
1382### Added
1383
1384* Support for the [WebAssembly text annotations proposal][annotations-proposal]
1385  has been added.
1386  [#998](https://github.com/bytecodealliance/wasmtime/pull/998)
1387
1388* An initial C API for instantiating WASI modules has been added.
1389  [#977](https://github.com/bytecodealliance/wasmtime/pull/977)
1390
1391* A new suite of `Func::getN` functions have been added to the `wasmtime` API to
1392  call statically-known function signatures in a highly optimized fashion.
1393  [#955](https://github.com/bytecodealliance/wasmtime/pull/955)
1394
1395* Initial support for profiling JIT code through perf jitdump has been added.
1396  [#360](https://github.com/bytecodealliance/wasmtime/pull/360)
1397
1398* More CLI flags corresponding to proposed WebAssembly features have been added.
1399  [#917](https://github.com/bytecodealliance/wasmtime/pull/917)
1400
1401[annotations-proposal]: https://github.com/webassembly/annotations
1402
1403### Changed
1404
1405* The `wasmtime` CLI as well as embedding API will optimize WebAssembly code by
1406  default now.
1407  [#973](https://github.com/bytecodealliance/wasmtime/pull/973)
1408  [#988](https://github.com/bytecodealliance/wasmtime/pull/988)
1409
1410* The `verifier` pass in Cranelift is now no longer run by default when using
1411  the embedding API.
1412  [#882](https://github.com/bytecodealliance/wasmtime/pull/882)
1413
1414### Fixed
1415
1416* Code caching now accurately accounts for optimization levels, ensuring that if
1417  you ask for optimized code you're not accidentally handed unoptimized code
1418  from the cache.
1419  [#974](https://github.com/bytecodealliance/wasmtime/pull/974)
1420
1421* Automated releases for tags should be up and running again, along with
1422  automatic publication of the `wasmtime` Python package.
1423  [#971](https://github.com/bytecodealliance/wasmtime/pull/971)
1424