Scala to WebAssembly #scala_waiwai
by
Rikito Taniguchi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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