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