wasmify
Use WASM in Gleam !
Usage
(see /example/src/example.gleam
for a demo)
decompiled math.wasm
(module
(import "gleam" "print" (func $print (param f32) (result f32)))
(func (export "pythagorean") (param f32 f32) (result f32)
(local $x f32)
(local $y f32)
local.get 0
local.get 0
f32.mul
local.set $x
local.get 1
local.get 1
f32.mul
local.set $y
local.get $x
local.get $y
f32.add
f32.sqrt
call $print
)
)
mod.gleam
import gleam/float
import wasmify/types.{Get}
import wasmify/wasm.{function, get, instance, load_wasm, load_wasm_sync, module, namespace} // load_wasm_sync only works in non browser runtimes and returns Result(Promise(file), String)
fn print_float(value: Float) -> Float {
io.println("result is: " <> float.to_string(value))
value
}
pub fn main() {
let assert Ok(file) = load_wasm_sync
let wasm = module(file) |> instance([namespace("gleam", [#("print", function(print_int))])])
let assert Ok(pythagorean): Get(fn (Float, Float) -> Float) = get(wasm, "pythagorean")
let res = pythagorean(3.0, 4.0)
case 5.0 == pythagorean(3.0, 4.0) {
True -> io.print("all good!")
False -> panic
}
}
Installation
This package can be added to your Gleam project:
gleam add wasmify
and its documentation can be found at https://hexdocs.pm/wasmify.