Whale コマンドリファレンス

Whaleassembler、objectwrapper、診断出力とオプションのIRコマンドについて説明します。

Wave Foundation

Whaleビルド

Whaleリポジトリで以下を実行します。

cargo build --release

最上位の実行可能ファイルには4つのコマンドシリーズがあります。

whale asm [--amd64 | --aarch64] <input> -o <output>
whale object <input> -o <output>
whale ir <subcommand> [options]

AMD64 assembler

whale asm --amd64 input.asm -o output.o

AMD64 assembler は .o パスを出力として受け取り、section、symbol、および relocation を含む ELF64 relocatable オブジェクトを作成します。

詳細診断出力は--debug-whaleでオンにします。

whale asm --amd64 input.asm -o output.o \
  --debug-whale --token --ast --bytes --dump-hex --stats

診断フラグには--token、--ast、--bytes、--dump-hex、--dump-bin、--dump-json、--statsがあります。 --traceは処理プロセスを出力します。

Object wrapper

whale object input.bin -o output.o

object コマンドは、生のバイトを ELF64 .text セクションに配置し、グローバル start シンボルをオフセット 0 に追加します。生のマシン コードを ELF オブジェクト ファイルにラップします。

テキスト IR の検証と出力

標準ビルドで format 4 typed IR を読み取り・検証できます。IR リファレンスの完全な例を answer.wir に保存してください。print は検証後に標準形式で出力し、失敗時は既存ファイルを保護します。IR 実行や native コード生成は行いません。

whale ir verify answer.wir
whale ir print answer.wir -o canonical.wir

オプション IR socket

AST JSON の ir lower には socket-cli feature が必要です。テキスト IR の verify と print には不要です。

cargo run -p whale --features socket-cli -- ir lower program.json
cargo run -p whale --features socket-cli -- ir lower program.json -o program.wir

ir lowerはWhalesocketschemaのJSONを読み、WhaleIRテキストIRはstdoutまたは-oパスに出力されます。 --target <triple>はターゲット文字列を置き換え、--no-verifyは検証を省略します。

ir lower を使うには socket-cli でビルドしてください。Socket JSON の生成側と Whale は同じ AST schema version を使う必要があります。

スカラー整数インタプリタ

デフォルトビルドはスカラー整数・Bool IR も実行します。--function @fN は必須で、--arg を繰り返して正確な十進引数を渡します。Bool は true/false です。--max-steps は命令と terminator を数え、既定値は 1,000,000 です。run では -o と --no-verify は使えません。IR 参照の完全なループを swap-loop.wir に保存してください。

whale ir run swap-loop.wir --function @f7 --arg 3 --max-steps 100
i32 22

追跡スタックメモリの実行

標準インタープリタは整数・Bool、制御フロー、スタック割り当て、データポインタの保存と読取り、typed GEP、memcpy・memsetを実行します。checked ペアの読取りではパディングを除外します。アドレスは合成64ビット値で、ホストメモリを参照しません。引数と戻り値は整数・Boolまたはvoidに限定され、float、呼出し、関数ポインタ、一般aggregate値、グローバルアドレス、native実行は未対応です。割り当ては関数のreturnまで有効です。字句スコープの寿命終了、呼出し・returnでのポインタ転送、外部メモリアダプタ、native shadow metadataは今後の実装です。

--max-memoryは論理的な割り当てバイトの上限で、標準は64 MiBです。InterpreterOptions::memory_limitsは割り当て数16384、ポインタのバイトメタデータ262144個、バイト・メタデータ処理256 Mi単位も制限します。超過はプログラムtrapとは別のIR位置付きMemoryLimitエラーです。検証器は出力ターゲットの既知の保存サイズoverflowも実行前に拒否します。

メモリモデル: tracked-memory.wir.

whale ir run tracked-memory.wir --function @f0 --max-memory 20
whale ir run tracked-memory.wir --function @f0 --max-memory 3
u32 42
Error: tracked-memory.wir: interpreter memory Bytes limit 3 reached at @f0 %b0 instruction 0 (%v0)