Giter Site home page Giter Site logo

dolanor-galaxy / wypes Goto Github PK

View Code? Open in Web Editor NEW

This project forked from orsinium-labs/wypes

0.0 0.0 0.0 71 KB

Go library to define type-safe host functions in wazero and other WebAssembly runtimes.

Home Page: https://pkg.go.dev/github.com/orsinium-labs/wypes

License: MIT License

Go 100.00%

wypes's Introduction

wypes

Go library to define type-safe host functions in wazero and other WebAssembly runtimes.

Features:

  • ๐Ÿ›ก Type safe
  • ๐ŸŽ Fast
  • ๐Ÿ”จ Works with any WebAssmebly runtime, like wazero or wasman
  • ๐Ÿง  Handles for you memory operations
  • ๐Ÿ‘‰ Manages external references
  • ๐Ÿงผ Simple and clean API
  • ๐Ÿœ Can be compiled with TinyGo
  • ๐Ÿ˜Ž No reflect, no unsafe, only generics and dedication.

๐Ÿ“ฆ Installation

go get github.com/orsinium-labs/wypes

๐Ÿ”ง Usage

Define a function using provided types:

func addI32(a wypes.Int32, b wypes.Int32) wypes.Int32 {
    return a + b
}

Define a mapping of module and function names to function definitions:

modules := wypes.Modules{
    "env": {
        "add_i32": wypes.H2(addI32),
    },
}

Link the modules to the runtime. We provide a convenience method to do this for wazero:

err := modules.DefineWazero(r, nil)

That's it! Now the wasm module can call the env.add_i32 function.

๐Ÿ›น Tricks

The library provides lots of useful types that you can use in your functions. Make sure to check the docs. A few highlights:

  1. Context provides access to the context.Context passed into the guest function call in wazero.
  2. Store provides access to all the state: memory, stack, references.
  3. Duration and Time to pass time.Duration and time.Time (as UNIX timestamp).
  4. HostRef can hold a reference to the Refs store of host objects.
  5. Void is used as the return type for functions that return no value.

See documentation for more.

wypes's People

Contributors

orsinium avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.