Dokumentasi Whale

Panduan untuk komponen rantai alat, perintah yang tersedia, dan dokumentasi referensi.

Wave Foundation

Pendahuluan

Whale adalah rantai alat kompiler tujuan umum untuk implementasi bahasa pemrograman dan alat kompiler. Menyediakan ekspresi perantara yang diketik (IR), assembler AMD64, pustaka file objek, dan fungsi berbasis linker. Setiap komponen digunakan melalui perpustakaan Rust dan perintah whale.

IR mengekspresikan semantik komputasi secara independen dari pengkodean bahasa mesin. Assembler mengkodekan instruksi mesin untuk membuat objek yang dapat direlokasi. Pustaka objek mewakili bagian, simbol, dan penataan ulang. Linker menyelesaikan referensi antar objek dan menempatkan file yang dapat dieksekusi.

Membangun dan menggunakan alat

bekerja dokumen
Apa yang dilakukan setiap alat Komponen rantai alat
Wave Pembuatan program/tautan/pemilihan target Bangun dan Tautkan
Manajemen paket/ketergantungan Vex
Whale Jalankan perintah Whale CLI

Panduan Dokumen

dokumen referensi konten
Lihat IR Jenis, nilai, fungsi, aliran kontrol, validasi, format pertukaran
Operasi numerik Aritmatika bilangan bulat, pergeseran, konversi tipe, floating point
Model memori Inisialisasi, validasi penunjuk, perhitungan alamat, tata letak, string
Men-debug dengan O0 Retensi komputasi, penyimpanan variabel, informasi debug
AMD64 Sasaran Pengidentifikasi target, konvensi pemanggilan, cakupan fungsi native
Perakit dan Penghubung Operan perakitan, bagian, simbol, tautan statis

Dokumen referensi mendefinisikan aturan semantik untuk Whale. Fitur yang tersedia ikuti tabel di bawah ini. Operasi yang dijelaskan dalam dokumentasi referensi mungkin tidak tersedia di semua build.

Status dukungan

komponen Antarmuka disediakan batas
perakit Buat ELF64 objek yang dapat direlokasi dari perakitan AMD64 Cakupan perintah dan arahan yang tidak lengkap
perpustakaan objek Komposisi objek, payload tanpa BSS, validasi target, AMD64 ELF64 serialisasi dan implementasi rekaman Wave yang dapat dipilih untuk memeriksa ukuran. Objek yang dapat direlokasi bukanlah objek yang dapat dieksekusi
IR Konstruksi, pencetakan, panggilan langsung/tidak langsung yang diperiksa tanda tangan, penurunan versi AST, validasi target, dan tata letak tipe yang diperiksa AST/diketik IR format 2 dan konstanta bit-tepat tersedia; mengetik IR parsing dan emisi panggilan mesin tetap tidak tersedia
penghubung Interpretasi simbol, verifikasi target input, inspeksi penempatan bagian file/memori Menerapkan relokasi penuh dan mengeluarkan file yang dapat dieksekusi tidak didukung.
Menjalankan dan Men-debug Aturan semantik didefinisikan dalam dokumen ini IR juru bahasa, selesaikan pembuatan kode native, pemeriksaan runtime memori jejak, keluaran DWARF tidak didukung

Aturan yang melarang perilaku tidak terdefinisi berlaku untuk IR terverifikasi dan melacak memori. Implementasi eksperimental belum mengimplementasikan semua pemeriksaan runtime dalam dokumentasi referensi memori/eksekusi.

Membangun dan Merakit

Bangun dengan Rust 1.86.0 atau lebih tinggi.

git clone https://github.com/wavefnd/Whale.git
cd Whale
cargo build --release --locked

Simpan perakitan berikut sebagai answer.asm.

section .text
global answer

answer:
    mov eax, 42
    ret

Buat objek ELF64.

./target/release/whale asm --amd64 answer.asm -o answer.o

Ia menggunakan assembler Whale sendiri, jadi tidak diperlukan assembler eksternal. Outputnya berisi fungsi yang dapat dipanggil dan tidak berisi kode startup proses apa pun.

Perintah eksperimental AST→IR tersedia dengan membangun dengan --features socket-cli. Untuk perintah CLI, lihat Referensi Perintah.

Penggunaan dan diagnosis perpustakaan

IR harus diverifikasi sebelum eksekusi atau pembuatan kode. Kesalahan input dan penyalahgunaan builder akan mengembalikan kesalahan struktural. Kesalahan input di perpustakaan tidak boleh menghentikan proses host atau menimpa konten yang ada. Alat yang menerima masukan tidak tepercaya harus dapat menyesuaikan batas sumber daya.

Versi rantai alat, masukan, target, dan konfigurasi yang sama harus menghasilkan keluaran deterministik. Metadata distribusi mengidentifikasi versi·commit·dan fitur yang tersedia. CI memeriksa masukan yang baik, masukan yang ditolak, trap, O0 retensi, round-trip, native semantik eksekusi untuk setiap antarmuka. Untuk perintah pengembangan/verifikasi, silakan merujuk ke Whale Informasi Kontribusi.