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

WasmをRustにする技術

SansanTech PRO
November 12, 2026

 WasmをRustにする技術

■イベント
Fukuoka.wasm
https://fukuokawasm.connpass.com/event/407733/

■登壇概要
タイトル:WasmをRustにする技術
登壇者:CTO 笹川 裕人

■ 技術本部 採用情報
https://media.sansan-engineering.com

SansanTech PRO

November 12, 2026

Transcript

21 slides
  1. 笹川 裕⼈(Sasakawa Hirohito) CTO - CSで博⼠の学位を取得 - 専⾨は正規表現照合のアルゴリズム 写真が入ります -

    アルゴリズムとデータ構造が好物 - 2023年4⽉より現職 - 2025年6⽉よりCTOに就任 - 新卒/中途全ての3次⾯接を担当。新しく⼊社する技 術系職種の⽅の技術レベルに責任を持っている - 技術全般と、美味しいご飯/お酒が好き - 福岡オフィスは⽉に1回程度訪問して、仕事をしている
  2. 背景: WasmをFFIで利⽤するユースケースと課題 - C++などで書かれた資産を、Wasmを経由し別の⾔語から利⽤するケースがある - - go-graphviz (Go), sqlite4j (Java),

    formulon(Python) Wasmを別⾔語から呼ぶためには、その⾔語におけるWasm Runtimeの制約を 受け問題が発⽣することがある - Runtimeの制約を避けるためWasmを呼び出し側の⾔語に直接変換することを 考えwasm2rsというツールを作成
  3. wasm2rsとは Wasm Rust wasm2rs Native Binary rustc Wasmを等価なRustコードを⽣成するツール - ⽣成コードは外部依存の無いRust

    crateとして動作 - Wasmのセマンティクス(wrapping演算、線形メモリの境界チェック、trap など)は保存されている
  4. wasm2rsが対応している変換範囲 wasm proposals - SIMD / relaxed SIMD / atomics

    / multi-memory / tail-call / 例外処理 / GC / stack-switching (cont) システムインターフェース - WASI preview1 に対応(wasi-threads も可) - preview2 は ほぼすべてのfeatureに対応し、簡単な動作確認が完了 - 今後preview3以降にも対応していく
  5. Wasmの制御フロー ≠ Rustの制御フロー Wasm Rust - Block - Loop -

    Loop - break ʻlabel - br N(多段 break) gotoがない - br_table Wasmの深いネスト+多段分岐を素直に変換できない
  6. Wasmの block / br → Rust のラベル付きブロック block / brは素直に変換が可能

    ただし、ネストが深くなるとrustcのparserが落ちる - Wasmによってはカジュアルに3000段近くなる - default上限128。設定で上限を変更できるが...
  7. ネスト対策: state machine化 ネストが⼀定以上の深さになったらloopとmatchを組み合わせstate machine化 - どんなに深いネストが来ても⼀定以上深くならないようにできる - 「pc =

    次に実⾏するコードの塊の番号」とし、wasmのbrをpcに対応させる ただし、matchのアームが増えると、matchの評価回数が問題になる - Naiveな変換では約7200アームになる例があり変換コードの実⾏時間が悪化
  8. Stack switching (suspend / resume / switch) への対応 Wasm Rust

    処理を⼀時停⽌し、 スタックを切り替える 後から再開できる ⼿段がない 実は、ここでもstate machineのアイデアが利⽤できる
  9. まとめ WasmをRustに変換するwasm2rsの紹介をした - block / br は素直に変換し、深すぎるネストはstate machineでフラットにする - -

    matchアームが⼤きくなったら、アームを融合する最適化が効く stack-switching は、状態機械を frame 付きに拡張して実現できる - resumeに対応するため、アーム融合をあえて適⽤しないことも 今後の開発 - WASI 0.2対応の完了 → WASI0.3と範囲を広げていく

More Decks by SansanTech

Other Decks in Technology