Upgrade to Pro — share decks privately, control downloads, hide ads and more …

go:wasmexport

asuka
September 20, 2024

 go:wasmexport

asuka

September 20, 2024
Tweet

More Decks by asuka

Other Decks in Technology

Transcript

  1. asuka (@a_skua) • 株式会社モニクル ◦ SWE / プロダクトSRE • WebAssemblyの同人誌を書いている人

    ◦ WebAssemblyでできること ▪ 商業誌版:実践入門WebAssembly ◦ ご注文はWASIですか? ◦ ご注文はWASIですか?? ◦ WebAssembly Cookbook vol.1 2 WHOIS
  2. Go1.23時点のWasmサポート状況 go:wasmimportという構文をサポートしている • Go1.21とWebAssembly 6 package main //go:wasmimport add a

    func addA() int32 //go:wasmimport add b func addB() int32 var a, b int32 func main() { a = addA() b = addB() } import "./wasm_exec.js"; const go = new Go(); const { instance } = await WebAssembly.instantiateStreaming( fetch(new URL("main.wasm", import.meta.url)), { ...go.importObject, add: { a: () => 10, b: () => 20, }, }, ); go.run(instance);
  3. Go1.23時点のWasmサポート状況 go:wasmimportという構文をサポートしているが,go:wasmexportはサポートされていない • Go1.21とWebAssembly 7 package main //go:wasmimport add a

    func addA() int32 //go:wasmimport add b func addB() int32 var a, b int32 func main() { a = addA() b = addB() } import "./wasm_exec.js"; const go = new Go(); const { instance } = await WebAssembly.instantiateStreaming( fetch(new URL("main.wasm", import.meta.url)), { ...go.importObject, add: { a: () => 10, b: () => 20, }, }, ); go.run(instance);
  4. Go1.24からはこう書けるようになる 10 package main //go:wasmexport add func add() int32 {

    return a + b } //go:wasmimport add a func addA() int32 //go:wasmimport add b func addB() int32 var a, b int32 func main() { a = addA() b = addB() } import "./wasm_exec.js"; const go = new Go(); const { instance } = await WebAssembly.instantiateStreaming( fetch(new URL("main.wasm", import.meta.url)), { ...go.importObject, add: { a: () => 10, b: () => 20, }, }, ); go.run(instance); console.log(instance.exports.add());