Eigene Programmiersprache
-
Hab ich schon gemacht. Ist noch nicht fertig, aber kann schon einiges. Ist aber sehr viel Code, wenn du willst Maile ich ihn dir.
-
guck dir das mal an:
http://createyourproglang.com/darauf basierend wurde z.b. coffee-script entwickelt.
-
@Ethon: Zeig doch mal her dein Gekritzel. Ich habe auch schon lange die Vision einer eigenen Programmiersprache, vielleicht haben wir da ähnliche Ideen und könnten das gemeinsam umsetzen?
Oder hat die Sprache etwa einen Zweck?
-
@Ethon und Pi
Überlegt euch dann mal einen guten Namen.
Piethon hört sich gut an
-
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
-
DirkB schrieb:
Piethon hört sich gut an
Da würde ich dann aber hübsch eingerückte bunte Klötzchen erwarten.
-
Danke mal für die Antworten.
@ysxdcfvgbhnj : Keine Blöde Idee, hab eh dieses Sommer-Semester Compilerbau.
@TyRoXx : Das Tutorial ist super, werde mal damit was versuchen!
@Jonas OSDever : FDanke, aber ich mache lieber selbst was als mich in fremden Code einzuarbeiten.
@lolhehe: Sieht für mich etwas unseriös aus ... und nur 77 Seiten? Aber trotzdem danke
@pumuckl: Okay, danke. Welches Framework würde sich anbieten? Als C++ler wohl Boost.Spirit oder?@PI:
Also ...
Ein bischen viel also mach ichs kurz:
1. Soll nativ kompilieren, dachte an C oder C++ als Compiler Output.
2. Ich will viel Wert auf Meta-Information legen, dh. dass man überall direkt mit dem Compiler kommunizieren kann.
3. Da es ein Spaß-Projekt ist, soll die Syntax möglichst von allen anderen Sprachen abweichen (ohne sinnlos ala Brainfuck zu werden), aber imer noch gut benutzbar sein.Hier mal ein Sample-Programm, das Primzahlen in einem Thread berechnet, das Ergebnis absteigend sortiert und ausgibt:
["Thread:Enable"] sub getPrimes UInt32:start, UInt32:max => Vector[=> UInt32] if start < 3 3 => start for range start, max => number for range 2, number => divide if mod number, divide == 0 push result, number ["Thread:Disable"] sub entry Vector[=> String]:argv => Int32 getPrimes["Thread" => thread] 5, 980 => primes join thread primes sorted["Descending"] => primes for range 0, size primes => i put Console.Stdout, primes @ i, "\n"
Hoffe dass man das einigermaßen verstehen kann, sonst spricht das wohl nicht für die Syntax.
Die Meta-Informationen setzt und liest man über die eckigen Klammern (Arrayzugriff stattdessen über den @ Operator). Die Syntax für Variablenzuweisungen ist "VALUE => NAME". ES wird möglichst immer versucht den Typ der Zuweisung zu raten, ansonsten muss dieser explizit aufgerufen werden ("8 => a" setzt a auf Int32, "Int16 8 => b" setzt b auf Int16)Und so weiter. Bevor ich den restlichen wirren Käse auf jemanden loslasse muss erstmal was funktionieren.
-
-
Ethon schrieb:
@pumuckl: Okay, danke. Welches Framework würde sich anbieten? Als C++ler wohl Boost.Spirit oder?
Mit Spirit hättest du dann gleich die große Panzerhaubitze für deinen Spatzen am Start (falls es denn ein Spatz ist)
Die Einarbeitungszeit für Spirit ist nicht zu unterschätzen, vielleicht tuts auch fürs Erste sowas wie Bison.
-
pumuckl schrieb:
Ethon schrieb:
@pumuckl: Okay, danke. Welches Framework würde sich anbieten? Als C++ler wohl Boost.Spirit oder?
Mit Spirit hättest du dann gleich die große Panzerhaubitze für deinen Spatzen am Start (falls es denn ein Spatz ist)
Die Einarbeitungszeit für Spirit ist nicht zu unterschätzen, vielleicht tuts auch fürs Erste sowas wie Bison.Kann ich ja kaum glauben. Ich kenne Spirit allerdings auch nicht besonders gut. Spirit ist ja kein Parsergenerator, also vermutlich eher weniger mächtig als Bison. Dafür ist es C++, also für jemanden mit ausreichenden C++-Kenntnissen direkt zu benutzen und zu verstehen, während man für Bison eine eigene Notation lernen und die Theorie des LR-Parsers zumindest grundlegend verstehen muss.
BTW scheint mir die Sprache nicht gerade ein Spatz zu sein.
-
Es gibt einen Artikel im Forum, wo du die auch einige Anregungen holen kanns
-
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
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.