summaryrefslogtreecommitdiff
path: root/docs/roadmap.ja.md
blob: 9c5a8e8f508f04d03fd2480dc3f1547abf490f62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# コンパイラのロードマップ

[English](roadmap.md) | 日本語

未完了の作業と将来の言語設計案の要約です。現在の言語仕様や実装済みの機能を
示すものではありません。詳細と最新の判断は[英語版](roadmap.md)を参照してください。

現在の作業場所は[第31章](../chapter31/README.md)で、テーマは未定です。
第30章では ASCII 三目並べを題材に、文字列補間、型別の文字列変換、1 キー入力、
ソース位置付きの診断を実装しました。以下は残っている作業です。

## 目次

- [正確性とコンパイル](#正確性とコンパイル) — 診断、増分解析・ビルド、ロード、最適化。
- [言語とランタイム](#言語とランタイム) — アクセス制御、構築契約、初期化、メモリ管理。
- [データとライブラリの設計案](#データとライブラリの設計案) — 配列、文字列、構造体の値、グラフィカルなゲーム。

## 正確性とコンパイル

- 診断に関連する宣言や呼び出し位置を追加し、最適化・インポート後も位置を保持して連鎖的なエラーを抑える。
- Eval2 の追加ロード時のスケジューリング用領域を整理し、`GlobalEscapeNode` が共有する呼び出し・関数要約の走査を増分化する。
- 第28b章の推移的なタイムスタンプ検査を拡張し、入力の内容・コンパイラの版・オプションを記録するビルドドライバを実装する。
- 型の読み込みからネイティブリンクまでのライブラリ変更を検出する。SHA-256 を含むシンボルの照合は将来案であり、Eval2 は整合したビルドを前提とする。
- コンパイル単位ごとの選択的ロードを、オブジェクト内の関数単位へ細分化する。
- 最適化後の関数サイズと安定した順位を使い、インライン化の選択を決定的にする。
- CFG の実行頻度推定、ループの回転、定数インスタンスフィールドの格納省略を検討する。
- [整数命令の幅](roadmap.md#integer-instruction-widths): 明示的な縮小を命令選択でまとめ、範囲の証明がある場合に32ビット命令を使う。使用側が必要とするビットの後向き解析は別の将来案とし、先に現在のレジスタ割り当ての再試行失敗を調べる。
- [関数ごとの呼び出し規約](roadmap.md#per-function-calling-conventions): 破壊レジスタの要約から始め、既知の直接呼び出しに専用の引数・戻り値配置を検討する。間接呼び出し、再帰、公開ABIのメタデータ、関数間の共同割り当ては段階的な将来案とする。

## 言語とランタイム

- アンダースコアによる公開インターフェースの選別に加え、ソースの private アクセス規則を決めて強制する。
- 第29章の前向き型フローによる部分初期化済みフィールドの読み出しを基礎に、推論されたフィールド要件・入れ子の保証・分離コンパイル用の構築契約を将来検討する。
- ELF シンボルの可視性と、未知の呼び出し元・コード出力の所有権を区別する。
- クラス初期化子の整数引数を引数配列に置き換える。
- 初期化全体を静的データで表せるクラスについて、実行時の初期化呼び出しと状態を省略する。
- コンパクトなコード/データ領域、ネイティブポインタ型、GC に依存しない寿命管理を設計する。
- C のバイトポインタは8バイトとし、アドレス範囲とメモリ所有権を分けて追跡する。C による Simple バッファの一時借用は、参照を保持しないという文書化された契約で許可する。C レイアウトの構造体は将来の拡張とする。
- 所有権、共有、循環参照、ネイティブ側での参照保持を含めた自動メモリ管理を検討する。

## データとライブラリの設計案

- 名前付きフィールドの末尾に配列を配置する構造体と、異なる幅の長さフィールド。
- 要素を生成する関数を使う配列初期化。
- 実装済みの `sys.aryu8` と `sys.text` を基礎に、所有権・Unicode・C 互換・短い値文字列の設計を拡張する。
- 構造体のインライン格納と値渡し。
- ASCII 三目並べの次に、2-D グラフィックス・キーボード・音声を使う小さなゲームでライブラリを試す。

これらの言語変更には、それぞれ設計判断と導入する章の境界が必要です。