Eigene Programmiersprache



  • pumuckl schrieb:

    Wenn deine Sprache etwas komplexer ist, wird ein Parserframework dir auf jeden Fall viel Arbeit abnehmen. Wenn dich die Materie rund um den Compilerbau interessiert, wirst du ums dragon book kaum herumkommen - ist aber auch keine Schande, der Klotz ist gut angelegtes Geld 😉

    Compilers | ISBN: 9780321486813

    Sorry, aber diese Buch ist imho Müll. Didaktisch mieserabel aufgebaut, übermäßig kompliziert und letztendlich findet man darin auch kaum mehr relevante Informationen als in Büchern, die nur halb so dick sind. Mag ja sein, dass das Buch in den 80ern ganz toll war, von dem Ruhm zehrt es wohl heute noch.
    Wenn man tiefer in der Materie steckt, ist es vielleicht sinnvoll das Ding als Standardwerk zur Hand zu haben, aber zum Einstieg einfach vollkommen unbrauchbar.



  • maximAL schrieb:

    Didaktisch mieserabel aufgebaut,

    Fand ich jetzt nicht so. Gemessen an der Komplexität des Themas finde ich es didaktisch recht gut gelöst.

    übermäßig kompliziert

    imo kein bisschen.

    Wenn man tiefer in der Materie steckt, ist es vielleicht sinnvoll das Ding als Standardwerk zur Hand zu haben, aber zum Einstieg einfach vollkommen unbrauchbar.

    Wenn man nur an der Oberfläche kratzen will ist es sicher zu umfangreich und umfassend. Hätte ich vielleicht dazu schreiben sollen. Hab ich aber irgendwie auch gemeint mit "wenn dich die Materie interessiert". Vielleicht gehts nur mir so, aber wenn ich mehr als einen oberflächlichen Einstieg haben möchte, hole ich mir gleich die handfeste Literatur, anstatt mich für die ersten Tage mit einem leichteren Einsteigerbuch für die Bushaltestellenlektüre abzugeben.



  • sinnvoller wäre ja, erstmal ein neues Programmierparadigma zu definieren.

    Und dann eine Syntax erfinden, die das neue Paradigma in möglichst eleganter Form realisiert. Ungefähr so entstehen Brillanten wie Lisp, Smalltalk, ML, Prolog, APL, Forth, Self und Algol.

    Wir brauchen eher neue Paradigmata (hä?), denn von immer neuen Sprachen mit alten Paradigmata gibt es genug (hunderte, wenn nicht tausende)



  • Ich versuch es mit modgrammar für Python. Echt super und richtig einfach damit etwas auf die Beine zu stellen. 😉



  • Hm, also da sind schon gewaltige unterschiede zwischen unseren Vorstellungen.

    Meine Sprache baut auf einem Modulsystem auf. Ein Modul ist eine Codedatei und besteht (optional) aus Namespaces, die wiederum Funktionen und Variablen enthalten. (Klassen heb ich mir für später auf.)

    Was die genaue Syntax angeht, habe ich mir noch keine Gedanken gemacht. Ich weiß nur, dass man den Typ von Variablen nirgens explizit hinschreibt.

    Beispiel:

    let x = 42;
    let y = "blah";
    let z = 'c';
    

    usw.

    Funktionen sind entweder normale Funktionen, oder aber überladene Operatoren:

    let f(x) = x < 42 ? 666 : x;
    let operator pow 5 (a, b) = b ? a * (a pow (b-1)) : 1; # binärer operator, priorität 5
    let operator ! 123 (a) = a ? false : true; # unärer operator
    

    Konstrukte wie if, for, while, do-while, etc. gibt es nicht.



  • 314159265358979 schrieb:

    Was die genaue Syntax angeht, habe ich mir noch keine Gedanken gemacht. Ich weiß nur, dass man den Typ von Variablen nirgens explizit hinschreibt.

    Dein Ansatz erinnert mich stark an F#.



  • 314159265358979 schrieb:

    Hm, also da sind schon gewaltige unterschiede zwischen unseren Vorstellungen.

    Meine Sprache baut auf einem Modulsystem auf. Ein Modul ist eine Codedatei und besteht (optional) aus Namespaces, die wiederum Funktionen und Variablen enthalten. (Klassen heb ich mir für später auf.)

    Was die genaue Syntax angeht, habe ich mir noch keine Gedanken gemacht. Ich weiß nur, dass man den Typ von Variablen nirgens explizit hinschreibt.

    Beispiel:

    let x = 42;
    let y = "blah";
    let z = 'c';
    

    usw.

    Funktionen sind entweder normale Funktionen, oder aber überladene Operatoren:

    let f(x) = x < 42 ? 666 : x;
    let operator pow 5 (a, b) = b ? a * (a pow (b-1)) : 1; # binärer operator, priorität 5
    let operator ! 123 (a) = a ? false : true; # unärer operator
    

    Konstrukte wie if, for, while, do-while, etc. gibt es nicht.

    Quasi einfach eine weitere 0815 funktionale Sprache, die niemand braucht.



  • FSharp schrieb:

    Dein Ansatz erinnert mich stark an F#.

    F# kenne ich nicht mal 😉

    Realerr schrieb:

    Quasi einfach eine weitere 0815 funktionale Sprache, die niemand braucht.

    Es interessiert mich herzlich wenig, ob das jemals jemand braucht.



  • 314159265358979 schrieb:

    (Klassen heb ich mir für später auf.)

    Ah da freu ich mich dann schon auf das explizite self wie bei Python und weglassen liefert natürlich keinen Syntaxfehler, Warnung oder so, sondern geht erst beim Aufrufen in die Hose 😡

    Klassen nachzufrickeln ging schon bei Python schief, bitte nicht nachmachen, sondern aus deren Fehler lernen.



  • 314159265358979 schrieb:

    Realerr schrieb:

    Quasi einfach eine weitere 0815 funktionale Sprache, die niemand braucht.

    Es interessiert mich herzlich wenig, ob das jemals jemand braucht.

    Wenn die Sprache niemand braucht, also auch du nicht, was ist dann deren Existenzgrundlage?

    Und warum müsst ihr beiden auch so kranke Syntaxen ausdenken? Wie wäre es mit etwas lesbarem?



  • Wenn die Sprache niemand braucht, also auch du nicht, was ist dann deren Existenzgrundlage?

    Lernen und Spaß an der Entwicklung?

    Und warum müsst ihr beiden auch so kranke Syntaxen ausdenken? Wie wäre es mit etwas lesbarem?

    So "krank" finde ich weder meine Syntax noch die von Pi. Zumindestens wenn man nicht gerade Basic als Messlatte nimmt ...



  • Tippgeber schrieb:

    Ah da freu ich mich dann schon auf das explizite self wie bei Python und weglassen liefert natürlich keinen Syntaxfehler, Warnung oder so, sondern geht erst beim Aufrufen in die Hose 😡

    Klassen nachzufrickeln ging schon bei Python schief, bitte nicht nachmachen, sondern aus deren Fehler lernen.

    Sorry, aber Python kann ich nicht. Was ist da so schlimm?



  • Danke er meint dass du immer ein self (ist wie this in C++) vor einen Zugriff schreiben musst, auch wenn die Variable/Funktion standardmäßig in der Klasse definiert ist. Angesichts der Tatsache dass du in Python aber auch lustig zur Runtime neue Variablen/Funktionen in eine Klasse stopfen kannst, finde ich das garnicht mal so tragisch.



  • Wurden Klassen in Python wirklich nachträglich reingefrickelt? In welcher Python-Version gabs denn noch keine Klassen?



  • Bashar schrieb:

    Wurden Klassen in Python wirklich nachträglich reingefrickelt? In welcher Python-Version gabs denn noch keine Klassen?

    http://python-history.blogspot.com/2009/02/adding-support-for-user-defined-classes.html



  • ein Objektmodell draufklatschen und ein bisschen was funktionales, map reduction und lambda etwa, ist heute ein Muß :xmas2:

    Warum programmiert ihr nicht was Schönes Neues in Erlang oder Prolog oder helft sonstwie einer existierenden Sprache in die Zukunft, die es verdient hat ?



  • Ethon schrieb:

    Danke er meint dass du immer ein self (ist wie this in C++) vor einen Zugriff schreiben musst, auch wenn die Variable/Funktion standardmäßig in der Klasse definiert ist. Angesichts der Tatsache dass du in Python aber auch lustig zur Runtime neue Variablen/Funktionen in eine Klasse stopfen kannst, finde ich das garnicht mal so tragisch.

    Nein, damit kann man schon noch leben. Ich meine das:

    class Foobar:
      def eineMethode(self, arg1, arg2):
         print arg1, arg2
    
    f = Foobar()
    f.eineMethode(1, 2)
    

    Könnt ja mal das self weglassen und dann ausführen, dann erhält man

    >>> f.eineMethode(1,2)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: eineMethode() takes exactly 2 arguments (3 given)
    

    Dabei könnte der Interpreter ja wenigstens per Kommandozeilenparameter beim Parsen der Methoden-Definition warnen wenn die nicht mit self anfängt. Statt dessen geht es erst beim Aufruf schief und wer sonst normale Sprachen gewohnt ist vergisst das schonmal 😉

    Finde Python aber immernoch besser als Java von daher will ich nicht meckern bzw. erkenne an, dass man in beiden schnell etwas umsetzen kann (in Python natürlich schneller). Aber eine schöne Sprache wie Ruby reizt mich einfach mehr, damit arbeite ich dann auch wirklich gerne.



  • Tippgeber schrieb:

    Dabei könnte der Interpreter ja wenigstens per Kommandozeilenparameter beim Parsen der Methoden-Definition warnen wenn die nicht mit self anfängt. Statt dessen geht es erst beim Aufruf schief und wer sonst normale Sprachen gewohnt ist vergisst das schonmal 😉

    Der Bezeichner self ist eine reine Konvention, das geht also nicht so einfach.

    BTW F# hat etwas ähnliches. Es muss auch explizit ein self -Parameter (der auch nicht so heißen muss) angegeben werden, der aber syntaktisch an seiner natürlichen Stelle steht, so dass man ihn (eigentlich?) nicht vergessen kann. Etwa so:

    member self.eineMethode y = self.z * y
    

    (Disclaimer: Bin noch beim Lernen und syntaktisch nicht so sattelfest.)



  • Bashar schrieb:

    Tippgeber schrieb:

    Dabei könnte der Interpreter ja wenigstens per Kommandozeilenparameter beim Parsen der Methoden-Definition warnen wenn die nicht mit self anfängt. Statt dessen geht es erst beim Aufruf schief und wer sonst normale Sprachen gewohnt ist vergisst das schonmal 😉

    Der Bezeichner self ist eine reine Konvention, das geht also nicht so einfach.

    Dass ist mir bewusst, aber es ändert nichts an der Möglichkeit Warnungen dafür zu unterstützen. Ob man den Namen nun direkt mit self vergleicht ist mit einem Namen der als Kommandoargument angegeben wurde spielt dafür ja keine rolle. Ansonsten stellt sich noch die frage wie viele Leute hier etwas anderes verwenden



  • Tippgeber schrieb:

    Dass ist mir bewusst, aber es ändert nichts an der Möglichkeit Warnungen dafür zu unterstützen. Ob man den Namen nun direkt mit self vergleicht ist mit einem Namen der als Kommandoargument angegeben wurde spielt dafür ja keine rolle. Ansonsten stellt sich noch die frage wie viele Leute hier etwas anderes verwenden

    Was ist ein Kommandoargument?
    Aber wie willst du wissen ob folgender code OK ist oder das self vergessen wurde:

    def f(a,b,c):
       return a.foo + b.foo + c.foo
    

    ist a jetzt korrekt self oder nicht?


Anmelden zum Antworten