メインコンテンツまでスキップ

Wave + Whale 統合開発ロードマップ v2

この文書は、Wave言語とWhaleコンパイラーツールチェーンの統合開発プロセスを段階的に整理したロードマップです。 WaveとWhaleは初期には分離された構成要素で始まりますが、最終的には一つの独立した言語エコシステムに完全に統合されることを目指します。

全体の開発段階は次のような流れをたどります。

pre-alpha → pre-beta → alpha → beta → rc → release

各段階は前の段階の結果を基に進行され、一つの段階が完了すると以前の構造に戻らない一方向の開発を前提としています。


Pre-Beta ステージ

Pre-Beta段階の目標はWave言語のフロントエンドを完成し、LLVMバックエンドを基に言語の全体機能を実装することです。 この段階ではWhaleを使用せず、コンパイルと実行は完全にLLVMを通じて行われます。

文法自体を拡張する作業はこの段階では行いません。 既に定義された仕様に基づいてすべての文法要素を実際に動作させることが核心の目標です。 エラーメッセージの質、タイプチェック、変数スコープ処理など、フロントエンド構造の安定化に集中します。

実装範囲には変数の宣言と出力、基本演算が含まれ、関数の定義と呼び出し、条件文(if / else if / else)、ループ(while / break / continue)もすべてこの段階で完成されます。 また、フォーマット出力、明示的なタイプ指定、ptr<T>の形のポインタ設計、array<T, N>の形の配列設計が含まれます。

この段階でWaveコンパイラはすべてRustで作成され、LLVM IR生成とAOT実行のためにinkwellとllvm-sysを使用します。


Alpha ステージ

Alpha段階の目標はWhaleバックエンドを導入し、LLVMとWhaleを併用する構造を確立することです。 LLVMは依然として基本バックエンドとして維持され、Whaleは選択的に使用できるバックエンドとして追加されます。

Waveコードを実行するときに--backendオプションを使って、LLVMとWhaleのどちらのバックエンドを使用するかを選択できます。

wavec run main.wave --backend=whale
wavec run main.wave --backend=llvm

この段階では、WhaleそのもののIR構造を設計し定義します。 Instruction、Value、Blockといった主要な要素を整理し、Wave ASTをWhale IRに変換するIRジェネレーターを実装します。

また、Whale用のコードジェネレーターを実装し、アセンブリまたはバイナリ形式で実行可能にします。 LLVMでは実装が難しいか非効率な型、例えばi1024のような巨大な整数型や高度なポインタ構造は、Whale専用の機能としてこの段階で導入されます。

チェックポイントとしては、WhaleバックエンドでHello Worldが表示でき、変数の宣言と割り当て、ポインタ処理、IRデバッグツールが正常に動作する必要があります。 WaveからWhaleへのIR変換が実質的に進行する段階です。


Beta ステージ

Beta段階の目標はWhaleへ完全に移行し、LLVMの依存性を取り除くことです。 この段階からWaveのコンパイルと実行はWhaleのみを使用します。

LLVMに関連する依存関係やモジュールはすべて削除され、コード生成と実行経路はWhaleを基準に最適化されます。 IRの生成から実行までのプロセスを単純かつ迅速にすることが主要な課題です。

Whale IRに対する最適化パスを設計し、コード生成速度と実行効率を改善します。 Waveのすべての文法はこの段階でWhaleバックエンドを基準に完全にサポートされるべきです。

テストの観点からは、単体テストと全体テストスイートの両方を行い、WSONと標準ライブラリの互換性、クロスプラットフォームのWhaleビルドの可否を同時に検証します。


RC(リリース候補)段階

RC段階の目標はWaveのブートストラップを開始することです。 この段階からWaveコンパイラのRust実装を徐々に削除し、Wave言語自体でWaveコンパイラを再作成し始めます。

Whaleを基にWave IRジェネレーターを再作成し、コンパイラの主要ロジックとstd/coreライブラリをWaveコードで置き換えます。 この過程を通じて、Whaleはセルフホスティングの段階に入ります。

ブートストラップが成功すれば、初のWaveネイティブコンパイラが誕生します。


リリース段階(v0.0.1)

リリース段階はWaveの公式な初リリースを意味します。 この時点でWaveとWhaleは完全に統合された独立した言語生態系を構成します。

リリース構成要素にはWave言語と標準ライブラリ、Whaleコンパイラツールチェーン、Vexパッケージマネージャ、そしてWSONデータフォーマットが含まれます。

この段階のWaveは完全にWaveコードで作成されたコンパイラを持ち、Whaleの最適化は完了した状態であるべきです。 Vexを通じたビルドおよびデプロイのフローが定着し、vex build --windowsのようなクロスOSビルドも可能であるべきです。


開発メタ戦略

Wave + Whaleの開発は単純な段階の進行ではなく、明確な戦略に基づいて行われます。 Whaleを開発しながら同時にWaveバックエンドを構成していく列車+レール戦略を採用し、バックエンド構造と言語設計を並行して発展させます。

Alpha段階では、--backendオプションを使ったバックエンド分岐戦略が重要な役割を果たし、LLVMとWhaleを直接比較し検証するための基盤を提供します。

RC以降には構造が逆転し、WaveコードがWhaleを通じてWave自体をコンパイルする構造逆転計画が本格的に進行されます。