Skip to main content

Upgrade to WasmEdge-Go v0.14.0

Due to the WasmEdge-Go API breaking changes, this document shows the guideline of programming with WasmEdge-Go API to upgrade from the v0.13.5 to the v0.14.0 version.

Concepts

  1. wasmedge.ValType and wasmedge.RefType const values are replaced by the wasmedge.ValType struct.

    Removed wasmedge.ValType and wasmedge.RefType const values, and introduced the wasmedge.ValType struct.

    • Added the wasmedge.NewValTypeI32() API to replace the wasmedge.ValType_I32 const value.
    • Added the wasmedge.NewValTypeI64() API to replace the wasmedge.ValType_I64 const value.
    • Added the wasmedge.NewValTypeF32() API to replace the wasmedge.ValType_F32 const value.
    • Added the wasmedge.NewValTypeF64() API to replace the wasmedge.ValType_F64 const value.
    • Added the wasmedge.NewValTypeV128() API to replace the wasmedge.ValType_V128 const value.
    • Added the wasmedge.NewValTypeFuncRef() API to replace the wasmedge.ValType_FuncRef const value.
    • Added the wasmedge.NewValTypeExternRef() API to replace the wasmedge.ValType_ExterunRef const value.

    The wasmedge.ValType struct provides the series member functions to check the value type.

    Besides, the APIs related to the value types are also updated:

    • wasmedge.NewFunctionType() accepts the new []*wasmedge.ValType for parameters now.
    • (*wasmedge.FunctionType).GetParameters() returns the new []*wasmedge.ValType now.
    • (*wasmedge.FunctionType).GetReturns() returns the new []*wasmedge.ValType now.
    • wasmedge.NewTableType() accepts the new *wasmedge.ValType instead of wasmedge.RefType for parameters now.
    • (*wasmedge.TableType).GetRefType() returns the new *wasmedge.ValType now.
    • wasmedge.NewGlobalType() accepts the new *wasmedge.ValType for parameters now.
    • (*wasmedge.GlobalType).GetValType() returns the new *wasmedge.ValType now.

    For the examples of the new wasmedge.ValType struct and affacted APIs, please refer to the example below.

  2. Developers should handle the error when calling (*wasmedge.Global).SetValue() API.

    With the GC and typed-function references proposals, there are new reference types that accepts non-nullable values. Therefore, when setting value into a global instance, the error occurs if developers set a null value into a non-nullable value type global. Developers should detect and handle the error when setting value into a global instance now.

Before the version v0.13.5, developers can use the const value of value types with function type APIs, and reference types with table type APIs:

// Create a function type: {i32, i64, funcref} -> {f32}
functype := wasmedge.NewFunctionType(
[]wasmedge.ValType{
wasmedge.ValType_I32,
wasmedge.ValType_I64,
wasmedge.ValType_FuncRef,
},
[]wasmedge.ValType{
wasmedge.ValType_F32,
})

// Get the parameter types
var ptypes []wasmedge.ValType = functype.GetParameters()
if ptypes[0] == wasmedge.ValType_I32 {
// This will be true here.
// ...
}
functype.Release()

// Create a table type: {min: 1}, externref
lim := wasmedge.NewLimit(1)
tabtype := wasmedge.NewTableType(wasmedge.RefType_ExternRef, lim)

// Get the reference type
if tabtype.GetRefType() == wasmedge.RefType_ExternRef {
// This will be true here.
// ...
}
tabtype.Release()

After v0.14.0, developers should use the wasmedge.ValType related APIs to create the value types.

// Create a function type: {i32, i64, funcref} -> {f32}
functype := wasmedge.NewFunctionType(
[]*wasmedge.ValType{
wasmedge.NewValTypeI32(),
wasmedge.NewValTypeI64(),
wasmedge.NewValTypeFuncRef(),
},
[]*wasmedge.ValType{
wasmedge.NewValTypeF32,
})

// Get the parameter types
var ptypes []*wasmedge.ValType = functype.GetParameters()
if ptypes[0].IsI32() {
// This will be true here.
// ...
}
functype.Release()

// Create a table type: {min: 1}, externref
lim := wasmedge.NewLimit(1)
tabtype := wasmedge.NewTableType(wasmedge.NewValTypeExternRef(), lim)

// Get the reference type
if tabtype.GetRefType().IsExternRef() {
// This will be true here.
// ...
}
tabtype.Release()