-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
53 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# Using WebAssembly from Elixir | ||
|
||
Wasmtime [is available on Hex](https://hex.pm/packages/wasmex) and can | ||
be used programmatically to interact with Wasm modules. This guide will go over | ||
installing the wasmex package and running a simple Wasm module from Elixir. | ||
|
||
## Getting started and simple example | ||
|
||
First, copy this example WebAssembly text module into the current directory. It exports | ||
a function for calculating the greatest common denominator of two numbers. | ||
|
||
```wat | ||
{{#include ../examples/gcd.wat}} | ||
``` | ||
|
||
The library has a Rust-based native extension, but thanks to `rustler_precompiled`, you | ||
should not have to compile anything. It'll just work! | ||
|
||
This WAT file can be executed in `iex`: | ||
|
||
```elixir | ||
Mix.install([:wasmex]) | ||
bytes = File.read!("gcd.wat") | ||
{:ok, pid} = Wasmex.start_link(%{bytes: bytes}) # starts a GenServer running a WASM instance | ||
Wasmex.call_function(pid, "gcd", [27, 6]) | ||
``` | ||
|
||
The last command should output: | ||
|
||
```elixir | ||
iex(5)> Wasmex.call_function(pid, "gcd", [27, 6]) | ||
{:ok, [3]} | ||
``` | ||
|
||
If this is the output you see, congrats! You've successfully ran your first | ||
WebAssembly code in Elixir! | ||
|
||
## More examples and contributing | ||
|
||
To learn more, check out an [another example](https://github.com/tessi/wasmex#example) | ||
and the [API documentation](https://hexdocs.pm/wasmex/Wasmex.html). | ||
If you have any questions, do not hesitate to open an issue on the | ||
[GitHub repository](https://github.com/tessi/wasmex). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters