Files
2025-10-22 13:26:51 +02:00

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.

  1. Atomarität in TDataValue: Die atomaren Operationen (Reset, CompareAndSet) werden direkt als Instanzmethoden auf dem TDataValue-Record implementiert. Dies ist möglich, weil die FKind-Immutabilität die TOCTOU-Race-Condition verhindert, die eine solche Implementierung sonst unsicher machen würde.
  2. Selektives Capturing bleibt: Der IValueCell-Mechanismus in der Scope-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.
  3. Separation of Concerns: TDataValue weiß, wie man seinen Zustand atomar ändert. IValueCell ist die notwendige Indirektion, um Closures und Speichermanagement korrekt abzubilden.

Todo

  • Die atomaren Instanzmethoden (Reset, CompareAndSet) in Myc.Data.Value finalisieren.
  • Die IValueCell-Implementierung in Myc.Ast.Scope so anpassen, dass sie die neuen atomaren Instanzmethoden von TDataValue aufruft.
  • Neue RTL-Funktionen reset!, compare-and-set! und das abgeleitete swap! erstellen, die im Evaluator auf den IValueCell-Instanzen operieren.
  • Das alte assign-Schlüsselwort aus Parser, Binder und Evaluator entfernen.
  • Bestehende Tests (CreateSMA, FailingUpvalueButtonClick etc.) auf die Verwendung von reset! oder swap! anstelle von assign umstellen.