Slide 1

Slide 1 text

Scala to WebAssembly: How and Why Scala わいわい勉強会 #2 tanishiking

Slide 2

Slide 2 text

What is WebAssembly (Wasm)? - ブラウザで実行可能な、高速・安全・ポータブルで、 サイズとロードが高効率なプログラム形式 - 最近は WASI (WebAssembly System Interface) によりブラウ ザ外でも活躍 - 様々な言語から Wasm へコンパイル可能 - C/C++, Rust, Go, Kotlin, Dart, Swift, OCaml, Haskell, etc…

Slide 3

Slide 3 text

Scala -> Wasm へコンパイラバックエンド開発中 https://github.com/scala-js/scala-js/issues/4928

Slide 4

Slide 4 text

Why Wasm is important for Scala? ブラウザでScalaを実行するだけなら Scala.js があるじゃん? ● 高効率なロードと実行・安全性 ● (将来的に) ブラウザ外での活用 ○ Cloud computing (Spin, kruslet) ○ Edge computing (Cloudflare Workers, fastly edge) ○ Plugin systems (Istio plugin, shopify function) ○ Smart Contract (Ethereum Wasm, Near Protocol) ● Wasm Component で他言語との interop

Slide 5

Slide 5 text

https://www.youtube.com/watch?v=QsOHofFJpig 実はかなり前から検討はされていた (2019/06)

Slide 6

Slide 6 text

Lack of Garbage Collection JVMと違ってWasm(Engine)にGCはない(なかった) GC言語をWasmにポートするには ● VM自体をWasmに変換してその上でプログラムを実行 ○ Ruby, Python, JS (QuickJS), Java (CheerPJ) ○ VMを含んでいるので Wasm module が巨大 ● GCコードをWasm moduleに組み込む ○ Swift, Java(TeaVM), AssemblyScript, Go(?) ○ (実装によるが)非効率・is GC portable?・ホスト環境(JSなど)を介した参 照をトラックできない

Slide 7

Slide 7 text

WasmGC WebAssembly に GC managed なデータ構造を導入する proposal。Wasm EngineがGC管理してくれる V8, SpiderMonkey, JavaScriptCore(未リリース?) などで実。 wasmtime などの pure WASI runtime も実装中 Kotlin, Dart OCaml, Java(j2cl)

Slide 8

Slide 8 text

Demo (時間あれば)

Slide 9

Slide 9 text

将来の展望 ● まずはブラウザで動くWasmに変換を目指す ○ Scala.js の標準ライブラリは JS 資産利用のまま ● (pure) WASI サポート ○ そもそも pure Wasm runtime がまだ WasmGC 未対応 ○ Scala の標準ライブラリもWASIスタックの上で再実装 ○ 各種 third party library も WASI 向けに再実装する必要がある... ■ 直接 WASI利用しなければそれほど難しくないはず...(?)

Slide 10

Slide 10 text

参考 ● A new way to bring garbage collected programming languages efficiently to WebAssembly ● Scala.js and WebAssembly, a tale of the dangers of the sea - Sébastien Doeraene ● n月刊ラムダノート Vol.4