mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 00:46:39 +01:00
3.3 KiB
3.3 KiB
Application.Run Terminology - Executive Summary
The Ask
Propose improved terminology for Application.Run lifecycle APIs to reduce confusion.
Maintainer Feedback
Based on @tig's review:
- ✅ Keep deep analysis and diagrams
- ✅ Keep
BeginandEnd(not wordy like BeginSession/EndSession) - ✅ Keep
RequestStop(non-blocking nature is clear) - ✅ Preserve distinction between
RunLoop(starts driver's mainloop) andRunIteration(one iteration)
The Real Problems (Only 2)
1. RunState Sounds Like State Data
RunState rs = Application.Begin(window); // ❌ What state does it hold?
Reality: It's a token/handle for Begin/End pairing, not state data.
Solution: Rename to RunToken (clear it's a token, concise).
2. EndAfterFirstIteration Confuses End() Method with Loop Control
Application.EndAfterFirstIteration = true; // ❌ Does this call End()?
Reality: It controls RunLoop() behavior, not lifecycle cleanup.
Solution: Rename to StopAfterFirstIteration (aligns with RequestStop, clearly about loop control).
Proposed Changes (Minimal - 2 Names Only)
| Current | Proposed | Why |
|---|---|---|
RunState |
RunToken |
Clear it's a token, not state |
EndAfterFirstIteration |
StopAfterFirstIteration |
Clear it controls loop, aligns with RequestStop |
Keep Unchanged
| API | Why It Works |
|---|---|
Begin / End |
Clear, concise - not wordy |
RequestStop |
"Request" appropriately conveys non-blocking |
RunLoop / RunIteration |
Distinction is important: RunLoop starts mainloop, RunIteration processes one iteration |
Usage Comparison
Before (Confusing)
RunState rs = Application.Begin(window);
Application.EndAfterFirstIteration = true;
Application.RunLoop(rs);
Application.End(rs);
After (Clear)
RunToken token = Application.Begin(window);
Application.StopAfterFirstIteration = true;
Application.RunLoop(token);
Application.End(token);
Benefits
- ✅ Addresses the 2 primary sources of confusion
- ✅ Minimal disruption (only 2 names)
- ✅ Backward compatible (obsolete attributes on old names)
- ✅ Respects maintainer feedback
- ✅ Preserves what works well
Documents
- TERMINOLOGY_PROPOSAL.md - Complete analysis with rationale
- TERMINOLOGY_QUICK_REFERENCE.md - Quick comparison and examples
- TERMINOLOGY_VISUAL_GUIDE.md - Visual diagrams showing the issues
Alternative Options
For RunState
- RunToken ⭐ (Recommended) - Clear, concise
- ExecutionContext - Industry standard but longer
- Keep as-is - Not recommended (remains misleading)
For EndAfterFirstIteration
- StopAfterFirstIteration ⭐ (Recommended) - Aligns with RequestStop
- SingleIteration - Shorter but less obvious
- Keep as-is - Not recommended (continues confusion)
Migration Path
Backward compatible via obsolete attributes:
[Obsolete("Use RunToken instead")]
public class RunState { ... }
[Obsolete("Use StopAfterFirstIteration instead")]
public static bool EndAfterFirstIteration { get; set; }
Users can migrate gradually with simple find/replace.
Status: Revised based on maintainer feedback Focus: Minimal, targeted changes addressing real confusion Impact: Low (2 names), High clarity gain