summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-11-01 10:33:55 -0800
committerCliff Click <cliffc@acm.org>2026-11-01 10:33:55 -0800
commitf4bd723d929e53475f7990374dca7b7dfcbbdc42 (patch)
tree7bb080119e7b88ad4ac9b30af019fe6a5e4ba9dd /docs
parent0ac0c9e10287972ac3af5a4ee43d26f0d5b318fe (diff)
downloadSimple-f4bd723d929e53475f7990374dca7b7dfcbbdc42.tar.gz
Simple-f4bd723d929e53475f7990374dca7b7dfcbbdc42.zip
Add Chapter 29 for tech debt cleanup with the parser splitmain
Keep Chapter 28b intact and carry the grammar-oriented parser package, Var move, IterPeeps move, and parser regression tests into Chapter 29. Defer privacy and exclude its experimental tests and fixture changes. Register the chapter in the indexes, IntelliJ modules and run configurations, Maven reactor, roadmap, and linear-history publisher. Windows and Linux each pass 573 tests, release builds, 199 allocation replays, and 29 native checks.
Diffstat (limited to 'docs')
-rw-r--r--docs/intellij.md6
-rw-r--r--docs/roadmap.ja.md5
-rw-r--r--docs/roadmap.md45
3 files changed, 41 insertions, 15 deletions
diff --git a/docs/intellij.md b/docs/intellij.md
index a488fca6..df8a8330 100644
--- a/docs/intellij.md
+++ b/docs/intellij.md
@@ -35,9 +35,9 @@ class names occur in many chapters, so a class name alone cannot identify the
intended snapshot.
Tests that compile native code still need the C toolchain on IntelliJ's PATH.
-Tests using Chapter 28b's native runtime or saved `sys` library also need the
-Make prerequisites: run `make -C chapter28b release CTAGS=` before debugging
-those tests. IntelliJ's Java build does not build the native runtime or library.
+Tests using the native runtime or saved `sys` library in Chapters 28b and 29
+also need the Make prerequisites. Run `make -C chapter29 release CTAGS=`
+(or `chapter28b` for that snapshot) before debugging those tests. IntelliJ's Java build does not build the native runtime or library.
For the JUnit working directory and module classpath settings, see
[JetBrains' JUnit configuration reference](https://www.jetbrains.com/help/idea/run-debug-configuration-junit.html).
diff --git a/docs/roadmap.ja.md b/docs/roadmap.ja.md
index 395eab18..535909ee 100644
--- a/docs/roadmap.ja.md
+++ b/docs/roadmap.ja.md
@@ -5,6 +5,11 @@
未完了の作業と将来の言語設計案の要約です。現在の言語仕様や実装済みの機能を
示すものではありません。詳細と最新の判断は[英語版](roadmap.md)を参照してください。
+現在の作業場所は[第29章: 技術的負債の整理](../chapter29/README.ja.md)です。
+パーサの分割を引き継ぎ、初期化完了チェックなどを整理します。
+ソース上のプライバシー制約は、最初の整理が終わるまで保留します。
+自動メモリ管理と、2-D グラフィックス・キーボード・音声を使う小さなゲームも将来案です。
+
## 正確性とコンパイル
- Eval2 の追加ロード時のスケジューリング用領域を整理し、`GlobalEscapeNode` が共有する呼び出し・関数要約の走査を増分化する。
diff --git a/docs/roadmap.md b/docs/roadmap.md
index 98309114..0027f8fe 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -3,10 +3,25 @@
English | [日本語](roadmap.ja.md)
Open compiler work and language proposals, reviewed against the current
-snapshots on 2026-10-29. These are future changes, not promises about the
+snapshots on 2026-11-01. These are future changes, not promises about the
language implemented by the tutorial. Language changes still need their own
design decisions and chapter boundaries.
+## Current chapter: tech debt cleanup
+
+[Chapter 29](../chapter29/README.md) carries the parser split into grammar-sized
+components, with `Var` in `parser/` and `IterPeeps` in `codegen/`. It is the
+workspace for further cleanup; Chapter 28b retains the preceding compiler.
+
+Keep the recursive-descent path aligned with the grammar. Review moving `TYPES`
+to `CodeGen`, and simplify constructor completion using the already-merged
+return scope without losing uninitialized-field information. Consider whether
+an allocation-free use of try-with-resources makes keep/unkeep pairing clearer;
+this remains an experiment, not a new resource-management convention.
+
+Source privacy is deferred until after this initial cleanup. The archived
+implementation and tests are experiments, not part of Chapter 29's behavior.
+
## Compilation and optimization
### Phase ordering and incremental analysis
@@ -106,9 +121,9 @@ instance-layout optimization.
### Source privacy
Underscores already select the public interface, but source access to another
-class's private fields is not rejected. The proposal is to enforce privacy
-starting in Chapter 28a, then preserve it across imports in 28b. This language
-change still needs review; it is not a correction to impose on earlier chapters.
+class's private fields is not rejected. Revisit source enforcement and its
+preservation across imports after the Chapter 29 cleanup. This language change
+still needs review; it is not a correction to impose on earlier chapters.
- A field or method beginning with `_` is accessible only from its declaring
class, including constructors and methods. Enclosing, nested, and sibling
@@ -206,6 +221,20 @@ native boundary conversions when choosing the representation.
These are language-design alternatives. The sketches below are not executable
examples of the current Simple grammar.
+### Automatic memory management
+
+Explore automatic memory reclamation with few explicit lifetime annotations,
+using Rust and [Goose](https://github.com/aardappel/goose/blob/master/docs/tutorial.md)
+as design references. Decide ownership, borrowing, sharing, cycles, and native
+retention together with the existing object and array model. This is a language
+design candidate, independent of compact pointer storage.
+
+### A small interactive game
+
+Build a small game in Simple with 2-D graphics, keyboard input, and sound.
+Use it to exercise practical library APIs and native bindings; choose the game
+and supporting graphics/audio library when this project is taken up.
+
### Structs with trailing arrays
Allow named fields followed by an array length and inline element storage:
@@ -278,11 +307,3 @@ syntax uniform and define the calling convention for by-value arguments.
Consider making `int` mean `i32` instead of the current `i64`. This changes
overflow behavior, layouts, APIs, and native interfaces, so it needs a language
decision and a deliberate compatibility boundary.
-
-### Parser Cleanup
-
-Get the Parsers' structure closer to an ideal R-D parser, and matching the
-grammer doc. Move TYPES to CodeGen, and generally restructure for readability.
-Ponder using try-w-resources to do the keep/unkeep pairing (do NOT do any
-allocation in the `try`, just bring up an object w/auto-closable which tracks
-the unkeeps) - see if that looks any cleaner.