In version 0.10.0, WasmEdge provides a brand new plug-in mechanism to make native extensions easier to develop and install, improves compatibility with LLVM 14, and supports new WebAssembly specs, proposals, and features.
- New plug-in system for native host functions
- Many enhancements to the WasmEdge socket API (e.g., microservices and web service clients in WasmEdge)
- Support for new WebAssembly proposals and specs
- WasmEdge C API enhancements
- Other features and bug fixes
New plug-in system for native Host Functions
The host funtion is the bridge that allows WebAssembly programs to access functionalities and features provided by native libraries. It is how we extend a WebAssembly runtime with more features and capabilities. For example, the WASI standard itself is to make libc
system calls available to WebAssembly apps through host functions.
The WasmEdge's TensorFlow, NN, Socket, and Image processing extensions are all implemented in host functions. Therefore, it is critical for a WebAssembly runtime to support developer-friendly host functions.
The new WasmEdge plug-in system aims to simplify host function development and management. For developers, the plug-in system makes it easy to create new WasmEdge extensions using a unified host function interface. Check out our guide on how to use WasmEdge's plug-in system to add host functions in the WasmEdge Book. Give it a try.
C++ is the only programming language to write WasmEdge plug-ins for now. However, we are adding support for Rust and C soon.
For WasmEdge users, you can now enable or disable WasmEdge extensions by simply adding or removing files containing the host functions in a WasmEdge folder. The plug-in system makes it easy and safe for users to manage a large number of developer-contributed WasmEdge extensions in the future.
As an example, the WasmEdge team has implemented the wasmedge_process
extension as a plug-in. Once installed, it allows WebAssembly programs to call operating system commands. Over the next several weeks, the team will port WasmEdge's existing extensions to the new plug-in format. You're also welcome to contribute your own host function-based extensions for WasmEdge.
Wasi-socket enhancements
WasmEdge has supported networking socket in WasmEdge 0.8.2. The WasmEdge networking sockets are non-blocking and high-performance. It is the only WebAssembly runtime that can run web services applications today. Many developers have tried to create and deploy WasmEdge-based web services or clients. In this release, we continue to improve WasmEdge socket API for developers.
- Both IPV4 and IPV6 modes
- UDP functions:
send_to
andresv_from
- DNS name lookup
- Checking socket options enum for valid value
- Fixed: wasi-socket on MacOS
- Fixed: error when calling
poll_oneoff
with the same fd twice and when callingfd_close
on socket. - Zero-terminated string for
::getaddrinfo
.
Going forward, we are going to provide a wasm-compatible Rust TLS implementation to support
HTTPS
and create a Tokio async runtime in WasmEdge.
C API enhancements
The C API is the basis for other language APIs for WasmEdge, such as the WasmEdge Rust API and WasmEdge Go API. This release improves the WasmEdge C API.
- Merged the
WasmEdge_ImportObjectContext
into theWasmEdge_ModuleInstanceContext
. - Used the pointer to
WasmEdge_FunctionInstanceContext
instead of the index in theFuncRef
value type. - Moved the functions of
WasmEdge_StoreContext
to theWasmEdge_ModuleInstanceContext
. - Updated the
WasmEdge_VMContext
APIs.
This new release also brings new C API and Go API docs. For developers who want to use the updated C and Go APIs, please refer to the WasmEdge Book.
Standard Wasm extensions
WasmEdge thrives to be fully compliant with WebAssembly standards, and supports all mandatory and optional WebAssembly specs. From release 0.10.0, WasmEdge provides support for the Tail Call
and extended-const
proposals.
Other new features and bug fixes
In addition to the above features, some features need to be taken care of.
- LLVM 14 compatibility, which improves performance.
- thread-safe in
WasmEdge_VMContext
,WasmEdge_ConfigureContext
,WasmEdge_ModuleInstanceContext
, andWasmEdge_StoreContext APIs
. - Gas limit in the AOT mode allows applications to be precisely metered in WasmEdge.
- New unit tests.
To learn more about the WasmEdge 0.10.0 release, check out our changelog (https://github.com/WasmEdge/WasmEdge/releases/tag/0.10.0)! Join us!
Finally, a big thanks to all our contributors!
apepkuss, dm4, q82419, cyw3, SAtacker, ibmibmibm, hydai, gusy1234, hangedfish, 0yi0, tpmccallum, MediosZ, hantmc, LFsWang, eat4toast, eee4017, situ2001, meoww-bot, juntao, mfordjody, joyaaa, sunnywa, DarumaDocker, spacewander, luckyJ-nj, mydreamer4134, malc0lm,kgpp34, wenchajun, laingke, cold-Elite, border1px, zhuyaguang, bbcfive, JooKS-me, KerneIErr, zswaaa, zhannicholas, O3OI, KcjinChen, FlyingOnion, swartz-k, Bevisy, deyuhua, zephoon, abhinandanudupa, chinzhiweiblank.
👉 Discord: https://discord.gg/5hPQ2H5fcg
👉 Mailing list: Send an email to WasmEdge@googlegroups.com
👉 Twitter: @realwasmedge
👉 Be a contributor: checkout the good-first-issue to start contributing!