>100 Views
April 02, 26
スライド概要
サークル内で行われたLTの登壇資料です。
MoonBitでWebAssembly入門 > Getting started with WebAssembly on MoonBit 2026/01/25 SysAd 新春LT会 #SysAd新春LT 1
- WebAssemblyのお話 - MoonBitのお話 - MoonBit実践編(ライブコーディング) #SysAd新春LT # # 本日のお品書き 2
# WebAssembly(WASM)とは? #SysAd新春LT 3
- JavaScriptに代わる、次世代のブラウザ言語 - 中身はスタックマシンのバイトコード - jump命令がない代わりにifやloopがあるなど、割と高級な感じ - バイトコードなので(理屈では)JavaScriptより高速 - JSの方がJITが成熟しているので、今のところは五分五分 - 複雑なバイナリ操作などをRustで書いてフロントエンドに持ち込むなど - 主要な言語のほとんどがコンパイル先としてWASMをサポート - 一応テキスト形式(WAT)もあるが、手書きする用途ではない #SysAd新春LT # # WebAssembly(WASM)とは? 4
- V8 - 言わずと知れた爆速JSランタイム、WASMも動く - wasmtime - Bytecode Allianceによる軽量ランタイム実装 - 大抵のプロポーザルにも対応しており、リファレンス実装としての側面が強い - Wasmer - WASI対応のランタイム - wasm用のレジストリもある #SysAd新春LT # # 主要なWASMランタイム 5
- 名前こそ”Web”Assemblyだが、単なる実行可能バイナリなのでWebに限定されない - 特定の言語やOS、CPUに依存しないポータビリティの高さ - JVMや.NETに近いが、それらより遥かにミニマル、対応言語の多さも桁違い - デフォルトでセキュアな設計 - コンテナ技術を置き換えるものとしても期待されている - ユニバーサルな言語基盤としてのWASI/Component Model - WASMモジュール同士でimport/exportができる - いずれはwasmを通して他言語のライブラリを利用することも可能に…? #SysAd新春LT # # WASMの何がアツいのか? 6
- WASMのコア仕様は非常にシンプルで、整数と小数しか扱えない - 救いの手、WasmGC - WASM側でGCを実装するプロポーザル - 配列などの複雑な型を扱える - “あの”Safariも実装済みなので、モダンブラウザなら既に動作する - GC言語をWASMにコンパイルする際に大幅にバイナリサイズを削れる #SysAd新春LT # # WasmGCプロポーザル 7
- 最も使われているのはおそらくRust - ツールチェーンも安定していて、言語としても書きやすい - バイナリサイズはそこそこ、極限まで削るならno_stdで - Goも選択肢には入る - が、ランタイムがやや大きいのでバイナリサイズは膨らむ - C/C もEmscriptenを使えばWASMにコンパイルできる - けど結構めんどくさいので普通にRustで十分だとは思う - 実質Rust一強だが、意外と決定打がない - 新しい選択肢、MoonBit + + #SysAd新春LT # # WASMを使うために書く言語 8
# MoonBitとは? #SysAd新春LT 9
- WASM特化の新しいプログラミング言語 - wasm/wasm-gc/native/llvm/jsのバックエンドを持つ - 普通にjsバックエンドでAltJSとして使うのもアリ - 言語自体はGC付きのRustっぽい雰囲気 - パイプライン演算子や関数オブジェクトなど、割と関数型に近い - WASMのバイナリサイズがとにかく小さい - ランタイム含め圧倒的に小さい、wasm-gcならさらに縮む - LSPやツールチェーンの完成度が高く、開発体験も良い #SysAd新春LT # # MoonBitとは? 10
- そろそろv1.0.0が出るらしい - async周りはまだ少し不安定 - 言語機能自体はほぼ固定されたが、標準ライブラリのAPIが安定していない - たまにツールチェーンのバグは踏む。仕方ない - とはいえ頻繁にアップデートされてるので、割とすぐに治ったりする #SysAd新春LT # # 現在の開発状況 11
- フロントエンドをMoonBitで書く…? - TypeScriptよりも遥かにまともな言語なので全然アリ - JSと連携するならJSバックエンド、そうでなければWASMバックエンドで - JSX-likeな構文の提案も進んでおり、ライブラリが整えばかなり現実的になる - バックエンドをMoonBitで書く…? - asyncがシングルスレッド前提なのがちょい厳しめ - バックエンドなら選択肢が多いので、別にMoonBitである必要もない気がする - とはいえTypeScriptバックエンドよりは良さそうかも #SysAd新春LT # # MoonBitの用途 12
# [LIVE] MoonBitを書いてみよう #SysAd新春LT 13
# まとめ #SysAd新春LT 14
- 時代はWebAssembly/Component Model - WASMを吐きたいならRust or MoonBitで - フロントエンド用途としてのMoonBitは結構アリ #SysAd新春LT # # まとめ 15
# Thank you for listening! #SysAd新春LT 16