NAME
Wasm::Wasmer::Module
SYNOPSIS
my $module = Wasm::Wasmer::Module->new( $wasm_bin );
… or, to use a pre-built Wasm::Wasmer::Store instance:
my $module = Wasm::Wasmer::Module->new( $wasm_bin, $store );
… then:
my $instance = $module->create_instance();
… or, for WASI:
my $wasi = $module->store()->create_wasi( .. );
my $instance = $module->create_wasi_instance($wasi);
You can also specify imports; see below.
DESCRIPTION
This class represents a parsed WebAssembly module.
See Wasmer’s documentation for a bit more context.
METHODS
$obj = CLASS->new( $WASM_BIN [, $STORE ] )
Parses a WebAssembly module in binary (.wasm
) format and returns a CLASS instance representing that.
(To use text/.wat
format instead, see Wasm::Wasmer’s wat2wasm()
.)
Optionally associates the parse of that module with a Wasm::Wasmer::Store instance.
$instance = OBJ->create_instance( [ \%IMPORTS ] )
Creates a Wasm::Wasmer::Instance instance from OBJ with the (optional) given %IMPORTS. (NB: %IMPORTS is given via reference.)
%IMPORTS is an optional hash-of-hashrefs that describes the set of imports to give to the new instance.
Here’s a simple example that gives a function ns
.give2
to WebAssembly that just returns the number 2:
my $instance = $module->create_instance(
{
ns => {
give2 => sub { 2 },
},
},
);
Other import types are rather more complex because they’re interactive; thus, you have to create them prior to calling create_instance()
and include your import objects in %IMPORTS.
my $const = $module->store()->create_i32_const( 42 );
my $var = $module->store()->create_f64_mut( 2.718281828 );
my $memory = $module->store()->create_memory( initial => 3 );
(Tables are currently unsupported.)
So, if we alter our above example to import our constants and memory as well as the function, we have:
my $instance = $module->create_instance(
{
ns => {
give2 => sub { 2 },
# These values are all pre-created objects:
constvar => $const,
mutvar => $mut,
memory => $memory,
},
},
);
NB: Instances can share imports, even if they’re instances of different WASM modules.
$instance = OBJ->create_wasi_instance( $WASI, [ \%IMPORTS ] )
Creates a Wasm::Wasmer::Instance instance from OBJ. That object’s WebAssembly imports will include the WASI interface.
$WASI argument is either undef or a Wasm::Wasmer::WASI instance. Undef is equivalent to $self->store()->create_wasi()
.
The optional %IMPORTS reference (reference!) is as for create_instance()
. Note that you can override WASI imports with this, if you so desire.
$global = OBJ->create_global( $VALUE )
Creates a Wasm::Wasmer::Import::Global instance. See that module’s documentation for more details.
$global = OBJ->create_memory()
Creates a Wasm::Wasmer::Import::Memory instance. See that module’s documentation for more details. Currently this accepts no parameters; instead it conforms to the WASM module’s needs.
$bytes = OBJ->serialize()
Serializes the in-memory module for later use. (cf. deserialize()
below)
$store = OBJ->store()
Returns OBJ’s underlying Wasm::Wasmer::Store instance.
STATIC FUNCTIONS
$module = deserialize( $SERIALIZED_BIN [, $STORE ] )
Like this class’s new()
method but takes a serialized module rather than WASM code.
$yn = validate( $WASM_BIN [, $STORE ] )
Like this class’s new()
but just returns a boolean to indicate whether $WASM_BIN represents a valid module.