diff options
| author | Cliff Click <cliffc@acm.org> | 2026-08-10 11:11:18 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-11-12 23:28:58 -0800 |
| commit | 772e3a1036d571de55b178ebd6d11ee5140d4e36 (patch) | |
| tree | f81fd53601df21871adb7500f8dc2b8fa3a829a2 /docs/chapter29/README.ja.md | |
| parent | 15b634f47b300cb611b30554ce390ac20f149f8f (diff) | |
| download | Simple-772e3a1036d571de55b178ebd6d11ee5140d4e36.tar.gz Simple-772e3a1036d571de55b178ebd6d11ee5140d4e36.zip | |
Chapter 29: Tech Debt Cleanup
Co-authored-by: Hsiang-Ying Fu <66062782+fuhsnn@users.noreply.github.com>
Co-authored-by: fuhsnn <66062782+fuhsnn@users.noreply.github.com>
Co-authored-by: Symious <14933944+symious@users.noreply.github.com>
Co-authored-by: Jun Kawasaki <jun784@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'docs/chapter29/README.ja.md')
| -rw-r--r-- | docs/chapter29/README.ja.md | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/docs/chapter29/README.ja.md b/docs/chapter29/README.ja.md new file mode 100644 index 00000000..4c697528 --- /dev/null +++ b/docs/chapter29/README.ja.md @@ -0,0 +1,39 @@ +# 第29章: 技術的負債の整理 + +[English](README.md) | 日本語 + +[前の章: 第28b章 — 分離コンパイル](../chapter28b/README.ja.md) + +この章では、コンパイラを読みやすく、変更しやすく整理します。 +最初の変更は、3,000行を超えたパーサを +文法のまとまりに沿って `parser/` パッケージへ分割することです。 + +`Parser` がカーソル、スコープ、型の登録情報を持ち、各部品は `Parser P` を +共有します。構文解析は引き続き Sea-of-Nodes IR を直接生成します。 +`Var` は `parser/` に、反復ピープホール最適化の `IterPeeps` は `codegen/` に移ります。 + +[パーサの構成(英語)](../../src/main/java/com/seaofnodes/simple/parser/README.md)と +[文法と実装の対応表(英語)](29-grammar.md)からコードをたどれます。 +インスタンスのフィールドは、初期化中も通常の Load と Store を使います。 +各終了経路のメモリは Return に統合し、最後に全フィールドを再格納する処理は行いません。 +未初期化のフィールドは `TypeScalar.BOT` で表し、meet でも未初期化の分岐が残ります。 +通常のメモリ型の前向き解析で初期化を確認します。詳細は `Construction.java` の +クラスコメントに記載しています。クラスのシングルトン初期化は従来の方式を維持します。 +ソース上のプライバシー制約は今回は追加せず、[ロードマップ](../roadmap.md)に残します。 + +[構築グループの実験(英語)](construction-groups.md)では、コンストラクタの +`C ^arg` 引数で未完成の参照を渡せます。未完成の引数を受け取る new の結果も未完成です。 +`TypeMemPtr` の修飾子を通常の型解析で伝播し、一時的な `ConstructNode` が +各 new の実引数から結果の修飾子を計算します。 +未完成のオブジェクトのフィールドは self 以外から読めず、通常の関数呼び出しには +完成した参照が必要です。フィールド要件の推論は後回しにし、対応するテストを保存しています。 +`^` を使うコンストラクタの分離コンパイルは未対応です。 + +リポジトリのルートからビルドとテストを実行します。 + +```sh +make lib tests release CHAPTERS=chapter29 CTAGS= +``` + +IntelliJ では `chapter29` モジュールと **chapter29 tests** 実行設定を使用します。 +ネイティブ実行を使うテストの前に、Make でランタイムと `sys` ライブラリをビルドしてください。 |
