VIRTUAL MACHINE / NIM

観測できるVM。
Nimのために。

GUDGEONは、Nimプログラミング言語のための仮想マシン兼実行プラットフォームです。lowered Nim IRをすぐに実行し、ソースレベルのデバッグと計測を可能にし、同じプログラムモデルのままネイティブコードへの道を開きます。

LIVE EXECUTION GRAPH OBSERVABLE
INPUTNIF / Final IRtyped · lowered · mapped
ENGINE 01VMinterpret / debug
ENGINE 02NativeAOT / ABI / FFI
shared source metadata · DAP / trace / profile
SCROLL TO TRACE THE LAYER
01 / THE MODEL

Nimコンパイラの出力を、
観測できるランタイムへ。

Nimonyは解析・型検査・lowering・IR生成を担います。GUDGEONはその先で、Nimプログラムを動かし、止め、測り、別の実行エンジンへ渡します。

GUDGEONは第一に、NimのためのVMです。最初の入力はNIFですが、実行境界をtyped, lowered program IRに置くことで、単一のフロントエンドを超えて進化できる設計にします。

01SourceNim program
02Nimonysemantic + lower
03GUDGEONexecution boundary
04Observedebug · trace · profile
02 / ONE PROGRAM, TWO ENGINES

解釈とコンパイルを、
同じ地図から。

NIF / Final IRをVM専用bytecodeとして閉じ込めず、解釈とコンパイルの共通境界として扱います。どちらの実行方式でも、Nimのソース位置・型・フレーム情報を保ちます。

AIMMEDIATE PATH

Nim VM

Nimプログラムをすぐに実行し、命令・フレーム・値をその場で観測します。デバッグ可能性は後付けのアダプターではなく、実行モデルそのものに組み込みます。

gudgeon run app.nif
step / pauselocalsevaluate
BPERFORMANCE PATH

Native

同じNim IRをAhead-of-Timeでコンパイルします。C/NIFC、LLVM、直接codegenのいずれにも接続でき、プロジェクトをひとつの性能バックエンドに固定しません。

gudgeon build app.nif
AOTABIFFI
03 / DEBUG AT THE RIGHT LEVEL

Nimで止めて、
Nimを見る。

生成Cのポインタをpretty-printするのではなく、VM自身のフレームとNimの型メタデータをデバッガへ返します。停止したプログラムは、作者が書いた抽象度のままです。

run()pause()continue()
stepInto()stepOver()stepOut()
stackTrace()locals()evaluate()
gudgeon debugger● connected
CALL STACK▾ foo (app.nim:18) ▾ module (app.nim:27) main (app.nim:32)
LOCALS / FRAME 0
userUser{ id: 7, active: true }
namesseq[string]["Ada", "Grace"]
retryCountint3
16let user = users[index]17let names = user.names18echo names[0]
04 / REFERENCE POINTS

GraalVMと.NETから、
境界の設計を学ぶ。

目指すのは模倣ではなく、言語ランタイムを長く使えるものにする分離を取り入れることです。

観点GraalVM.NETGUDGEONの方向性
共通境界Truffle AST / interopIL / CLRtyped, lowered IRを実行契約にする
NativeNative Image / Substrate VMNativeAOTVMとAOTで型とメタデータを共有する
観測Instrumentation / SourceSectiondiagnostics / debuggerソースマップをランタイムの中心に置く
FFIpolyglot interop / downcallP/Invoke / function pointerdowncallとupcallを明示的な境界にする

設計原則: ネイティブバックエンドを先に決めない。まずVMが持つValue、Frame、Heap、Type Metadata、Source Locationを、すべての実行エンジンが共有する契約として整える。

05 / FOREIGN FUNCTION INTERFACE

外へ出る道も、
戻る道も。

FFIはC関数を呼べるだけではありません。GUDGEONはdowncall、Nim VMへのcallback、ガベージコレクション、所有権、例外、型変換を、ランタイムが理解できる境界として定義します。

GUDGEON VMdowncalltyped value → ABI
FFI boundary
NATIVE WORLDupcallcallback → frame
● stable ABI handle● explicit ownership● source-aware error
06 / TECHNICAL GOALS

ひとつのNimプログラム、
ひとつの実行面。

GUDGEONはNimを別の方法で走らせるだけではありません。コンパイラとランタイムの境界を更新し、実行・デバッグ・プロファイリング・ネイティブコンパイルで同じモデルを共有します。

01

Final IR Loader

lowered NIF / Final IRを読み込み、安定した内部Execution IRへ正規化する。

02

Debug Runtime API

breakpoint、step、stack、locals、evaluateをVMの第一級APIとして扱う。

03

Dual Engine Contract

VM executorとネイティブバックエンドが、Nimの型・ソースマップ・FFIメタデータを共有する。

04

Portable Instrumentation

デバッグ・プロファイリング・トレースの観測点を実行エンジン横断で公開する。

G

GUDGEON — Gudgeon Unified Debuggable Guest Execution Orchestrator for NIF

ページ上部へ