Documentation
¶
Index ¶
- Constants
- Variables
- func DecodeExternref(input uint64) uintptr
- func DecodeF32(input uint64) float32
- func DecodeF64(input uint64) float64
- func EncodeExternref(input uintptr) uint64
- func EncodeF32(input float32) uint64
- func EncodeF64(input float64) uint64
- func EncodeI32(input int32) uint64
- func EncodeI64(input int64) uint64
- func ExternTypeName(et ExternType) string
- func ValueTypeName(t ValueType) string
- func ValueTypeToReflectType(v ValueType) reflect.Type
- type Backend
- type Config
- type Context
- type ExternType
- type Factory
- type Function
- type FunctionDefinition
- type FunctionInstance
- type FunctionInstanceCommon
- type Global
- type HostFunction
- type HostModule
- type HostModuleDefinitions
- type HostModuleFunctionDefinition
- type HostModuleGlobalDefinition
- type HostModuleMemoryDefinition
- type Instance
- type Loader
- type Memory
- type MemorySizer
- type Module
- type ModuleInstance
- type MutableGlobal
- type OutputType
- type Plugin
- type PluginInstance
- type Resolver
- type Return
- type Runtime
- type Service
- type Source
- type SourceModule
- type ValueType
Constants ¶
const ( // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#memory-instances%E2%91%A0 MemoryPageSize = uint32(65536) // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#grow-mem MemoryLimitPages = uint32(65536) )
const ( // ExternTypeFuncName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeFunc. ExternTypeFuncName = "func" // ExternTypeTableName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeTable. ExternTypeTableName = "table" // ExternTypeMemoryName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeMemory. ExternTypeMemoryName = "memory" // ExternTypeGlobalName is the name of the WebAssembly 1.0 (20191205) Text Format field for ExternTypeGlobal. ExternTypeGlobalName = "global" )
The below are exported to consolidate parsing behavior for external types.
Variables ¶
var ( I32Type = reflect.TypeOf((*int32)(nil)).Elem() I64Type = reflect.TypeOf((*int64)(nil)).Elem() F32Type = reflect.TypeOf((*float32)(nil)).Elem() F64Type = reflect.TypeOf((*float64)(nil)).Elem() ContextType = reflect.TypeOf((*context.Context)(nil)).Elem() ModuleType = reflect.TypeOf((*Module)(nil)).Elem() )
var ( GetTimeout = 60 * time.Second //TODO: Lookup should handle timeout (tns fetch may need to take context) LookupTimeout = 10 * time.Second )
Functions ¶
func DecodeExternref ¶
DecodeExternref decodes the input as a ValueTypeExternref.
func EncodeExternref ¶
EncodeExternref encodes the input as a ValueTypeExternref.
func ExternTypeName ¶
func ExternTypeName(et ExternType) string
ExternTypeName returns the name of the WebAssembly 1.0 (20191205) Text Format field of the given type.
func ValueTypeName ¶
ValueTypeName returns the type name of the given ValueType as a string. These type names match the names used in the WebAssembly text format.
func ValueTypeToReflectType ¶
Types ¶
type Config ¶
type Config struct { MemoryLimitPages uint32 // should default to MemoryLimitPages Output OutputType }
Config sets configuration of the VM service
type Context ¶
type Context interface { // Context returns the go context of the function instance Context() context.Context // Project returns the Taubyte project id Project() string // Application returns the application, if none returns an empty string Application() string // Resource returns the id of the resource being used. Resource() string // Branch returns the branch name used by this resource execution pipeline. Branch() string // Commit returns the commit id used by this resource execution pipeline. Commit() string // Clone clones the VM.Context with a new go context Clone(context.Context) Context }
type ExternType ¶
type ExternType = byte
ExternType classifies imports and exports with their respective types.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#external-types%E2%91%A0
const ( ExternTypeFunc ExternType = 0x00 ExternTypeTable ExternType = 0x01 ExternTypeMemory ExternType = 0x02 ExternTypeGlobal ExternType = 0x03 )
type Factory ¶
type Factory interface { // Load will initialize the Factory Load(hm HostModule) error // Close will close and cleanup the Factory Close() error // Name returns the name of the Factory Name() string }
type Function ¶
type Function interface { // Definition is metadata about this function from its defining module. Definition() FunctionDefinition // Call invokes the function with parameters encoded according to ParamTypes. Up to one result is returned. Call(ctx context.Context, params ...uint64) ([]uint64, error) }
Function is a WebAssembly function exported from an instantiated module.
type FunctionDefinition ¶
type FunctionDefinition interface { // Name is the module-defined name of the function, which is not necessarily // the same as its export name. Name() string // ParamTypes are the possibly empty sequence of value types accepted by a // function with this signature. ParamTypes() []ValueType // ResultTypes are the results of the function. ResultTypes() []ValueType }
FunctionDefinition is a WebAssembly function exported in a module.
type FunctionInstance ¶
type FunctionInstanceCommon ¶
type FunctionInstanceCommon interface { // Cancel will cancel the context of the FunctionInstance Cancel() error }
type Global ¶
type Global interface { // Type describes the numeric type of the global. Type() ValueType // Get returns the last known value of this global. When the context is nil, it defaults to context.Background. Get() uint64 }
Global is a WebAssembly 1.0 (20191205) global exported from an instantiated module.
type HostFunction ¶
type HostFunction interface{}
HostFunction is the function handler of a HostModuleFunctionDefinition
type HostModule ¶
type HostModule interface { // Functions adds the function definitions to the HostModule Functions(...*HostModuleFunctionDefinition) error // Memory adds the memory definitions to the HostModule Memories(...*HostModuleMemoryDefinition) error // Globals adds the global definitions to the HostModule Globals(...*HostModuleGlobalDefinition) error // Compile will compile the defined HostModule, and return a ModuleInstance Compile() (ModuleInstance, error) }
type HostModuleDefinitions ¶
type HostModuleDefinitions struct { Functions []*HostModuleFunctionDefinition Memories []*HostModuleMemoryDefinition Globals []*HostModuleGlobalDefinition }
type HostModuleFunctionDefinition ¶
type HostModuleFunctionDefinition struct { Name string Handler HostFunction }
HostModuleFunctionDefinition is the definition of a Function within a HostModule
type HostModuleGlobalDefinition ¶
type HostModuleGlobalDefinition struct { Name string Value interface{} }
HostModuleGlobalDefinition is Global Value stored within the HostModule
type HostModuleMemoryDefinition ¶
type HostModuleMemoryDefinition struct { Name string Pages struct { Min uint64 Max uint64 Maxed bool } }
HostModuleMemoryDefinition is the memory definition of the Host Module.
type Instance ¶
type Instance interface { // Context returns the context of the function Instance Context() Context // Close will close the Instance Close() error // Runtime returns a new Function Instance Runtime Runtime(*HostModuleDefinitions) (Runtime, error) // Filesystem returns the filesystem used by the given Instance. Filesystem() afero.Fs // Stdout returns the Reader interface of stdout Stdout() io.Reader // Stderr returns the Reader interface of stderr Stderr() io.Reader }
type Loader ¶
type Loader interface { // Load resolves the module, then loads the module using a Backend Load(ctx Context, module string) (io.ReadCloser, error) }
type Memory ¶
type Memory interface { Size() uint32 // Grow increases memory by the delta in pages (65536 bytes per page). Grow(deltaPages uint32) (previousPages uint32, ok bool) // ReadByte reads a single byte from the underlying buffer at the offset or returns false if out of range. ReadByte(offset uint32) (byte, bool) // ReadUint16Le reads a uint16 in little-endian encoding from the underlying buffer at the offset in or returns // false if out of range. ReadUint16Le(offset uint32) (uint16, bool) // ReadUint32Le reads a uint32 in little-endian encoding from the underlying buffer at the offset in or returns // false if out of range. ReadUint32Le(offset uint32) (uint32, bool) // ReadFloat32Le reads a float32 from 32 IEEE 754 little-endian encoded bits in the underlying buffer at the offset // or returns false if out of range. ReadFloat32Le(offset uint32) (float32, bool) // ReadUint64Le reads a uint64 in little-endian encoding from the underlying buffer at the offset or returns false // if out of range. ReadUint64Le(offset uint32) (uint64, bool) // ReadFloat64Le reads a float64 from 64 IEEE 754 little-endian encoded bits in the underlying buffer at the offset // or returns false if out of range. ReadFloat64Le(offset uint32) (float64, bool) // Read reads byteCount bytes from the underlying buffer at the offset or // returns false if out of range. Read(offset, byteCount uint32) ([]byte, bool) // WriteByte writes a single byte to the underlying buffer at the offset in or returns false if out of range. WriteByte(offset uint32, v byte) bool // WriteUint16Le writes the value in little-endian encoding to the underlying buffer at the offset in or returns // false if out of range. WriteUint16Le(offset uint32, v uint16) bool // WriteUint32Le writes the value in little-endian encoding to the underlying buffer at the offset in or returns // false if out of range. WriteUint32Le(offset, v uint32) bool // WriteFloat32Le writes the value in 32 IEEE 754 little-endian encoded bits to the underlying buffer at the offset // or returns false if out of range. WriteFloat32Le(offset uint32, v float32) bool // WriteUint64Le writes the value in little-endian encoding to the underlying buffer at the offset in or returns // false if out of range. WriteUint64Le(offset uint32, v uint64) bool // WriteFloat64Le writes the value in 64 IEEE 754 little-endian encoded bits to the underlying buffer at the offset // or returns false if out of range. WriteFloat64Le(offset uint32, v float64) bool // Write writes the slice to the underlying buffer at the offset or returns false if out of range. Write(offset uint32, v []byte) bool }
Memory allows restricted access to a module's memory. Notably, this does not allow growing.
type MemorySizer ¶
MemorySizer applies during compilation after a module has been decoded from wasm, but before it is instantiated.
type Module ¶
type Module interface { // Name is the name this module was instantiated with. Exported functions can be imported with this name. Name() string // Memory returns a memory defined in this module or nil if there are none wasn't. Memory() Memory // ExportedFunction returns a function exported from this module or nil if it wasn't. ExportedFunction(name string) Function // ExportedMemory returns a memory exported from this module or nil if it wasn't. ExportedMemory(name string) Memory // ExportedGlobal a global exported from this module or nil if it wasn't. ExportedGlobal(name string) Global // CloseWithExitCode releases resources allocated for this Module. Use a non-zero exitCode parameter to indicate a // failure to ExportedFunction callers. When the context is nil, it defaults to context.Background. CloseWithExitCode(exitCode uint32) error // Close closes the resource. When the context is nil, it defaults to context.Background. Close(context.Context) error }
Module return functions exported in a module, post-instantiation.
type ModuleInstance ¶
type ModuleInstance interface { // Function returns a FunctionInstance of given name from the ModuleInstance Functions() []FunctionDefinition Function(name string) (FunctionInstance, error) Memory() Memory }
type MutableGlobal ¶
type MutableGlobal interface { Global // Set updates the value of this global. When the context is nil, it defaults to context.Background. Set(v uint64) }
MutableGlobal is a Global whose value can be updated at runtime (variable).
type Plugin ¶
type Plugin interface { // New creates a new PluginInstance New(Instance) (PluginInstance, error) // Name returns the name of the Plugin Name() string Close() error }
TODO: New takes options for factories
type PluginInstance ¶
type PluginInstance interface { // Load will load all Factories to the HostModule, and return the ModuleInstance Load(HostModule) (ModuleInstance, error) // Close will close the PluginInstance Close() error }
type Runtime ¶
type Runtime interface { Module(name string) (ModuleInstance, error) Expose(name string) (HostModule, error) Attach(plugin Plugin) (PluginInstance, ModuleInstance, error) Stdout() io.Reader Stderr() io.Reader // TODO: Add Runtime Stat Close() error }
type Source ¶
type Source interface { // Module Loads the given module name, and returns the SourceModule Module(ctx Context, name string) (SourceModule, error) }
type SourceModule ¶
type SourceModule []byte
type ValueType ¶
type ValueType = byte
ValueType describes a numeric type used in Web Assembly 1.0 (20191205).
const ( // ValueTypeI32 is a 32-bit integer. ValueTypeI32 ValueType = 0x7f // ValueTypeI64 is a 64-bit integer. ValueTypeI64 ValueType = 0x7e // ValueTypeF32 is a 32-bit floating point number. ValueTypeF32 ValueType = 0x7d // ValueTypeF64 is a 64-bit floating point number. ValueTypeF64 ValueType = 0x7c // ValueTypeExternref is a externref type. ValueTypeExternref ValueType = 0x6f )