diff options
Diffstat (limited to 'chapter29/README.ja.md')
| -rw-r--r-- | chapter29/README.ja.md | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/chapter29/README.ja.md b/chapter29/README.ja.md index 54c7b5a6..8a3ff493 100644 --- a/chapter29/README.ja.md +++ b/chapter29/README.ja.md @@ -4,8 +4,8 @@ [前の章: 第28b章 — 分離コンパイル](../chapter28b/README.ja.md) -この章では、第28b章の言語と分離コンパイルの動作を保ちながら、コンパイラを -読みやすく、変更しやすく整理します。最初の変更は、3,000行を超えたパーサを +この章では、コンパイラを読みやすく、変更しやすく整理します。 +最初の変更は、3,000行を超えたパーサを 文法のまとまりに沿って `parser/` パッケージへ分割することです。 `Parser` がカーソル、スコープ、型の登録情報を持ち、各部品は `Parser P` を @@ -14,10 +14,21 @@ [パーサの構成(英語)](src/main/java/com/seaofnodes/simple/parser/README.md)と [文法と実装の対応表(英語)](docs/29-grammar.md)からコードをたどれます。 -初期化完了チェックは、構文解析後のヘルパー関数の Return を調べます。 -未初期化の必須フィールドを private memory に残すため、終了経路の別の一覧は不要です。 +インスタンスのフィールドは、初期化中も通常の Load と Store を使います。 +各終了経路のメモリは Return に統合し、最後に全フィールドを再格納する処理は行いません。 +未初期化のフィールドは `TypeScalar.BOT` で表し、meet でも未初期化の分岐が残ります。 +通常のメモリ型の前向き解析で初期化を確認します。詳細は `Construction.java` の +クラスコメントに記載しています。クラスのシングルトン初期化は従来の方式を維持します。 ソース上のプライバシー制約は今回は追加せず、[ロードマップ](../docs/roadmap.md)に残します。 +[構築グループの実験(英語)](docs/construction-groups.md)では、コンストラクタの +`C ^arg` 引数で未完成の参照を渡せます。未完成の引数を受け取る new の結果も未完成です。 +`TypeMemPtr` の修飾子を通常の型解析で伝播し、一時的な `ConstructNode` が +各 new の実引数から結果の修飾子を計算します。 +未完成のオブジェクトのフィールドは self 以外から読めず、通常の関数呼び出しには +完成した参照が必要です。フィールド要件の推論は後回しにし、対応するテストを保存しています。 +`^` を使うコンストラクタの分離コンパイルは未対応です。 + リポジトリのルートからビルドとテストを実行します。 ```sh |
