# アーキテクチャ構成図

## システム全体構成図

```mermaid
graph TB
    subgraph HostApp["ホストアプリケーション (C/C++)"]
        CAPI["C API<br/>(mruby.h)"]
    end

    subgraph mruby["mruby ランタイム"]
        subgraph Frontend["フロントエンド (mruby-compiler GEM)"]
            Lexer["レキサー<br/>(lex.def)"]
            Parser["パーサー<br/>(parse.y / lrama)"]
            CodeGen["コード生成<br/>(codegen.c)"]
        end

        subgraph IR["中間表現 (IREP)"]
            IREP["IREP構造体<br/>(irep.h)"]
            Loader["バイナリローダ<br/>(load.c)"]
            Dumper["バイナリダンパ<br/>(dump.c / cdump.c)"]
        end

        subgraph VM["仮想マシン (RiteVM)"]
            VMExec["VM実行エンジン<br/>(vm.c)"]
            Opcode["命令セット<br/>(opcode.h / ops.h)"]
            CallStack["コールスタック<br/>(mrb_callinfo)"]
            RegStack["レジスタスタック<br/>(mrb_value[])"]
        end

        subgraph CoreRuntime["コアランタイム"]
            ClassSys["クラスシステム<br/>(class.c)"]
            ObjSys["オブジェクトシステム<br/>(object.c)"]
            MethodTbl["メソッドテーブル<br/>(mrb_mt_tbl)"]
            MethodCache["メソッドキャッシュ<br/>(mrb_cache_entry)"]
            SymTbl["シンボルテーブル<br/>(symbol.c)"]
            VarTbl["変数テーブル<br/>(variable.c)"]
        end

        subgraph BuiltinTypes["組み込み型"]
            StringC["String<br/>(string.c)"]
            ArrayC["Array<br/>(array.c)"]
            HashC["Hash<br/>(hash.c)"]
            NumericC["Numeric<br/>(numeric.c)"]
            ProcC["Proc<br/>(proc.c)"]
            RangeC["Range<br/>(range.c)"]
            KernelC["Kernel<br/>(kernel.c)"]
        end

        subgraph MemMgmt["メモリ管理"]
            GC["GC<br/>(gc.c)<br/>Tri-color Incremental<br/>Mark & Sweep"]
            MemPool["メモリプール<br/>(mempool.c)"]
            Allocator["メモリアロケータ<br/>(allocf.c)"]
        end

        subgraph Boxing["値表現 (Boxing)"]
            WordBox["Word Boxing<br/>(boxing_word.h)"]
            NaNBox["NaN Boxing<br/>(boxing_nan.h)"]
            NoBox["No Boxing<br/>(boxing_no.h)"]
        end

        subgraph ErrorHandling["エラーハンドリング"]
            Exception["例外処理<br/>(error.c)"]
            Backtrace["バックトレース<br/>(backtrace.c)"]
            Throw["throw/catch<br/>(throw.h)"]
        end

        MRBLib["mrblib<br/>(Rubyコアライブラリ)"]

        subgraph StateInit["状態管理"]
            State["mrb_state<br/>(state.c)"]
            Init["初期化<br/>(init.c)"]
        end
    end

    subgraph MRBGems["mrbgems (拡張ライブラリ)"]
        subgraph StdLib["標準ライブラリ"]
            Fiber["mruby-fiber"]
            IO["mruby-io"]
            Socket["mruby-socket"]
            Dir["mruby-dir"]
            Time["mruby-time"]
            Math["mruby-math"]
            BigInt["mruby-bigint"]
            Eval["mruby-eval"]
            Task["mruby-task"]
        end

        subgraph Tools["コマンドラインツール"]
            MRBC["mrbc<br/>(mruby-bin-mrbc)"]
            MRUBY["mruby<br/>(mruby-bin-mruby)"]
            MIRB["mirb<br/>(mruby-bin-mirb)"]
            MRDB["mrdb<br/>(mruby-bin-debugger)"]
        end

        subgraph HAL["HAL (ハードウェア抽象化層)"]
            POSIX_HAL["POSIX HAL<br/>(hal-posix-*)"]
            WIN_HAL["Windows HAL<br/>(hal-win-*)"]
        end
    end

    subgraph BuildSys["ビルドシステム"]
        Rakefile["Rakefile"]
        BuildRB["lib/mruby/build.rb"]
        GemMgr["GEM管理<br/>(lib/mruby/gem.rb)"]
        Tasks["tasks/*.rake"]
        BuildConfig["build_config/*.rb"]
    end

    subgraph Platform["プラットフォーム"]
        OS["OS (POSIX / Win32)"]
        Compiler["C コンパイラ"]
    end

    %% フロントエンド内部フロー
    Lexer --> Parser
    Parser --> CodeGen
    CodeGen --> IREP

    %% IR操作
    Dumper --> IREP
    Loader --> IREP

    %% VM実行
    IREP --> VMExec
    VMExec --> Opcode
    VMExec --> CallStack
    VMExec --> RegStack

    %% VMとコアランタイム
    VMExec --> ClassSys
    VMExec --> MethodTbl
    VMExec --> MethodCache
    VMExec --> SymTbl

    %% コアランタイムと組み込み型
    ClassSys --> ObjSys
    ClassSys --> MethodTbl
    ObjSys --> BuiltinTypes

    %% メモリ管理
    GC --> Allocator
    MemPool --> Allocator
    CoreRuntime --> GC
    BuiltinTypes --> GC
    VM --> GC

    %% Boxing
    VMExec --> Boxing
    BuiltinTypes --> Boxing

    %% エラーハンドリング
    VMExec --> ErrorHandling
    CoreRuntime --> ErrorHandling

    %% 状態管理
    State --> Init
    State --> GC
    CAPI --> State

    %% mrblib
    MRBLib --> CoreRuntime

    %% mrbgems依存
    MRBGems --> CAPI
    HAL --> OS
    Tools --> Frontend
    Tools --> VM

    %% ビルドシステム
    BuildSys --> Compiler
    BuildConfig --> BuildSys

    %% ホストアプリケーション
    CAPI --> State
    CAPI --> Frontend
    CAPI --> VM
    CAPI --> Loader
```

## 処理パイプライン図

```mermaid
flowchart LR
    subgraph Input["入力"]
        RubySource["Rubyソースコード<br/>(.rb)"]
        MRBBinary["mrbcバイナリ<br/>(.mrb)"]
    end

    subgraph Compile["コンパイル"]
        Lex["字句解析<br/>(Lexer)"]
        Parse["構文解析<br/>(Parser/LALR)"]
        AST["AST<br/>(抽象構文木)"]
        CGen["コード生成<br/>(Codegen)"]
    end

    subgraph Intermediate["中間表現"]
        IREPStruct["IREP<br/>- iseq (命令列)<br/>- pool (リテラル)<br/>- syms (シンボル)<br/>- reps (子IREP)"]
    end

    subgraph Execute["実行"]
        Fetch["命令フェッチ"]
        Decode["命令デコード"]
        Exec["命令実行"]
        Result["実行結果<br/>(mrb_value)"]
    end

    subgraph Serialize["シリアライズ"]
        Dump["バイナリダンプ<br/>(dump.c)"]
        CDump["Cダンプ<br/>(cdump.c)"]
        Load["バイナリロード<br/>(load.c)"]
    end

    RubySource --> Lex --> Parse --> AST --> CGen --> IREPStruct
    MRBBinary --> Load --> IREPStruct
    IREPStruct --> Fetch --> Decode --> Exec --> Result
    IREPStruct --> Dump --> MRBBinary
    IREPStruct --> CDump
```

## メモリ管理・GC構成図

```mermaid
graph TB
    subgraph GCSystem["ガベージコレクタ (Tri-color Incremental GC)"]
        subgraph Colors["オブジェクトカラー"]
            White["White<br/>(未マーク / GC対象)"]
            Gray["Gray<br/>(マーク済み・子未マーク)"]
            Black["Black<br/>(マーク済み・子もマーク済み)"]
            Red["Red<br/>(静的ROM / GC不要)"]
        end

        subgraph FlipFlop["White Flip-Flop"]
            WhiteA["White-A<br/>(Current White)"]
            WhiteB["White-B<br/>(Sweep Target)"]
        end

        subgraph GCPhases["GCフェーズ"]
            Root["ROOT<br/>(アイドル)"]
            Mark["MARK<br/>(マーキング)"]
            Sweep["SWEEP<br/>(スイープ)"]
        end

        subgraph GCModes["GCモード"]
            Incremental["インクリメンタルGC<br/>(デフォルト)"]
            Generational["世代別GC<br/>(MRB_GC_TURN_OFF_GENERATIONALで無効化可能)"]
            Full["フルGC<br/>(mrb_full_gc)"]
        end

        Root --> Mark --> Sweep --> Root
    end

    subgraph HeapMgmt["ヒープ管理"]
        HeapPages["ヒープページ<br/>(mrb_heap_page)"]
        FreeHeaps["空きヒープ<br/>(free_heaps)"]
        GrayStack["グレースタック<br/>(gray_stack[1024])"]
        Arena["GCアリーナ<br/>(arena / arena_idx)"]
    end

    subgraph MemAlloc["メモリ割り当て"]
        BasicAlloc["mrb_basic_alloc_func()<br/>(デフォルト: realloc/free)"]
        MRBMalloc["mrb_malloc()"]
        MRBRealloc["mrb_realloc()"]
        MRBFree["mrb_free()"]
        MemPoolAlloc["mempool_alloc()<br/>(パーサ用一時メモリ)"]
    end

    MRBMalloc --> BasicAlloc
    MRBRealloc --> BasicAlloc
    MRBFree --> BasicAlloc

    GCSystem --> HeapMgmt
    HeapMgmt --> MemAlloc
```

## mrb_state構造体概要図

```mermaid
graph TB
    subgraph MRBState["mrb_state"]
        JMP["jmp<br/>(例外ジャンプ先)"]
        Context["c / root_c<br/>(実行コンテキスト)"]
        Globals["globals<br/>(グローバル変数)"]
        EXC["exc<br/>(現在の例外)"]
        TopSelf["top_self<br/>(トップレベルself)"]

        subgraph BuiltinClasses["組み込みクラス参照"]
            ObjClass["object_class"]
            ClassClass["class_class"]
            ModClass["module_class"]
            ProcClass["proc_class"]
            StrClass["string_class"]
            AryClass["array_class"]
            HashClass["hash_class"]
            RngClass["range_class"]
            IntClass["integer_class"]
            FloatClass["float_class"]
            KernelMod["kernel_module"]
        end

        GCField["gc<br/>(mrb_gc構造体)"]
        Cache["cache[256]<br/>(メソッドキャッシュ)"]
        Bootstrap["bootstrapping<br/>(初期化中フラグ)"]
        AtExit["atexit_stack<br/>(終了時コールバック)"]
    end

    subgraph MRBContext["mrb_context"]
        Prev["prev<br/>(前のコンテキスト)"]
        Stack["stbase / stend<br/>(VMスタック)"]
        CI["ci / cibase / ciend<br/>(コールスタック)"]
        Status["status<br/>(Fiber状態)"]
        FibRef["fib<br/>(Fiberオブジェクト参照)"]
    end

    subgraph CallInfo["mrb_callinfo"]
        N["n / nk<br/>(引数情報)"]
        CCI["cci<br/>(C呼び出しフラグ)"]
        MID["mid<br/>(メソッドID)"]
        ProcRef["proc<br/>(Procオブジェクト)"]
        StackRef["stack<br/>(レジスタスタック位置)"]
        PC["pc<br/>(プログラムカウンタ)"]
    end

    Context --> MRBContext
    MRBContext --> CallInfo
```

## mrbgems依存関係図

```mermaid
graph LR
    subgraph GemBoxes["GemBox定義"]
        Default["default.gembox"]
        StdLib["stdlib.gembox"]
        StdLibExt["stdlib-ext.gembox"]
        StdLibIO["stdlib-io.gembox"]
        MathBox["math.gembox"]
        MetaProg["metaprog.gembox"]
    end

    subgraph CoreGems["コアGEM"]
        Compiler["mruby-compiler"]
        Error["mruby-error"]
        FiberGem["mruby-fiber"]
        Enumerator["mruby-enumerator"]
        EnumLazy["mruby-enum-lazy"]
        EnumChain["mruby-enum-chain"]
        Catch["mruby-catch"]
    end

    subgraph ExtGems["拡張GEM"]
        IOGem["mruby-io"]
        SocketGem["mruby-socket"]
        DirGem["mruby-dir"]
        TimeGem["mruby-time"]
        MathGem["mruby-math"]
        BigIntGem["mruby-bigint"]
        EvalGem["mruby-eval"]
        TaskGem["mruby-task"]
    end

    subgraph BinGems["コマンドラインGEM"]
        BinMRBC["mruby-bin-mrbc"]
        BinMRUBY["mruby-bin-mruby"]
        BinMIRB["mruby-bin-mirb"]
        BinDebugger["mruby-bin-debugger"]
        BinStrip["mruby-bin-strip"]
        BinConfig["mruby-bin-config"]
    end

    Default --> StdLib
    Default --> StdLibExt
    Default --> StdLibIO
    Default --> MathBox
    Default --> MetaProg
    Default --> BinMRBC
    Default --> BinMRUBY
    Default --> BinMIRB
    Default --> BinDebugger
    Default --> BinStrip
    Default --> BinConfig

    Enumerator --> FiberGem
    EnumLazy --> Enumerator
    EnumChain --> Enumerator
    SocketGem --> IOGem
    BinMRUBY --> Compiler
    BinMIRB --> Compiler
    EvalGem --> Compiler
```

## ビルドパイプライン図

```mermaid
flowchart TB
    subgraph Config["設定フェーズ"]
        BuildConfig["build_config/*.rb<br/>(ビルド設定)"]
        GemBox["*.gembox<br/>(GEMセット定義)"]
        Toolchain["toolchains/<br/>(コンパイラ設定)"]
    end

    subgraph PreBuild["前処理"]
        PreSym["presym.rake<br/>(事前定義シンボル生成)"]
        MRBLibCompile["mrblib.rake<br/>(Rubyコアライブラリコンパイル)"]
    end

    subgraph CoreBuild["コアビルド"]
        CoreCompile["core.rake<br/>(Cソースコンパイル)"]
        GemBuild["mrbgems.rake<br/>(GEMビルド)"]
        LibLink["libmruby.rake<br/>(ライブラリリンク)"]
    end

    subgraph Output["出力"]
        LibMRuby["libmruby.a<br/>(静的ライブラリ)"]
        Binaries["bin/<br/>(mruby, mrbc, mirb, mrdb)"]
        Amalgam["build/host/amalgam/<br/>(mruby.c + mruby.h)"]
    end

    subgraph Testing["テスト"]
        TestRake["test.rake"]
        BenchRake["benchmark.rake"]
    end

    BuildConfig --> PreSym
    GemBox --> GemBuild
    Toolchain --> CoreCompile

    PreSym --> MRBLibCompile
    MRBLibCompile --> CoreCompile
    CoreCompile --> GemBuild
    GemBuild --> LibLink

    LibLink --> LibMRuby
    LibLink --> Binaries
    LibLink --> Amalgam

    LibMRuby --> TestRake
    Binaries --> TestRake
    LibMRuby --> BenchRake
```
