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)