blob: a44afab5d772db2827464be5e5154cc3a69e08b4 (
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
|
# コンパイラのロードマップ
[English](roadmap.md) | 日本語
未完了の作業と将来の言語設計案の要約です。現在の言語仕様や実装済みの機能を
示すものではありません。詳細と最新の判断は[英語版](roadmap.md)を参照してください。
## 正確性とコンパイル
- 理想 IR の評価器で、狭いフィールドへの Store に必要な切り詰めと丸めを行う。
- 依存関係全体を調べ、変更を伝播してから保存 IR を再利用する、正しい増分ビルドを実装する。
- ライブラリオブジェクト全体ではなく、必要なメンバーの IR を選択してロードする。
- 最適化後の関数サイズと安定した順位を使い、インライン化の選択を決定的にする。
- CFG の実行頻度推定、ループの回転、定数インスタンスフィールドの格納省略を検討する。
## 言語とランタイム
- アンダースコアによる公開インターフェースの選別に加え、ソースの private アクセス規則を決めて強制する。
- 未完成の self をヘルパーへ渡せる条件と、コンストラクタの完了検査を行う時点を検討する。
- ELF シンボルの可視性と、未知の呼び出し元・コード出力の所有権を区別する。
- クラス初期化子の整数引数を引数配列に置き換える。
- 初期化全体を静的データで表せるクラスについて、実行時の初期化呼び出しと状態を省略する。
- コンパクトなコード/データ領域、ネイティブポインタ型、GC に依存しない寿命管理を設計する。
## データとライブラリの設計案
- 名前付きフィールドの末尾に配列を配置する構造体と、異なる幅の長さフィールド。
- 要素を生成する関数を使う配列初期化。
- 可変・不変・C 互換・Unicode・短い値文字列の各用途に応じた文字列ライブラリ。
- 構造体のインライン格納と値渡し。
- `int` の既定幅を現在の `i64` から `i32` に変えるかどうか。
これらの言語変更には、それぞれ設計判断と導入する章の境界が必要です。
|