You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.)
The text was updated successfully, but these errors were encountered:
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
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.)
The text was updated successfully, but these errors were encountered: