Upgrade to WasmEdge 0.13.0
Due to the WasmEdge C API breaking changes, this document shows the guideline for programming with WasmEdge C API to upgrade from the 0.12.1 to the 0.13.0 version.
In this version, there are only new features. Developers can build their original source with this WasmEdge version directly.
Concepts
- Introduced new API for setting data and its finalizer into module instances when creation. - Developers can use the - WasmEdge_ModuleInstanceCreateWithData()API to set the host data and its finalizer into the module instance.
- Asynchronously invoking WASM function by executor. - Developers can use the - WasmEdge_ExecutorAsyncInvoke()API to execute a WASM function asynchronously.
- Unified WasmEdge CLI. - Developers can use the - WasmEdge_Driver_UniTool()API to trigger the unified WasmEdge CLI.
Set data and its finalizer into a module instance when creation
Besides setting host data into a host function, developers can set and move ownership of host data into a Module instance context with its finalizer. This may be useful when implementing the plug-ins.
/* Struct definition. */
typedef struct Point {
  int X;
  int Y;
} Point;
/* Host function body definition. */
WasmEdge_Result Print(void *Data,
                      const WasmEdge_CallingFrameContext *CallFrameCxt,
                      const WasmEdge_Value *In, WasmEdge_Value *Out) {
  Point *P = (Point *)In;
  printf("Point: (%d, %d)\n", P->X, P->Y);
  return WasmEdge_Result_Success;
}
/* Finalizer definition. */
void PointFinalizer(void *Data) {
  if (Data) {
    free((Point *)Data);
  }
}
/* Create a module instance with host data and its finalizer. */
WasmEdge_String ExportName = WasmEdge_StringCreateByCString("module");
Point *Data = (Point *)malloc(sizeof(Point));
Data->X = 5;
Data->Y = -5;
WasmEdge_ModuleInstanceContext *HostModCxt =
    WasmEdge_ModuleInstanceCreateWithData(ExportName, Data, PointFinalizer);
/*
 * When the `HostModCxt` being destroyed, the finalizer will be invoked and the
 * `Data` will be its argument.
 */
WasmEdge_StringDelete(ExportName);
Unified WasmEdge CLI
The WasmEdge_Driver_UniTool() API presents the same function as running the wasmedge tool.
#include <wasmedge/wasmedge.h>
#include <stdio.h>
int main(int argc, const char *argv[]) {
  /* Run the WasmEdge unified tool. */
  /* (Within both runtime and AOT compiler) */
  return WasmEdge_Driver_UniTool(argc, argv);
}