summaryrefslogtreecommitdiff
path: root/chapter-construction/README.ja.md
blob: a02548679794390ae41b433143caed5a7059414d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# オブジェクトの構築と非公開メモリ

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

[前章: 型が確定する前の SSA 構築](../chapter-incomplete-types/README.ja.md) |
[章分割の計画](../docs/chapter-split.md)

この章では、フィールドの初期化とコンストラクタを関数として扱います。
構築中のフィールドはローカルな SSA 値として扱い、分岐やループでは
通常の Phi で合流させます。各初期化関数の出口で通常の Store を生成し、
フィールドごとの非公開メモリを次の関数に渡します。構築が完了した時点で、
`EscapeNode` が初期化済みのフィールドを公開メモリに合流させます。

全ての実行経路で必須フィールドが初期化されていることを確認します。
構築中の `self` を通常の関数に渡したり、オブジェクトに格納したりする
ことは、この章では禁止します。別名や呼び出しを通じた公開の追跡は、
次のエスケープ解析の章で扱います。この境界は引き続き検討します。

モジュール、クラスの遅延初期化、分割コンパイルはまだ導入しません。
詳しい説明、制限、実行例は [英語版](README.md) を参照してください。

このディレクトリで `make lib tests CTAGS=` を実行できます。