Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scala to WebAssembly #scala_waiwai
Search
Rikito Taniguchi
February 27, 2024
0
1.3k
Scala to WebAssembly #scala_waiwai
https://scala-tokyo.connpass.com/event/307069/
Rikito Taniguchi
February 27, 2024
Tweet
Share
More Decks by Rikito Taniguchi
See All by Rikito Taniguchi
Why Wasm+WASI for Scala
tanishiking
0
74
Scala to WebAssembly: Exploring the How and Why
tanishiking
0
1.4k
Scala Days Madrid 2023 参加レポート
tanishiking
0
70
Tooling for Scala3
tanishiking
0
380
API-Based Code Search
tanishiking
0
41
Things happening before start coding with Metals ~behind the curtain of daily coding~
tanishiking
0
570
How we replaced a 10-year-old Perl product using Scala
tanishiking
14
33k
Quick introduction to scalafix
tanishiking
1
190
Format things with scalafmt
tanishiking
1
2k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
19
2.3k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Designing for Performance
lara
604
68k
A better future with KSS
kneath
238
17k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
192
16k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Docker and Python
trallard
43
3.2k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Transcript
Scala to WebAssembly: How and Why Scala わいわい勉強会 #2 tanishiking
What is WebAssembly (Wasm)? - ブラウザで実行可能な、高速・安全・ポータブルで、 サイズとロードが高効率なプログラム形式 - 最近は WASI
(WebAssembly System Interface) によりブラウ ザ外でも活躍 - 様々な言語から Wasm へコンパイル可能 - C/C++, Rust, Go, Kotlin, Dart, Swift, OCaml, Haskell, etc…
Scala -> Wasm へコンパイラバックエンド開発中 https://github.com/scala-js/scala-js/issues/4928
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
https://www.youtube.com/watch?v=QsOHofFJpig 実はかなり前から検討はされていた (2019/06)
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など)を介した参 照をトラックできない
WasmGC WebAssembly に GC managed なデータ構造を導入する proposal。Wasm EngineがGC管理してくれる V8, SpiderMonkey,
JavaScriptCore(未リリース?) などで実。 wasmtime などの pure WASI runtime も実装中 Kotlin, Dart OCaml, Java(j2cl)
Demo (時間あれば)
将来の展望 • まずはブラウザで動くWasmに変換を目指す ◦ Scala.js の標準ライブラリは JS 資産利用のまま • (pure)
WASI サポート ◦ そもそも pure Wasm runtime がまだ WasmGC 未対応 ◦ Scala の標準ライブラリもWASIスタックの上で再実装 ◦ 各種 third party library も WASI 向けに再実装する必要がある... ▪ 直接 WASI利用しなければそれほど難しくないはず...(?)
参考 • 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