Template Parameter ist ein Template



  • Ach otze, gerade wo du schon hier bist :). Warst du nicht der jenige der ein GUI-Toolkit am entwickeln war, wenn ja wie siehts damit aus ?



  • otze schrieb:

    was hast du dir da denn bei der sprache vorgestellt? kann man sich vielleicht ein beispiel anschauen, wie das aussehen soll? 🙂

    Oh herrjemine. Ich tyrannisiere schon eine andere Community damit. 😉

    Die Sprache hat den Codenamen "Caliph" und soll halt im wesentlichen eine Abstraktion für generische Programmierung *ohne* Laufzeit-Overhead bieten. Dementsprechend also ähnlich wie C++. Der große Unterschied zu C++ ist, neben der fundamental anderen Syntax, die Erweiterbarkeit der Klassen sowie die Namensbindung. Beispielsweise würde der Aufruf 'Length(x)' eine statische Methode 'Length' für das Objekt 'x' aufrufen statt einer freien Funktion. 'x.Length()' wäre dementsprechend eine nicht-statische Methode.

    Momentan habe ich kein Material zu Caliph online. Ich arbeite gerade an ner FAQ, die dauert aber wohl noch ein Weilchen aufgrund von Hardware-Schwierigkeiten.

    Der Beispielcode könnte z.B. so aussehen:

    typeclass Equitable
        operator static =(a as Equitable, b as Equitable) as bool := not a != b
        operator static !=(a as Equitable, b as Equitable) as bool := not a = b
    end
    
    class String
        var private value as Array[Char]
        # ... Zeugs ...
        property public get Length as int := value.Length
    end
    
    instance String of Equitable
        operator static =(a as String, b as String) as bool
            return
                a.Length = b.Length and
                Zip(a, b, lambda(x, y) := x = y).Fold(true, lambda(x, y) := x and y)
        end
    end
    

    Drei Besonderheiten:

    - 'typeclass' spezifiziert ein Verhalten für eine Klasse. Eben ein Konzept.
    - 'instance' sorgt dafür, dass eine Klasse ein Verhalten übernimmt.
    - Zeile 13 ff. zeigen den funktionalen Aspekt der Sprache. Ginge natürlich wesentlich effizienter, zumal Arrays sowieso auch 'Equitable' wären und man den Aufruf also nur zu delegieren bräuchte. 😉 (Wobei ... ein *richtig* guter Compiler mit verzögerter Auswertung könnte das optimieren.)

    Eine kleine Besonderheit offenbart sich auch in der For-Schleife, die stets folgendermaßen aussieht (es gibt nix à la 'for i from ... to ...'):

    For x in y
    

    x ist hierbei ein Iterator und y ein Bereich -- das kann ein Container sein, oder eben auch ein on-the-fly generierter Zahlenbereich. Anders als in .NET oder Java wird hier aber nicht diese 'hasnext'-Methode verwendet sondern es werden die aus C++ bekannten Iteratoren implementiert. Die Sprache verfügt auch über Zeiger, allerdings handelt es sich hierbei nur um eine spezielle Implementierung des RandomAccess-Iterators.

    Leider klaut das C++-Standardkommittee schamlos meine Ideen und mit jeder weiteren Veröffentlichung zu C++0x schrumpf der Vorsprung von Caliph. 😞 Beispielsweise waren Concepts nicht genug, nein, sie mussten gleich Concept maps einführen -- und somit prinzipiell existierende Klassen erweiterbar machen. Schon war ein großer Trumpf von Caliph dahin.



  • KasF schrieb:

    Ach otze, gerade wo du schon hier bist :). Warst du nicht der jenige der ein GUI-Toolkit am entwickeln war, wenn ja wie siehts damit aus ?

    Nein, das war ich (wenn du GOTT meinst). Ist zur Zeit nicht aktiv.

    @Konrad Rudolph: Zum Thema "Equitable": Frag Leo - vielleicht wäre eine andere Bezeichnung besser. 😉 - Ich habe "equality_comparable" genommen, aber so toll ist das natürlich auch nicht.



  • Mr. N schrieb:

    @Konrad Rudolph: Zum Thema "Equitable": Frag Leo - vielleicht wäre eine andere Bezeichnung besser. 😉

    Offensichtlich. 🙂

    'EqualityComparable' ist mir aber ehrlich gesagt für ein solch ubiquitäres Konzept zu lang (auch bei 'RandomAccessIterator' bekomme ich jedes Mal ne Krise aber da ist mir auch noch nix kürzeres eingefallen). Eventuell mache ich's wie in Haskell und verwende 'Eq', 'Ord' etc. -- Abkürzungen finde ich eigentlich aber auch nicht so besonders toll.


Anmelden zum Antworten