lambdaclass / lambdaclass/lambda_compiler_kit
perf/safety: convert parseStr from recursive to iterative to prevent stack overflow
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Lean
- Sterne
- 2
- Forks
- 1
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Problem
parseStr in Lck/Json/Tokenizer.lean is written as a recursive CPS function. While the continuation wrapping is proven zero-cost at runtime (proofs are erased), the recursion itself is structural on the input — meaning for a string literal of length n, the Lean runtime creates n stack frames.
For pathologically large string values this can overflow the stack.
Expected fix
Rewrite parseStr as an iterative (tail-recursive or explicit loop) accumulator, maintaining the same CPS interface for callers. The proof structure can be adapted to use an inductive invariant on the loop state.
References
- Flagged by AI code review on PR #8
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in Lck/Json/Tokenizer.lean bei der rekursiven CPS-Implementierung von parseStr und untersuche anschließend, wie die Aufrufer von dessen CPS-Schnittstelle abhängen. Schreibe die String-Verarbeitung als iterativen Akkumulator um, wobei diese Schnittstelle erhalten bleibt, passe den Beweis anhand einer induktiven Schleifeninvariante an und verifiziere, dass große String-Literale nun nicht mehr mit einem Stack Overflow rechnen müssen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Bereich
- compilers, performance
- Issue-Typ
- Refactoring
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 45/100