WebAssembly
ref: WebAssembly | MDN
- モダンなウェブブラウザーで実行できる新しいタイプのコード
- ネイティブに近いパフォーマンスで動作するコンパクトなバイナリー形式の低レベルなアセンブリ風言語
- C/C++ や Rust のような言語のコンパイル対象となって、それらの言語をウェブ上で実行することができる
- JavaScript と並行して動作するように設計されているため、両方を連携させることができる
- WebAssembly JavaScript API を使用して、 WebAssembly モジュールを JavaScript アプリケーションにロードし、2 つの間で機能を共有
- これにより、WebAssembly コードの記述方法を知らなくても、 WebAssembly のパフォーマンスとパワー、JavaScript の表現力と柔軟性を同じアプリケーションで活用
- ウェブ上で動作するクライアントアプリケーションのために、複数の言語で記述されたコードをウェブ上でネイティブに近いスピードで実行可能
Hello sample
- wasmを動かすjsファイルと,wasmを読み込むhtmlファイルをとってくる
- htmlでは
test.wasm
を参照
- htmlでは
1cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
2curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.html
- goファイルを書く
1package main
2
3import "fmt"
4
5func main() {
6 fmt.Println("Hello wasm!")
7}
- コンパイルする
GOOS=js GOARCH=wasm go build -o test.wasm main.go
- サーバを立ててる
1package main
2
3import (
4 "flag"
5 "log"
6 "net/http"
7)
8
9var (
10 listen = flag.String("listen", ":8080", "listen address")
11 dir = flag.String("dir", "", "directory to serve")
12)
13
14func main() {
15 flag.Parse()
16 log.Printf("listening on %q...", *listen)
17 log.Fatal(http.ListenAndServe(*listen, http.FileServer(http.Dir(*dir))))
18}
1go run server.go
http://localhost:8080/wasm_exec.html
にアクセスしRunボタンを押して,コンソール出力されることを確認
所感
- フロントの処理をGoとかRustでかけるの面白い,性能いいのかな
- サンプル見るにDOM操作とか書くのしんどいんだけどライブラリとかあるのかな
- ないとjquery以前に戻ってる気が
Tagged: #Go #WebAssembly