Die Programmiersprache XièXiè

LukasBanana
Erstie
Erstie
Beiträge: 19
Registriert: 25. Okt 2010 11:04

Die Programmiersprache XièXiè

Beitrag von LukasBanana » 10. Jan 2014 22:18

Hallo zusammen,

hier im Forum werden zwar überlicher Weise nur Fragen oder Bemerkungen zu den Übungen und Klausuren der Compiler 1 Vorlesung gepostet,
aber da wir hier ja lernen sollen, wie Compiler funktionieren, designet und entwickelt werden, dachte ich mir, ich kann hier auch mal mein aktuelles Projekt zu dem Thema vorstellen :-D

Da es mich schon lange in den Fingern gejuckt hat, meine eigene Programmiersprache zu entwickeln, habe ich Anfang Dezember 2013 eben genau damit angefangen:
The XièXiè Programming Language (Homepage)
Der Compiler ist bis jetzt etwas 17.000 Zeilen groß, es fängt also gerade an interessant zu werden ^^.

Meine Grundidee dazu ist folgende: Die Sprache soll ein Kompromiss aus Leistung (wie der von C++) und Einfachheit (wie der von C# und Java) sein.
Damit ich nicht Jahre lang am Code Generator und Optimierer arbeiten muss, handelt es sich außerdem um einen Trans-Compiler, d.h. die Ausgabe des Compilers ist C++ Code.

Hier mal ein kleines Beispiel dazu, was genau an XièXiè einfacher sein soll als mit C++:

Code: Alles auswählen

// XieXie flags enumeration
flags ColorFlags {
    Red
    Green
    Blue
}
... und das wird übersetzt zu ...

Code: Alles auswählen

//! ColorFlags flags enumeration.
struct ColorFlags
{
    // --- Auto-generated flags --- //
    typedef unsigned char DataType;
    static const DataType None  = 0;
    static const DataType All   = ~0;
    // --- Custom flags --- //
    static const DataType Red   = (1 << 0);
    static const DataType Green = (1 << 1);
    static const DataType Blue  = (1 << 2);
};
Und noch ein kleines Beispiel zum Thema Memory:

Code: Alles auswählen

// XieXie template class
class LinkedList<type T> {
    T data
    LinkedList@ next
}

LinkedList@ myList := new LinkedList
... das wird zu ...

Code: Alles auswählen

#include <memory>

template <typename T> LinkedList
{
    public:
        LinkedList() :
            data(0),
            next(nullptr)
        {
        }
        virtual ~LinkedList()
        {
        }
        T data;
        std::shared_ptr< LinkedList > next;
};

std::shared_ptr< LinkedList > myList = std::make_shared< LinkedList >();
Trotz der Tatsache, dass es ein Trans-Compiler wird, arbeite ich gerade an der Kontext-Analyse. Ich will ja nicht, dass mein Compiler C++ Code generiert, der sich dann nicht kompilieren lässt.

Auch wenn ich noch nicht Compiler 2 gehört habe, soll die Sprache Objekt orientiert sein.
Da ich ja nach C++ übersetze, muss ich auch noch nicht so viel über Code-Generierung von OO-Code wissen :-)

Wen's also interessiert, hier noch der Link zum Git-Repository auf Bitbucket.org: (frei verfügbar unter der GPL)
https://bitbucket.org/LukasBanana/xiexie

Und nebenbei: als ich am Expression-Parsing gearbeitet habe, habe ich auch schnell noch einen kleinen grafischen Taschenrechner (mit wxWidgets)
programmiert, in den man Arithmetische Ausdrücke eingeben kann, wie mit unseren Casio Taschenrechnern.
Der Windows Taschenrechner hängt mir in dieser Beziehung nämlich schon lange zum Hals raus ^^.

Und hier gibt's den XièXiè-Calculator ;-)
(Momentan müsst ihr zusätzlich noch die Visual Studio 2012 Redistributables installieren)

(Und wer sich noch für die Namensherkunft der Sprache interessiert, das wird in der F.A.Q. erklärt.)

Gruß und bis nächste Woche in der Compiler Vorlesung.
Lukas

Benutzeravatar
mmi1991
Computerversteher
Computerversteher
Beiträge: 349
Registriert: 20. Okt 2011 18:46
Wohnort: Hattersheim

Re: Die Programmiersprache XièXiè

Beitrag von mmi1991 » 10. Jan 2014 22:26

Hi ;)

Hört sich ja schon mal gut an.
LukasBanana hat geschrieben:Auch wenn ich noch nicht Compiler 2 gehört habe, soll die Sprache Objekt orientiert sein.
Da ich ja nach C++ übersetze, muss ich auch noch nicht so viel über Code-Generierung von OO-Code wissen :-)
Aus eigener Erfahrung kann ich sagen, dass das in Comp2 auch nur eine Nebenrolle einnimmt. Die Übersetzung von OO-Code wird lediglich in den ersten 2-3 Vorlesungen behandelt; der Rest ist Optimierung. Ist aber auch nicht schlimm, denn im Prinzip ist alles wichtige dabei.

Hab gerade nochmal nachgeschaut, 95/110 Slides des 1. Blocks in Comp2 gingen über OO. Die restlichen sieben Blöcke nicht.
Ophasentutor SoSe 2014, WiSe 2015/16
Alle Angaben wie immer ohne Gewähr

Antworten

Zurück zu „Archiv“