Whale-Dokumentation
Leitfaden zu Toolchain-Komponenten, verfügbaren Befehlen und Referenzdokumentation.
Wave Foundation
Einführung
Whale ist eine universelle Compiler-Toolchain für Programmiersprachenimplementierungen und Compiler-Tools. Bietet typisierte Zwischenausdrücke (IR), AMD64-Assembler, Objektdateibibliothek und Linker-basierte Funktionen. Jede Komponente wird über die Bibliothek Rust und den Befehl whale verwendet.
IR drückt die Semantik einer Berechnung unabhängig von der Maschinensprachenkodierung aus. Der Assembler kodiert Maschinenanweisungen, um verschiebbare Objekte zu erstellen. Objektbibliotheken repräsentieren Abschnitte, Symbole und Neuanordnungen. Der Linker löst Referenzen zwischen Objekten auf und platziert die ausführbare Datei.
Erstellen und verwenden Sie Tools
| Arbeit | Dokument |
|---|---|
| Was jedes Tool macht | Toolchain-Komponenten |
| Wave Auswahl von Programmaufbau/Link/Ziel | Erstellen und verknüpfen |
| Paket-/Abhängigkeitsverwaltung | Vex |
| Whale Befehl ausführen | Whale CLI |
Dokumenthandbuch
| Referenzdokument | Inhalt |
|---|---|
| Siehe IR | Typen, Werte, Funktionen, Kontrollfluss, Validierung, Austauschformate |
| Numerische Operationen | Ganzzahlarithmetik, Verschiebung, Typkonvertierung, Gleitkomma |
| Speichermodell | Initialisierung, Zeigervalidierung, Adressberechnung, Layout, Strings |
| Debuggen mit O0 | Berechnungsaufbewahrung, Variablenspeicher, Debug-Informationen |
| AMD64 Ziel | Zielkennung, Aufrufkonvention, native Funktionsumfang |
| Assembler und Linker | Assembly-Operanden, Abschnitte, Symbole, statische Links |
Das Referenzdokument definiert die semantischen Regeln für Whale. Verfügbare Funktionen folgen der Tabelle unten. Die in der Referenzdokumentation beschriebenen Vorgänge sind möglicherweise nicht in allen Builds verfügbar.
Supportstatus
| Komponente | Schnittstelle vorhanden | Grenze |
|---|---|---|
| Assembler | Erstellen Sie ein verschiebbares Objekt ELF64 aus der Baugruppe AMD64 | Unvollständige Abdeckung von Befehlen und Anweisungen |
| Objektbibliothek | Objektzusammensetzung, payload ohne BSS, Zielvalidierung, AMD64 ELF64 Serialisierung und wählbare Wave Datensatzimplementierung zur Überprüfung der Größe. | Verschiebbare Objekte sind keine ausführbaren Dateien |
| IR | Konstruktion, Druck, signaturgeprüfte direkte/indirekte Aufrufe, versionierte AST-Senkung, Zielvalidierung und geprüfte Typlayouts | AST/typed IR Format 2 und bitgenaue Konstanten sind verfügbar; eingegebenes IR-Parsing und Maschinenaufrufemission bleiben nicht verfügbar |
| Linker | Symbolinterpretation, Überprüfung des Eingabeziels, Überprüfung der Platzierung von Datei-/Speicherabschnitten | Die Anwendung einer vollständigen Verschiebung und die Ausgabe ausführbarer Dateien werden nicht unterstützt. |
| Ausführen und Debuggen | In diesem Dokument definierte semantische Regeln | IR-Interpreter, vollständige native-Codegenerierung, Laufzeitinspektion des Trace-Speichers, DWARF-Ausgabe nicht unterstützt |
Für verifizierte IR- und Trace-Speicher gelten Regeln, die undefiniertes Verhalten verbieten. Die experimentelle Implementierung implementiert noch nicht alle Laufzeitprüfungen in der Speicher-/Ausführungsreferenzdokumentation.
Bauen und zusammenbauen
Erstellen Sie mit Rust 1.86.0 oder höher.
git clone https://github.com/wavefnd/Whale.git
cd Whale
cargo build --release --locked
Speichern Sie die folgende Baugruppe als answer.asm.
section .text
global answer
answer:
mov eax, 42
ret
Erstellen Sie ein Objekt ELF64.
./target/release/whale asm --amd64 answer.asm -o answer.o
Es verwendet den eigenen Assembler von Whale, sodass kein externer Assembler erforderlich ist. Die Ausgabe enthält eine aufrufbare Funktion und keinen Prozessstartcode.
Die experimentellen AST→IR-Befehle sind durch Erstellen mit --features socket-cli verfügbar. Informationen zum Befehl CLI finden Sie unter Befehlsreferenz.
Bibliotheksnutzung und Diagnose
IR muss vor der Ausführung oder Codegenerierung überprüft werden. Eingabefehler und Missbrauch von builder führen zu Strukturfehlern. Eingabefehler in der Bibliothek dürfen den Hostprozess nicht beenden oder vorhandene Inhalte überschreiben. Tools, die nicht vertrauenswürdige Eingaben akzeptieren, sollten in der Lage sein, Ressourcenlimits anzupassen.
Dieselbe Toolchain-Version, Eingabe, dasselbe Ziel und dieselbe Konfiguration sollten eine deterministische Ausgabe erzeugen. Die Metadaten der Distribution identifizieren die Version·commit·und die verfügbaren Funktionen. CI prüft auf gute Eingaben, abzulehnende Eingaben, trap, O0 Aufbewahrung, round-trip, native Ausführungssemantik für jede Schnittstelle. Informationen zu Entwicklungs-/Verifizierungsbefehlen finden Sie unter Whale Beitragsinformationen.