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

Generics #116

Open
bafto opened this issue Feb 5, 2025 · 0 comments
Open

Generics #116

bafto opened this issue Feb 5, 2025 · 0 comments
Assignees
Labels
Thema: Grammatik Die Lesbarkeit von DDP kann verbessert werden
Milestone

Comments

@bafto
Copy link
Member

bafto commented Feb 5, 2025

High-Level

Parametrische Polymorphie (Generics) sind ein wichtiges Feature um allgemein verwendbare Algorithmen (z.B. Sortierung) und Datenstrukturen (z.B. HashTabellen) einfach für beliebige Typen zur Verfügung zu stellen.

In DDP sollen Generics ähnlich zu C++ Templates implementiert werden, das heißt eine Generische Funktion/Datenstruktur wird mit Platzhalter Typen deklariert aber noch nicht geparset und erst wenn sie mit konkreten Typen aufgerufen wird instanziiert.

Syntax

Die generische Funktion foo mit den Parametern a, b und c vom Typ Zahl, T und R, gibt ein R zurück, macht:
    Das R x ist foo. [foo muss ein R zurückgeben, sonst parse-Fehler]
    [ Der Typparameter T muss mit einer Zahl vergleichbar sein (nativ oder via Operator Überladung), sonst parse-Fehler ]
    Wenn a größer als b ist, dann:
        Gib c zurück.
    Gib bar(a, b, c) zurück. [bar muss die korrekten Parameter Typen nehmen und ein R zurückgeben, sonst parse-Fehler]
Und kann so benutzt werden:
    "foo <a> <b> <c>"

foo 1 2 3. [Instanziierung mit T=Zahl und R=Zahl]
foo 1 "" 3. [Fehler, weil a größer als b nicht möglich ist für Text > Zahl]

[Benötigt eventuell Issue #115]
Wir nennen die generische Kombination aus
	dem T x,
	dem T y,
einen Vektor2, und erstellen sie so:
	"Nullvektor2" oder
	"ein Vektor2 mit x gleich <x> und y gleich <y>"

[Typ Benennung mit Bindestrich]
Der Zahl-Vektor2 v ist ein Vektor2 mit x gleich 5 und y gleich 5.
Der Kommazahl-Vektor2 v ist ein Vektor2 mit x gleich 5,5 und y gleich 5,5.

Wir nennen die generische Kombination aus
	der K Liste schlüssel,
	der V Liste wert,
eine Tabelle, und erstellen sie so:
	"einen neue Tabelle"

[Bei mehreren Typparametern müssen sie in der Reihenfolge wie sie auftauchen angegeben werden]
Die Text-Zahl-Tabelle t ist eine neue Tabelle.

[Für verschachtelte Typparameter Klammern, das ist hässlich, deshalb Typ-Aliase nutzen]
Die Text-(Zahl-Vektor2)-Tabelle t2 ist eine neue Tabelle.

[Besser]
Wir nennen eine Text-(Zahl-Vektor2)-Tabelle auch eine TextVektorTabelle.
Die TextVektorTabelle t3 ist eine neue Tabelle

Verhalten

Generische Funktionen können beim deklarieren nicht geparset werden, da die Typ-abhängigen Aliase nicht korrekt gewählt werden können.
Deshalb werden sie erst geparst sobald sie das erste Mal mit einer neuen Typparameter Kombination aufgerufen werden.

Problem dabei: welche Aliase und Typen etc. sollen beim Parsen verwendet werden?
Wahrscheinlich alles zum Zeitpunkt der Deklaration + alles zum Zeitpunkt der Instanziierung.
-> Mehr Details/Entscheidung sobald erste Implementierung versucht wurde.

Generische Funktionen können nicht extern sein und auch nicht aus C-Code aufgerufen werden, da sie durch die verschiedenen Typparameter auf jeden Fall name-mangling benötigen. Das sollte kein Problem sein.

Zu Guter Letzt sollten wir nach der Implementierung noch weitere Issues erstellen um Generics überall im Duden Einzubauen wo sie nützlich sind (Duden/Sortierung, Duden/Hashtabelle, etc.)

@bafto bafto added the Thema: Grammatik Die Lesbarkeit von DDP kann verbessert werden label Feb 5, 2025
@bafto bafto added this to the prio milestone Feb 5, 2025
@bafto bafto self-assigned this Feb 5, 2025
@bafto bafto mentioned this issue Feb 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Thema: Grammatik Die Lesbarkeit von DDP kann verbessert werden
Projects
None yet
Development

No branches or pull requests

1 participant