forked from Mirrors/wasm3
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.2 KiB
2.2 KiB
Wasm3 Cookbook
Rust WASI app
Create a new project:
$ cargo new --bin hello
$ cd hello
$ rustup target add wasm32-wasi
Build and run:
$ cargo build --release --target wasm32-wasi
$ wasm3 ./target/wasm32-wasi/release/hello.wasm
Hello, world!
AssemblyScript WASI app
Create hello.ts
:
import "wasi"
import {Console} from "as-wasi"
Console.log('Hello World!');
Create package.json
:
{
"name": "hello",
"version": "1.0.0",
"description": "Hello world with AssemblyScript and as-wasi",
"main": "hello.ts",
"scripts": {
"build": "asc hello.ts -b hello.wasm"
},
"devDependencies": {
"assemblyscript": "^0.18.30",
"as-wasi": "^0.4.4"
}
}
Build and run:
$ npm install
$ npm run build
$ wasm3 hello.wasm
Hello World!
TinyGo WASI app
Create hello.go
:
package main
import "fmt"
func main() {
fmt.Printf("Hello, %s!\n", "world")
}
Build and run:
$ tinygo build -o hello.wasm -target wasi ./hello.go
$ wasm3 hello.wasm
Hello, world!
Zig WASI app
Create hello.zig
:
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, {s}!\n", .{"world"});
}
Build and run:
$ zig build-exe -O ReleaseSmall -target wasm32-wasi hello.zig
$ wasm3 hello.wasm
Hello, world!
Zig library
Create add.zig
:
export fn add(a: i32, b: i32) i64 {
return a + b;
}
Build and run:
$ zig build-lib add.zig -O ReleaseSmall -target wasm32-freestanding
$ wasm3 --repl add.wasm
wasm3> add 1 2
Result: 3
C/C++ WASI app
The easiest way to start is to use Wasienv.
Create hello.cpp
:
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
Or hello.c
:
#include <stdio.h>
int main() {
printf("Hello, %s!\n", "world");
return 0;
}
Build and run:
$ wasic++ -O3 hello.cpp -o hello.wasm
$ wasicc -O3 hello.c -o hello.wasm
$ wasm3 hello.wasm
Hello World!
Limitations:
setjmp/longjmp
andC++ exceptions
are not available- no support for
threads
andatomics
- no support for
dynamic libraries