summaryrefslogtreecommitdiff
path: root/chapter-construction/README.ja.md
diff options
context:
space:
mode:
Diffstat (limited to 'chapter-construction/README.ja.md')
-rw-r--r--chapter-construction/README.ja.md14
1 files changed, 11 insertions, 3 deletions
diff --git a/chapter-construction/README.ja.md b/chapter-construction/README.ja.md
index 86104de0..2fa83280 100644
--- a/chapter-construction/README.ja.md
+++ b/chapter-construction/README.ja.md
@@ -11,10 +11,18 @@
フィールドごとの非公開メモリを次の関数に渡します。構築が完了した時点で、
`EscapeNode` が初期化済みのフィールドを公開メモリに合流させます。
-全ての実行経路で必須フィールドが初期化されていることを確認します。
+パーサーはコンストラクタの出口で、必須フィールドが初期化されていることを確認します。
+この検査は SCCP より前なので、後の解析で安全と分かる呼び出しでも拒否する場合があります。
構築中の `self` を通常の関数に渡したり、オブジェクトに格納したりする
-ことは、この章では禁止します。別名や呼び出しを通じた公開の追跡は、
-次のエスケープ解析の章で扱います。この境界は引き続き検討します。
+ことは、この章では禁止します。次のエスケープ解析の章でもこの制限は残ります。
+インライン化後に安全性を確認してヘルパー呼び出しを許す案は、まだ実装していません。
+
+未完成のオブジェクトをコンストラクタ内で読むことはできますが、読むフィールドは
+すでに初期化されている必要があります。他のフィールドはまだ未設定でも構いません。
+final フィールドも構築中はローカル値として再代入でき、ループでは通常の Phi を使います。
+Store はヘルパーの出口で生成します。構築後の書き換え、通常のローカル `val` への再代入、
+共有する関数宣言の置き換えは禁止します。
+詳細と提案中の規則は [英語版](README.md#helper-calls-and-final-fields-during-construction) を参照してください。
モジュール、クラスの遅延初期化、分割コンパイルはまだ導入しません。
詳しい説明、制限、実行例は [英語版](README.md) を参照してください。