Whale 命令参考
描述 Whale assembler、object wrapper、诊断输出和可选 IR 命令。
Wave Foundation
Whale 构建
在 Whale 存储库中,运行:
cargo build --release
顶级可执行文件有四个命令系列:
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 路径作为输出,并且 ELF64 relocatable 包含 section、symbol 和 relocation 创建object。
使用 --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 部分,并在偏移量 0 处添加全局 start 符号。它将原始机器代码包装在 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、调用、函数指针、通用聚合值、全局地址及native执行不受支持。栈分配保持有效直到函数返回。词法生命周期结束、调用和返回中的指针传递、外部内存适配器及native shadow metadata仍需实现。
--max-memory设置逻辑分配字节预算,默认64 MiB。InterpreterOptions::memory_limits还限制分配数为16384、指针字节元数据为262144片段、字节和元数据工作量为256 Mi单位。超限返回带IR位置的MemoryLimit错误,与程序trap区分。验证器也在执行前拒绝输出目标已知存储大小的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)