Whale ドキュメント

ツールチェーンコンポーネント、利用可能なコマンド、およびリファレンスドキュメントを案内します。

Wave Foundation

はじめに

Whaleは、プログラミング言語の実装とコンパイラツールのための汎用コンパイラツールチェーンです。タイプを持つ中間表現(IR)、AMD64アセンブラ、オブジェクトファイルライブラリ、リンカベースの機能を提供します。各コンポーネントは、Rustライブラリとwhaleコマンドで使用されます。

IRは、機械語エンコーディングとは無関係に計算の意味を表します。アセンブラはマシンコマンドをエンコードして再配置可能なオブジェクトを生成します。オブジェクトライブラリはセクション・シンボル・再配置を表現します。リンカはオブジェクト間の参照を解決し、実行可能ファイルを配置します。

ビルドとツールの使用

仕事 文書
各ツールの役割 ツールチェーンコンポーネント
Wave プログラムビルド・リンク・対象選択 ビルドとリンク
パッケージ・依存性管理 Vex
Whale コマンド実行 Whale CLI

ドキュメントガイド

参照文書 内容
IR参照 タイプ、値、関数、制御フロー、検証、交換フォーマット
数値演算 整数演算、シフト、形変換、浮動小数点
メモリモデル 初期化、ポインタ検証、アドレス計算、レイアウト、文字列
O0とデバッグ 計算保存、変数記憶領域、デバッグ情報
AMD64ターゲット ターゲット識別子、呼び出し規約、native機能の範囲
アセンブラとリンカ アセンブリオペランド、セクション、シンボル、静的リンク

参照文書は、Whaleの意味規則を定義します。利用可能な機能は以下の表に従います。参照資料に記載されている操作がすべてのビルドで提供されるわけではありません。

サポート状況

コンポーネント 提供されるインターフェース 制限
アセンブラ AMD64アセンブリ内のELF64再配置可能オブジェクトの作成 コマンドとディレクティブのサポート範囲が不完全
オブジェクトライブラリ オブジェクト構成、payloadなしBSS、ターゲット検証、サイズを検査するAMD64ELF64シリアライゼーションと選択可能なWaveレコードの実装 再配置可能オブジェクトは実行可能ファイルではありません
IR 構築、印刷、署名チェックされた直接/間接呼び出し、バージョン付き AST の引き下げ、ターゲットの検証、タイプ レイアウトのチェック AST/typed IR フォーマット 2 およびビット正確な定数が使用可能です。型付き IR の解析とマシンコールの発行は利用できないままです
リンカー シンボル解析、入力ターゲット検証、ファイル・メモリセクション配置検査 フル再配置の適用と実行可能ファイルの出力は未サポート
実行とデバッグ このドキュメントで意味ルールを定義する IRインタプリタ、完全なnativeコード生成、トレースメモリのランタイムチェック、DWARF出力は未サポート

未定義の動作を禁止する規則は、検証済みのIRとトレースメモリに適用されます。実験的実装にはメモリ・実行参照文書のランタイム検査がまだすべて実装されていません。

ビルドとアセンブル

Rust1.86.0以上でビルドします。

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

次のアセンブリをanswer.asmとして保存します。

section .text
global answer

answer:
    mov eax, 42
    ret

ELF64オブジェクトを作成します。

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

Whaleの独自のアセンブラを使用するため、外部アセンブラは必要ありません。結果には呼び出し可能な関数が含まれており、プロセスの開始コードは含まれません。

実験的なAST→IRコマンドは--features socket-cliでビルドすると使用できます。 CLIのコマンドはコマンドリファレンスを参照してください。

ライブラリの使用と診断

実行またはコード生成の前にIRを確認する必要があります。入力エラーとbuilder誤用は構造エラーとして返されます。ライブラリの入力エラーがホストプロセスを終了したり、既存の内容を上書きしたりしないでください。信頼できない入力を受け取るツールでは、リソース制限を調整できる必要があります。

同じツールチェーンのバージョン・入力・ターゲット・設定は決定的な出力を生成しなければなりません。配布物のメタデータは、バージョン・commit・使用可能な機能を識別します。 CIは、各インタフェースに対して通常入力、拒否する入力、trap、O0保存、round-trip、native実行の意味を確認します。開発・検証命令はWhale貢献案内を参照してください。