Files
hakorune/docs/archive/roadmap/phases/phase-12/archive/CRITICAL-ISSUE.md
nyash-codex 811dfebf98 fix(joinir): Phase 241-EX - Remove hardcoded 'sum' check from Pattern3
Remove legacy hardcoded 'sum' carrier validation that was blocking
array_filter patterns with different accumulator names (e.g., 'out').

Before: Pattern3 required carrier named 'sum' to exist
After: Pattern3 uses carrier_info generically (any carrier name works)

Test results:
- phase49_joinir_array_filter_smoke: PASS 
- phase49_joinir_array_filter_fallback: PASS 
- phase49_joinir_array_filter_ab_comparison: PASS 
- Full suite: 909/909 PASS, 0 FAIL

Also: Archive old roadmap documentation (67k lines moved to docs/archive/)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 00:48:42 +09:00

3.6 KiB
Raw Blame History

🚨 AI議論の誤解存在しない問題を解決しようとした記録

誤解の本質

この文書は、AIたちが「スクリプトプラグイン」という存在しない問題を作り出し、複雑な解決策を提案した記録です。

実際の事実

  • Nyashスクリプト = 普通のユーザー定義Box
  • ユーザー定義Boxは既に完璧に動作している
  • 特別な仕組みは一切不要

なぜこんな誤解をしたのか

「プラグイン」という言葉に引っ張られて、C ABIの外部DLLのような特別な仕組みが必要だと思い込んでしまった。

現実のフロー:
MIR → JIT → C関数呼び出し固定アドレス→ ネイティブコード実行
MIR → AOT → EXE内のC関数静的リンク→ ネイティブコード実行

不可能なフロー:
MIR → ??? → Nyashスクリプト実行インタープリター必要

なぜスクリプトプラグインは動作しないのか

1. インタープリター依存

// スクリプトプラグイン
export box CustomMath {
    sin(x) { return me._math.sin(x) }
}

実行にはNyash VMが必要 → EXEに埋め込めない

2. 動的型システム

  • C ABI: 静的型i32, i64, double等
  • Nyashスクリプト: 動的型Box
  • 型変換にはランタイムが必要

3. メモリ管理

  • C ABI: 手動管理またはシンプルなGC
  • Nyashスクリプト: Arc<Mutex>
  • GC/参照カウント管理にランタイムが必要

実例なぜFileBoxはC ABIなのか

// FileBoxプラグインネイティブ
#[no_mangle]
pub extern "C" fn nyash_plugin_invoke(...) -> i32 {
    // 直接システムコール可能
    // VMなしで動作
    // EXEに静的リンク可能
}

対して、Nyashスクリプトは

  • VM必須
  • 動的評価
  • EXEに埋め込み不可

結論Phase 12の方向転換が必要

不可能なこと

  • スクリプトプラグインをJIT/AOTから直接呼び出し
  • スクリプトプラグインをEXEに埋め込み
  • ネイティブプラグインと完全に透過的な利用

可能なこと

  1. インタープリターモード限定

    • スクリプトプラグインはインタープリター実行時のみ
    • 開発/プロトタイピング用途
  2. トランスパイル方式

    • Nyashスクリプト → C/Rust → ネイティブプラグイン
    • ビルドステップが必要
  3. ハイブリッド実行

    • 開発時: スクリプトプラグイン(高速イテレーション)
    • 本番時: ネイティブプラグイン(高性能)

修正された価値提案

開発フローの改善

1. アイデア → Nyashスクリプトでプロトタイプ
2. 動作確認 → インタープリターでテスト
3. 性能要求 → Rust/Cで再実装
4. 配布 → ネイティブプラグインとして

制限事項の明確化

  • JIT/AOT: ネイティブプラグインのみ
  • インタープリター: スクリプトプラグインも可
  • EXE生成: ネイティブプラグインのみ含む

推奨アクション

  1. Phase 12の再定義

    • 「開発支援ツール」として位置づけ
    • JIT/AOT統合は諦める
  2. ドキュメント修正

    • 制限事項を明確に記載
    • 誤解を招く「透過的利用」を削除
  3. 代替案の検討

    • Nyash→Rustトランスパイラー
    • プラグインテンプレート生成ツール

重要な教訓C ABIの制約は、システムプログラミングの本質的な制約である。