Referensi perintah Whale

Menjelaskan Whale assembler, object wrapper, keluaran diagnostik, dan perintah opsional IR.

Wave Foundation

Whale Bangun

Di repositori Whale, jalankan:

cargo build --release

File yang dapat dieksekusi tingkat atas memiliki empat kelompok perintah:

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 menerima jalur .o sebagai keluaran, dan ELF64 relocatable berisi section, symbol dan relocation Buat object.

Aktifkan keluaran diagnostik terperinci dengan --debug-whale.

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

Tanda diagnostik mencakup --token, --ast, --bytes, --dump-hex, --dump-bin, --dump-json, dan --stats. --trace mencetak kemajuan pemrosesan.

Object wrapper

whale object input.bin -o output.o

Perintah object menempatkan byte mentah di bagian ELF64 .text dan menambahkan simbol global start pada offset 0. Perintah ini membungkus kode mesin mentah dalam file objek ELF.

Verifikasi dan pencetakan IR teks

Build bawaan membaca dan memverifikasi typed IR format 4. Simpan contoh lengkap di referensi IR sebagai answer.wir. print memverifikasi sebelum mencetak bentuk kanonis dan mempertahankan file lama jika gagal. Perintah ini tidak menjalankan IR atau menghasilkan kode native.

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

Opsional IR socket

AST JSON ir lower memerlukan feature socket-cli. IR teks verify dan print tidak memerlukannya.

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 membaca JSON dari Whale socket schema, mengubahnya menjadi Whale IR, dan memverifikasi modul. Teks IR dikeluarkan ke jalur stdout atau -o. --target <triple> menggantikan string target dan --no-verify menghilangkan validasi.

Build dengan socket-cli untuk memakai ir lower. Produsen Socket JSON dan Whale harus memakai AST schema version yang sama.

Interpreter bilangan bulat skalar

Build bawaan juga menjalankan IR integer/Bool skalar. --function @fN wajib; ulangi --arg untuk argumen desimal tepat atau true/false bagi Bool. --max-steps menghitung instruksi dan terminator dengan nilai bawaan 1,000,000. run tidak menerima -o atau --no-verify. Simpan loop lengkap dari referensi IR sebagai swap-loop.wir:

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

Eksekusi memori stack terlacak

Interpreter bawaan menjalankan integer/Bool, alur kontrol, alokasi stack, penyimpanan dan pembacaan pointer data, typed GEP, memcpy dan memset. Pembacaan pasangan checked tidak memeriksa padding. Alamat berupa nilai sintetis 64 bit, tanpa dereferensi memori host. Argumen dan hasil tetap integer/Bool atau void; float, panggilan, pointer fungsi, nilai agregat umum, alamat global dan eksekusi native belum didukung. Alokasi stack hidup sampai fungsi kembali. Akhir masa hidup leksikal, penerusan pointer melalui panggilan/hasil, adaptor memori asing dan native shadow metadata memerlukan implementasi lanjutan.

--max-memory mengatur anggaran byte alokasi logis, bawaan 64 MiB. InterpreterOptions::memory_limits juga membatasi jumlah alokasi 16384, metadata byte pointer 262144 fragmen dan kerja byte/metadata 256 Mi unit. Batas terlampaui mengembalikan MemoryLimit dengan lokasi IR, terpisah dari trap program. Verifikasi juga menolak overflow ukuran penyimpanan yang diketahui untuk target keluaran sebelum eksekusi.

Model memori: 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)