Interpreter
-
Vor einiger Zeit hab ich dieses Program geschrieben:
http://www.geocities.com/voodoocpp/inter.zip
Es ist ein Interpreter für einen C-artigen Syntax. Es ging mir in erster Linie darum zu sehen ob ich in der Lage bin sowas zu schreiben, deshalb sind die Buildinfunktionen extrem dürftig (waren ja auch nicht das Ziel).
Das Program hat ein paar interessante Features wie zum Beispiel Exceptions oder auch ein Debugger.
Das Program steht unter GPL. Windows binär Dateien sind enthalten. Für das Kompiliren auf anderen Platformen sind nur ein Standard kompatibler Kompiler und eine Boost Installation notwendig.
Ich weis nicht wirklich was ich damit jetzt machen soll, also wenn jemand eine Idee hat nur her damit.
Kommentare (egal ob gut oder schlecht) über das Program und/oder den Source code sind herzlich willkommen.
Hier ist ein kleines Code Beispiel
main() { run := true; while(run) { print "I think of a number between 0 and 100. Can you guess it?\n"; num := rand(100); tries := 0; guess := zombie; //zombie can be used to represent an inexsitant value while(guess != num) { guess := read_num(); if(guess < num) print "Too small\n"; else if(guess > num) print "Too big\n"; tries := tries + 1; } print "Correct it was ",num,". You needed to guess ",tries," times."; print "Do you want to play again?\n"; answer := read_line(); while(answer != "yes" and answer != "no") { print "Enter either \"yes\" or \"no\".\n"; answer := read_line(); } if(answer = "no") run := false; } }
-
Hallo!
Laut deiner Readme ist der Interpreter recht schnell.
Was hälst du davon das ganze so zu modifizieren, so dass man deine Programmiersprache einfach als Plugin zu seinem Programm hinzufügen kann?
Das faende ich sehr praktisch
-
Ein gescheites Typensystem einbauen
Es gibts nichts schlimmeres als typenlose Sprachen(meine Ansicht!)
Nur so als Idee
-
Ah es gibt doch noch jemand der sich mein Program anschaut
.
Laut deiner Readme ist der Interpreter recht schnell.
Ich hab es nicht genau gemessen, allerdings sollte es vom Algoritmus her schon schnell sein und beim Testen war es immer schneller als ich mit dem Auge zwinkern kann. Der Code wird beim Starten interpretiert und dann in eine Baum Struktur geladen und docht dann laufen gelassen. Man könnte noch ein bischen Geschwindigkeit heraus kitzeln indem man Konstante Ausdrücke beim Start auswertet oder dadurch, dass man Funktionsaufrufe beim Start durch Pointer auf den Code ersetzt oder ganz einfach inlined. Dadurch muss man den Funktionsnamen nicht jedesmal nachschlagen. Sonst wüsste ich aber nicht wo man noch viel optimiren könnte (ohne Sprachfeatures einzubüssen).
Was hälst du davon das ganze so zu modifizieren, so dass man deine Programmiersprache einfach als Plugin zu seinem Programm hinzufügen kann?
Werd mal schauen. Ich hab eigentlich nicht wirklich Lust noch viel am Code rumzubauen.
EDIT: Ich seh gerade, dass da ja noch wer geantwortet hat
Ein gescheites Typensystem einbauen
Es gibts nichts schlimmeres als typenlose Sprachen(meine Ansicht!)
Nur so als IdeeDas Problem mit so einem Typesystem ist, dass man dann wieder Deklarationen und Definitionen von Variablen braucht und das wollte ich gerade vermeiden.
Ein Moment lang wollte ich sowas machen :
foo(a){} bar(string a){} func(foo a){} func(int a){} func(bla a){} main() { foo(3); foo("Hello"); //bar(4); Error bar("Hello"); func(6); //func("Hello") Error a := new foo; func(a); //func(foo) a := new bar from foo; func(a); //upcast a := new bla from foo; func(a); //func(bla) }
Wenn ein Typ angegeben wird, dann muss der übergebene Wert von diesem Typ sein. Man kann anschließend per Funktionsüberladung zwei verschiedene Funktionen mit gleichem Namen haben.
Per new könnte man sich dann seinen eigenen Typ machen und auch ableiten. Wenn nun keine geeigenente Funkiton gibt wird versucht upzucasten.
So ein bisschen wie Template Spezialisirung in C++, nur eben nicht at compile time sondern at runtime.
Der Grund wieso ich es nicht implementier habe war, dass es die Sprach gleich um ein vielfaches komplexer gemacht hätte und bei meheren Parameter wird es sehr zwiedeutig:
foo(a,int b){} foo(int a,b){} main(){ foo(1,2)//was denn nun? }
Ein Typesystem wie in C++ kommt nicht in Frage.
-
Es gibts nichts schlimmeres als typenlose Sprachen
also ich finde den typenlosen ansatz für eine skriptsprache sehr gut. die sprache wirkt durchdacht und hübsch ist die syntax auch. ich finds gut
was man damit machen kann? vielleicht ausbauen zu einer mini-visual-basic-anfänger-programmier-umgebung. den ms-vb ist ja mittlerweile ziemlich fett und kompliziert geworden. irgendwas, womit jeder mal eben in 5 minuten eine nette windows-anwendung schreiben kann