Files
hakorune/docs/guides/wasm-guide/planning/current_issues.md

4.0 KiB
Raw Blame History

🚨 WASM/AOT WASM 現在の問題・制限事項

📅 最終更新: 2025-08-15

🔴 緊急度: 高

1. BoxCall命令未実装

問題: toString(), print() 等のBox メソッド呼び出しがWASMで未対応

エラー例:

❌ WASM compilation error: Unsupported instruction: BoxCall { 
    dst: Some(ValueId(6)), 
    box_val: ValueId(4), 
    method: "toString", 
    args: [], 
    effects: EffectMask(16) 
}

影響範囲:

  • 基本的なBox操作toString, print等が全て使用不可
  • 実用的なNyashプログラムがWASMでコンパイル不可

修正必要ファイル:

  • src/backend/wasm/codegen.rs: BoxCall命令の実装

2. wasmtimeバージョン互換性問題

問題: コンパイル時wasmtimeとシステムwasmtimeのバージョン不一致

エラー例:

Error: Module was compiled with incompatible Wasmtime version '18.0.4'
System wasmtime: 35.0.0

原因:

# Cargo.toml
wasmtime = "18.0"      # コンパイル時

# システム
wasmtime 35.0.0        # 実行時

影響:

  • AOT (.cwasm) ファイルが実行不可
  • 配布用実行ファイル生成失敗

修正策:

  1. 短期: Cargo.tomlのwasmtimeバージョン更新
  2. 長期: 互換性保証メカニズム実装

3. WASM出力バイナリエラー

問題: WAT → WASM変換でUTF-8エラー発生

エラー例:

❌ Generated WASM is not valid UTF-8

推測原因:

  • WAT形式の生成に問題
  • wabt crateとの連携ミス

修正必要箇所:

  • src/backend/wasm/codegen.rs: WAT生成ロジック
  • WASM バイナリ出力パイプライン

🟠 緊急度: 中

4. RuntimeImports未実装機能

問題: WASMで必要なランタイム関数が部分実装

未実装機能:

  • Box メモリ管理 (malloc, free)
  • 型キャスト・変換
  • 配列・Map操作
  • 例外ハンドリング

ファイル: src/backend/wasm/runtime.rs


5. メモリ管理最適化不足

問題: WASMメモリレイアウトが非効率

課題:

  • Box ヘッダーサイズ固定 (12 bytes)
  • ガベージコレクション未実装
  • メモリ断片化対策なし

ファイル: src/backend/wasm/memory.rs


🟡 緊急度: 低

6. デバッグ情報不足

問題: WASM実行時のエラー情報が不十分

改善点:

  • ソースマップ生成
  • スタックトレース詳細化
  • ブレークポイント対応

7. 最適化機能未実装

問題: WASM出力が最適化されていない

未実装最適化:

  • デッドコード除去
  • インライン展開
  • 定数畳み込み

📊 問題優先度マトリクス

問題 緊急度 重要度 修正工数 優先順位
BoxCall未実装 1
wasmtimeバージョン 2
WASM出力エラー 3
RuntimeImports 4
メモリ管理 5
デバッグ情報 6
最適化 7

🎯 修正ロードマップ

Phase 1: 基本機能復旧 (1週間)

  1. BoxCall命令実装
  2. wasmtimeバージョン統一
  3. WASM出力エラー修正

Phase 2: 機能拡充 (2週間)

  1. RuntimeImports完全実装
  2. メモリ管理改善

Phase 3: 品質向上 (1週間)

  1. デバッグ情報強化
  2. 基本最適化実装

📝 テスト必要項目

基本動作テスト

# BoxCall テスト
./target/release/nyash --compile-wasm test_boxcall.hako

# AOT テスト  
./target/release/nyash --aot test_simple.hako
wasmtime --allow-precompiled test_simple.cwasm

互換性テスト

# バージョン確認
cargo tree | grep wasmtime
wasmtime --version

# 実行テスト
wasmtime test_output.wasm

🎯 目標: Phase 1完了でWASM基本機能復旧、Nyash WASMが実用レベルに到達