Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Copy-On-Write #103

Open
bafto opened this issue Nov 25, 2024 · 0 comments
Open

Copy-On-Write #103

bafto opened this issue Nov 25, 2024 · 0 comments
Labels
Typ: Konzept Nur ein Konzept für eine Idee Typ: Leistung Verbesserung der Ausführ- oder Kompiliergeschwindigkeit

Comments

@bafto
Copy link
Member

bafto commented Nov 25, 2024

Motivation

DDP arbeitet standardmäßig mit Value-Types, will heißen im folgenden code Beispiel wird jeder der Wert der Variable a kopiert, nicht nur die Referenz und es wird neuer Speicher für b allokiert:

Der Text a ist "hallo".
Der Text b ist a.

Das ist an sich kein sonderliches Problem, allerdings führt es in manchen Fällen zu performance Problemen und diese zu lösen kann recht unschön sein. Die häufigsten Beispiele dafür finden sich im Duden.

Alle Funktionen im Duden sollten zumindest angemessen Performant sein. Das führt häufig zu folgendem Code:

Die Funktion foo mit dem Parameter a vom Typ Text Referenz, gibt einen Text zurück, macht:
    Gib a verkettet mit " foo!" zurück
Und kann so benutzt werden:
    "foo <a>"
    
Die Funktion foo mit dem Parameter a vom Typ Text, gibt einen Text zurück, macht:
    Gib foo a zurück.
Und kann so benutzt werden:
    "foo <a>"

Dieses Vorgehen sorgt dafür, dass sehr große Texte, die an foo übergeben werden nicht unnötig kopiert werden. Das ist möglich, da foo seinen Parameter nicht verändert.

Für den Duden fände ich dieses Vorgehen akzeptabel, da er Code vom Endnutzer nicht verändert wird.
Allerdings ist es sehr nervig zu Schreiben und viel wichtiger:
Man sollte DDP der lesbarkeit wegen schreiben, nicht wegen der Performance. Im best-case ist also der lesbarste code gleichzeitig der performanteste. Das ist natürlich nicht immer zu erreichen, aber sollte ein Ziel sein.

Vorschlag

Copy-on-Write wäre eine gute Art die Performance zu erhöhen ohne sich im Code groß damit beschäftigen zu müssen. Das beste: Es wäre ein reines Implementation-detail. Kein DDP Code müsste verändert werden, aber der gesamte existierende Code würde davon profitieren.

In DDP hieße das, dass jeder komplexe Typ (außer Zahl, Kommazahl, Wahrheitswert und Buchstabe) zu einem "CoW"-Typ wird und erst on-write kopiert wird.

@bafto bafto added Typ: Konzept Nur ein Konzept für eine Idee Typ: Leistung Verbesserung der Ausführ- oder Kompiliergeschwindigkeit labels Nov 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Typ: Konzept Nur ein Konzept für eine Idee Typ: Leistung Verbesserung der Ausführ- oder Kompiliergeschwindigkeit
Projects
None yet
Development

No branches or pull requests

1 participant