2.5 KiB
Absolut. Hier ist der Projektplan, der unsere Ergebnisse zusammenfasst.
Projektplan: Thread-sicheres Zustandsmodell
- Datum: 30. September 2025
- Uhrzeit: 13:09
Motivation
Ziel ist eine einfache, visuell darstellbare und inhärent threadsichere Skriptsprache. Eine rein funktionale Herangehensweise erwies sich als unpraktisch. Stattdessen wird ein pragmatischer Ansatz nach dem Vorbild von Clojure verfolgt: Daten sind standardmäßig immutable, aber es gibt explizite, sichere Werkzeuge zur Verwaltung von veränderlichem Zustand.
Ziel
Die Sprache soll eine klare Trennung zwischen unveränderlichen Werten und veränderlichen Identitäten (Variablen) haben. Jede Zustandsänderung muss explizit und atomar sein, um Race Conditions per Design auszuschließen. Die Implementierung soll dabei möglichst einfach und performant (lock-free) sein.
Ergebnis
Wir haben eine elegante, lock-freie Lösung erarbeitet, die auf einer zentralen Regel basiert: Der Typ (FKind) einer TDataValue ist nach der Initialisierung immutable.
- Atomarität in
TDataValue: Die atomaren Operationen (Reset,CompareAndSet) werden direkt als Instanzmethoden auf demTDataValue-Record implementiert. Dies ist möglich, weil dieFKind-Immutabilität die TOCTOU-Race-Condition verhindert, die eine solche Implementierung sonst unsicher machen würde. - Selektives Capturing bleibt: Der
IValueCell-Mechanismus in derScope-Unit wird beibehalten. Seine entscheidende Rolle ist nicht die Atomarität, sondern die Speicheroptimierung, indem Closures nur die Referenzen auf die Upvalues halten, die sie wirklich benötigen, und nicht den gesamten Parent-Scope. - Separation of Concerns:
TDataValueweiß, wie man seinen Zustand atomar ändert.IValueCellist die notwendige Indirektion, um Closures und Speichermanagement korrekt abzubilden.
Todo
- Die atomaren Instanzmethoden (
Reset,CompareAndSet) inMyc.Data.Valuefinalisieren. - Die
IValueCell-Implementierung inMyc.Ast.Scopeso anpassen, dass sie die neuen atomaren Instanzmethoden vonTDataValueaufruft. - Neue RTL-Funktionen
reset!,compare-and-set!und das abgeleiteteswap!erstellen, die im Evaluator auf denIValueCell-Instanzen operieren. - Das alte
assign-Schlüsselwort aus Parser, Binder und Evaluator entfernen. - Bestehende Tests (
CreateSMA,FailingUpvalueButtonClicketc.) auf die Verwendung vonreset!oderswap!anstelle vonassignumstellen.