Eigene Programmiersprache, wie soll ich anfangen?



  • Lass dich nicht von mir entmutigen 😉 So war das nicht gemeint. Ich habe auch schon mal eine kleine Scriptsprache geschrieben und habe auch sonst alles mögliche an unrealistischen Projekten angefangen. Ich finde das auch sehr wichtig, um sich weiterzuentwickeln.
    Nur wenn du meinst, mit dem ganzen tatsächlich Erfolg zu haben (also wirklich eine Sprache, die mächtig, plattformunabhängig und performant ist und auch noch von einer nennenswerten Anzahl Entwickler benutzt wird), dann halte ich das für sehr unwahrscheinlich.

    Ich habs nicht gelesen, weil ich schon seit über 15 Jahren programmiere und wahrscheinlich hundert völlig unterschiedliche Programmiersprachen gesehen habe. Es gibt viele Ansätze und Ideen, die aus Java und Python wahrscheinlich nicht kennst, deswegen glaube ich nicht, dass du hier etwas grundlegend neues oder innovatives präsentierst.



  • Mechanics schrieb:

    Ich habe auch schon mal eine kleine Scriptsprache geschrieben und habe auch sonst alles mögliche an unrealistischen Projekten angefangen. Ich finde das auch sehr wichtig, um sich weiterzuentwickeln.

    So unrealistisch ist das ganze doch eigentlich gar nicht 😃
    Es soll eine ernstzunehmende Sprache werden, die man auch wirklich einsetzen kann.

    Mechanics schrieb:

    Nur wenn du meinst, mit dem ganzen tatsächlich Erfolg zu haben

    In ungefähr 30 Jahren schon so :).
    Bezüglich deiner Scriptsprache, wie hast du diese dann in Maschinensprache übersetzt, tatsächlich über Assembler?

    Mechanics schrieb:

    Es gibt viele Ansätze und Ideen, die aus Java und Python wahrscheinlich nicht kennst, deswegen glaube ich nicht, dass du hier etwas grundlegend neues oder innovatives präsentierst.

    Welche Ansätze ich nicht kenne kann ich schwer sagen 😋
    Aber der Hauptansatz mit den sogenannten Einleitern, liegt definitiv nicht in den Sprachlichen Möglichkeiten von Java und Python, sonst müsstest du die Sprache umschreiben -> neue Sprache ^^



  • CeveFlight schrieb:

    Bezüglich deiner Scriptsprache, wie hast du diese dann in Maschinensprache übersetzt, tatsächlich über Assembler?

    Das war eine Scriptsprache, die wurde interpretiert 😉
    Bzw. in der Arbeit haben wir sogar auch eine eigene Scriptsprache, an der ich auch was mache. Die ist auch so gesehen sehr erfolgreich, weil bei uns viele Module und kundenspezifische Anpassungen in dieser Scriptsprache geschrieben werden, ich glaub, das sind so 400 000 Zeilen Code, allein was bei uns im Hauptbranch eingecheckt ist. Dann gibts tatsächlich auch genügend externe, die damit Scripte für unser System schreiben. Das ganze funktioniert aber natürlich nur, weil wir das erzwingen. Wenn jemand unser System benutzt und Scripte schreiben will, nimmt er halt die Sprache. Die Sprache würde natürlich kein Mensch benutzen, wenn wir sie veröffentlichen würden.

    Technisch ist es auch nicht so wahnsinnig kompliziert. Ich hab für meine Scriptsprache vielleicht 2-3 Wochen gebraucht. In Maschinencode würde ich das auch gar nicht selber übersetzen. Du könntest LLVM als Backend benutzen. Und natürlich würde ich auch keine eigene IDE dafür schreiben. Du kannst Module für Visual Studio oder Eclipse schreiben. So viel Aufwand sollte es nicht sein. Sowas wie Syntax Highlighting und Code Completion kriegst fast umsonst.
    Ich halte es eben für unrealistisch, dass sich jemand für die Sprache interessieren wird. Es GIBT viele interessante Sprachen. Und die hatten es auch nicht leicht, auch wenn große Firmen dahinterstehen und tatsächlich große Projekte damit realisiert wurden, z.B. Erlang. Und damit tatsächlich jemand deine Sprache oder deine Vorschläge ernst nimmt, musst du schon paar Sprachen mehr als nur Java oder Python und C++ können.

    Deine zwei Beispiele gefallen mir so auf den ersten Blick auch nicht. Zu viel Boilerplate, zu kompliziert, zu viele komische Zeichen, irgendwas abkürzen würde ich schon mal gar nicht. Code liest man öfter als dass man ihn schreibt. Da will ich sofort sehen, was passiert und nicht raten müssen, was die einzelnen Buchstaben gleich wieder bedeutet haben. "l b p e", alles klar. Das ist auch nicht fehleranfällig und nichts was man in der Form abfangen sollte. Dafür gibts IDEs.
    Das mit den Events sagt erstmal auch gar nichts. Sowas gibts in vielen Sprachen, und es gibt auch viele Sprachen, die das weitertreiben, z.B. in Form von Message Passing. Schau dir z.B. das bereits erwähnte Erlang an.



  • kann es sein das du größenwahnsinnig bist?



  • cece schrieb:

    kann es sein das du größenwahnsinnig bist?

    Ja, schon so ein bisschen.



  • das wird doch nix



  • Ich denke, es ist etwas zu früh, deine Idee in dieser Form zu präsentieren. Schreb deine Sprache erstmal selber. Das ist nicht so schwer. Kriegs erstmal überhaupt zum Laufen. Spiel damit rum, schau dir an, obs dir gefällt. Dann könntest du das Projekt vielleicht präsentieren und sagen, du hast schon eine fertige Programmiersprache und willst sie verbessern, indem du z.B. Maschinencode erzeugst, anstatt die Sprache zu interpretieren.



  • Das Bedürfnis nach event-driven Programming ist grundsätzlich denke ich schon vorhanden, nur switcht keiner die Programmiersprache nur wegen dem (es ist ärgerlich, aber machbar).

    Vergleichbar hat Qt C++ mit hat signal/slots erweitert.

    Wenn ich dich wäre und möchte, dass sich die Sprache durchsetzt, dann mach, dass jedes gültige C++-Programm auch gültiges Ceve ist (und damit auch alle C++-Spielebibliotheken funktionieren). Mit Ceve hätte man aber besseres Event-Handling.

    Es gibt Leute, die sagen, dass der Erfolg von C++ einzig daher kommt, dass es eine Erweiterung von C ist (war).

    Für event-driven Programming gibt es schon Programmiersprachen, und der Grund, weshalb sie sich nicht durchgesetzt haben, ist, dass sie zwar einen Mehrwert gegenüber C++ (u.ä.) bieten, aber halt auch viele Nachteile.



  • @CeveFlight

    Du verwendest den falschen Ansatz.

    Bevor du eine Idee zu einer Sprache äußerst, definiere sie erst einmal sauber und schreibe einen Compiler dazu.

    Wenn du dann die erste Beta 0.9 Version des Sprachstandards zusammen mit passendem Compiler hast, dann komme hier nochmal her und stelle deine Sprache vor.

    Denn sonst wird das nichts, außer dass du dich in sinnlosen Diskussionen verirrst, wo du dich rechtfertigen musst, Zeit verlierst und deine Idee ständig madig gemacht wird und dann aufgrund dessen doch nicht voran kommst.

    Es gibt auch viele Sprachen die einfach viel zu früh bekannt geworden sind und dann keine zweite Chance bekommen haben.

    Außerdem kennst du für meinen Geschmack zu wenig sprachen um mit genug Hintergrundwissen selbst eine zu entwerfen.
    Schonmal was von Prolog gehört?

    Und wenn du das bisher nur als Hobby gemacht hast, dann frage ich mich, ob du dafür auch einen akademischen Hintergrund hast. Da lernt man nämlich so Sachen wie Compilerbau & Co.



  • Proma Coder schrieb:

    @CeveFlight

    Du verwendest den falschen Ansatz.

    Bevor du eine Idee zu einer Sprache äußerst, definiere sie erst einmal sauber und schreibe einen Compiler dazu.

    Wenn du dann die erste Beta 0.9 Version des Sprachstandards zusammen mit passendem Compiler hast, dann komme hier nochmal her und stelle deine Sprache vor.

    Denn sonst wird das nichts, außer dass du dich in sinnlosen Diskussionen verirrst, wo du dich rechtfertigen musst, Zeit verlierst und deine Idee ständig madig gemacht wird und dann aufgrund dessen doch nicht voran kommst.

    Es gibt auch viele Sprachen die einfach viel zu früh bekannt geworden sind und dann keine zweite Chance bekommen haben.

    Außerdem kennst du für meinen Geschmack zu wenig sprachen um mit genug Hintergrundwissen selbst eine zu entwerfen.
    Schonmal was von Prolog gehört?

    Und wenn du das bisher nur als Hobby gemacht hast, dann frage ich mich, ob du dafür auch einen akademischen Hintergrund hast. Da lernt man nämlich so Sachen wie Compilerbau & Co.

    Du hast Recht, ich Glaube Ich schließe den Thread wieder.
    Zu meinem Akademischen Hintergrund ^^. 9te Klasse, einziger Schüler im Wahlfach Informatik :O.

    Also bis in ein zwei Wochen, wenn die Sprache bei V 0.9 ist, dann Meld ich mich mich mit "Fertige Sprache - Suche Benutzer" bis dahin 😃

    [/closed]



  • CeveFlight schrieb:

    Moin Leute!

    Ich hab so die Idee einer eigenen Programmiersprache, die dann ungefähr so aus sehen soll

    Beispiel eines Programms das Hello World ausgibt:

    import library       > system.celc
    declare reference    > sys
    reference tolibrary  > system => sys
    import eventspace    > sys.system
    import functionspace > sys.system
    declare listener     > main #on_events << system/programm_started ; system/programm_restarted
    
    listener start              > main
    listener body push function > system->print #set_parameters << "Hello World" => text_to_print
    listener body push event    > system->programm_stopped
    listener end                > main
    

    Das ganze Farblich und Kommentiert in HTML: https://www.dropbox.com/sh/gkvfpeeh0qzarn6/BtI69cUtKd/Deutsch/Beispiel_Programme/Konsolen_Hello_World/example.html

    Wie sollte ich anfangen, erstmals ein Programm schreiben das alles in C++ übersetzt und dann weiter, gibt es da schon vorgefertigtes?

    P.s: Wenn jemand mitmachen will kann er sich gerne hier im Forum melden

    Und der ganze riesige Codehaufen bedeutet nicht mehr als

    print "Hello World"
    


  • volkard schrieb:

    CeveFlight schrieb:

    Moin Leute!

    Ich hab so die Idee einer eigenen Programmiersprache, die dann ungefähr so aus sehen soll

    Beispiel eines Programms das Hello World ausgibt:

    import library       > system.celc
    declare reference    > sys
    reference tolibrary  > system => sys
    import eventspace    > sys.system
    import functionspace > sys.system
    declare listener     > main #on_events << system/programm_started ; system/programm_restarted
    
    listener start              > main
    listener body push function > system->print #set_parameters << "Hello World" => text_to_print
    listener body push event    > system->programm_stopped
    listener end                > main
    

    Das ganze Farblich und Kommentiert in HTML: https://www.dropbox.com/sh/gkvfpeeh0qzarn6/BtI69cUtKd/Deutsch/Beispiel_Programme/Konsolen_Hello_World/example.html

    Wie sollte ich anfangen, erstmals ein Programm schreiben das alles in C++ übersetzt und dann weiter, gibt es da schon vorgefertigtes?

    P.s: Wenn jemand mitmachen will kann er sich gerne hier im Forum melden

    Und der ganze riesige Codehaufen bedeutet nicht mehr als

    print "Hello World"
    

    @volkard schon ein bisschen mehr, sonst wäre es ja traurig.
    Meine Ideen sind eher an C++ angelehnt, das du mehr machen kannst aber musst.

    import library       > system.celc // Hier wird die Bibliothekdatei system.celc in das Suchsystem importiert
    declare reference    > sys // Hier wird eine Referenz namens sys deklariert
    reference tolibrary  > system => sys // Hier wird festgelegt das die Bibliothek system mit der Referenz sys aufgerufen wird.
    import eventspace    > sys.system // Hier werden alle Events von system importiert
    import functionspace > sys.system //Hier werden alle Funktionen von system importiert
    declare listener     > main #on_events << system/programm_started ; system/programm_restarted //Hier wird ein Listener mit dem Namen main deklariert, der bei den Events programm_started und programm_restarted aufgerufen wird.
    
    listener start              > main // Hier wird die definition des vorher deklarierten Listeners main eingeleitet
    listener body push function > system->print #set_parameters << "Hello World" => text_to_print //Hier wird die Funktion print mit "Hello World" für text_to_print aufgerufen
    listener body push event    > system->programm_stopped //Hier wird Das Event programm_stopped ausgestoßen
    listener end                > main // Hier wird der Definitionsblock für den Listener main beendet.
    

    Aber wie @schlimmplement schon schrieb:

    schlimmplement schrieb:

    Wenn ich du wäre und wollen würde, dass sich meine Sprache durchsetzt, dann würde ich machen, dass jedes gültige C++-Programm auch gültiger Code in dieser Sprache ist (und damit auch alle C++-Spielebibliotheken funktionieren)
    [...]
    Es gibt Leute, die sagen, dass der Erfolg von C++ einzig daher kommt, dass es eine Erweiterung von C ist (war).

    Das heist, so wie es jetzt aussieht wird es nicht aussehen, da ich ja nicht das Hirn von den wenigen C/C++/Java Programmieren verdreschen will, die dann in dieser Sprache schreiben, also doch ein wenig ähnlicher.
    Du klingst als bist du interessiert.
    Wie wärs, wir beide machen die Sprache so das sie a) nicht zu lang ist b) gut zu lesen ist und c) unendlich Möglichkeiten hat.



  • Da ich gerade selbst fuer meine eigene Sprache einen Compiler schreibe, geb ich auch mal meinen Senf zu dem Thema ab.

    • Verwende verschiedene Symbole fuer verschiedene Dinge. Designe deine Sprache kontextfrei.
      In deinem Beispiel verwendest du '>', du wirst aber auch moeglicherweise einen groesser-Operator brauchen.
    • Verwende nicht zu viele Keywords, und vor allem keine langen Keywords. Programmierer sind faul. ("listener body push function" sieht fuer mich einfach viel zu lang aus, wuerde ich nicht ausschreiben wollen)
    • Fange mit einem sehr kleinen Subset deiner Sprache an und fuege nach und nach Features hinzu. Du brauchst fuer den Anfang keine Klassen, Templates, Operator-Ueberladung oder Exceptions. Diese Features ueberfordern nur, vor allem, wenn du noch kaum Erfahrung mit Compilerbau hast.
    • Stelle deinen Compiler als Library zur Verfuegung und baue ihn entsprechend modular auf. Wenn du moechtest, dass jemand deine Sprache verwendet, dann brauchst du dafuer Tools, und diese Tools muessen auch irgendwo herkommen. Das faengt an mit einer IDE mit Syntax-Highlighting und geht dann weiter ueber Refactoring bis zu Analysetools.

    Compilerbau ist keine schwarze Magie, man darf nur nicht den Fehler begehen und ein zweites C++ designen.

    Ich empfehle dir ausserdem, mit einer kleinen Voruebung anzufangen, um ein Gefuehl fuer die Materie zu bekommen: Schreib einen Taschenrechner.
    (Ja, das ist mein voller Ernst.)

    • Stell eine EBNF-Grammatik auf fuer die Ausdruecke, die unterstuetzt werden sollen
    • Scanner/Lexer, um Ausdruck in Token zu zerlegen, Leerzeichen/Kommentare zu ueberspringen
    • Parser, um einen AST zu erzeugen
    • Semantische Analyse, je nachdem was du implementierst
    • JIT-Kompilierung mit LLVM

    Nachdem die Grundrechenarten funktionieren, kannst du Funktionsaufrufe einbauen, ein Typsystem, Funktionsueberladung, Casts, usw.

    Ich habe sowas einmal als IRC-Bot realisiert: https://github.com/Paprikachu/CrapScriptBot/
    (Den Tokenizer habe ich nie fertigestellt, stattdessen verarbeitet der Parser direkt Zeichen und anstatt JIT-Kompilierung wird der AST direkt ausgefuehrt.)

    Wenn dir danach Compilerbau immer noch Spass macht, viel Glueck 😉



  • Kellerautomat schrieb:

    Da ich gerade selbst fuer meine eigene Sprache einen Compiler schreibe, geb ich auch mal meinen Senf zu dem Thema ab.

    • Verwende verschiedene Symbole fuer verschiedene Dinge. Designe deine Sprache kontextfrei.
      In deinem Beispiel verwendest du '>', du wirst aber auch moeglicherweise einen groesser-Operator brauchen.
    • Verwende nicht zu viele Keywords, und vor allem keine langen Keywords. Programmierer sind faul. ("listener body push function" sieht fuer mich einfach viel zu lang aus, wuerde ich nicht ausschreiben wollen)
    • Fange mit einem sehr kleinen Subset deiner Sprache an und fuege nach und nach Features hinzu. Du brauchst fuer den Anfang keine Klassen, Templates, Operator-Ueberladung oder Exceptions. Diese Features ueberfordern nur, vor allem, wenn du noch kaum Erfahrung mit Compilerbau hast.
    • Stelle deinen Compiler als Library zur Verfuegung und baue ihn entsprechend modular auf. Wenn du moechtest, dass jemand deine Sprache verwendet, dann brauchst du dafuer Tools, und diese Tools muessen auch irgendwo herkommen. Das faengt an mit einer IDE mit Syntax-Highlighting und geht dann weiter ueber Refactoring bis zu Analysetools.

    Compilerbau ist keine schwarze Magie, man darf nur nicht den Fehler begehen und ein zweites C++ designen.

    Ich empfehle dir ausserdem, mit einer kleinen Voruebung anzufangen, um ein Gefuehl fuer die Materie zu bekommen: Schreib einen Taschenrechner.
    (Ja, das ist mein voller Ernst.)

    • Stell eine EBNF-Grammatik auf fuer die Ausdruecke, die unterstuetzt werden sollen
    • Scanner/Lexer, um Ausdruck in Token zu zerlegen, Leerzeichen/Kommentare zu ueberspringen
    • Parser, um einen AST zu erzeugen
    • Semantische Analyse, je nachdem was du implementierst
    • JIT-Kompilierung mit LLVM

    Nachdem die Grundrechenarten funktionieren, kannst du Funktionsaufrufe einbauen, ein Typsystem, Funktionsueberladung, Casts, usw.

    Ich habe sowas einmal als IRC-Bot realisiert: https://github.com/Paprikachu/CrapScriptBot/
    (Den Tokenizer habe ich nie fertigestellt, stattdessen verarbeitet der Parser direkt Zeichen und anstatt JIT-Kompilierung wird der AST direkt ausgefuehrt.)

    Wenn dir danach Compilerbau immer noch Spass macht, viel Glueck 😉

    Danke für deine hilfreichen Tipps, ich hatte wirklich vor die komplette Sprache mit Interpreter in C++ zu entwerfen.
    Du hast Recht, ich sollte erst-mal einen Intepreter zum laufen bringen der die Grundrechenarten in der neuen Sprache beherrscht und dann in kleinen Schritten den Interpreter um verschiedene Features erweitern.
    Was meintest du mit "nicht den Fehler begehen und ein zweites C++ designen.", an sich will ich meine Sprache ja so Funktional wie möglich gestalten.



  • CeveFlight schrieb:

    Was meintest du mit "nicht den Fehler begehen und ein zweites C++ designen.", an sich will ich meine Sprache ja so Funktional wie möglich gestalten.

    Ich nehme an, er meint:
    - C++ ist hammerkompliziert, aber 99.99% der Anwendungen brauchen gar nicht das alles. Zum großen Teil Altlasten aus C.
    - C++ ist so verflixt harmonisch und ausgewogen (für mich zum Beispiel), kannst da nicht drüber kommen. Hast die Manpower niemals, so schlaue Sachen Dir auch so tiefgrünfig und mit so viel Praxiserfahrung zu überlegen wie das C++-Standardisierungskommitee.
    - Kein Ar... wird Deine Sprache nehmen, wenn sie nur ein C++-Abklatsch ist, ist dann einfacher beim Oringinal zu bleiben.



  • volkard schrieb:

    - Kein Ar... wird Deine Sprache nehmen, wenn sie nur ein C++-Abklatsch ist, ist dann einfacher beim Oringinal zu bleiben.

    Man sieht es an Java: billiger Abklatsch mit weglassen vieler Features und hinzufügen einiger Features + Hype = Erfolg.



  • Volkard meint sicher sowas wie D. Java ist von wenigen Oberflächlichkeiten abgesehen nicht großartig an C++ orientiert.



  • Was soll denn die ganze Negativität (bis hin zu Beleidigungen) hier?

    Wenn er eine Sprache entwickeln und implementieren will, lasst ihn doch. Mit Sicherheit wird er dabei einiges lernen und Spaß haben. Ist das nicht Grund genug?

    CeveFlight, Compilerbau ist ein sehr gut erforschter Teil der Informatik. Davon solltest du unbedingt Gebrauch machen, sonst kommt am Ende sowas wie PHP bei raus.

    Mach dir Gedanken wie deine Sprache aussehen soll. Achte darauf, dass die Sprachfeatures gut miteinander harmonieren. Irgendwann beginnst du dann mal das ganze zu implementieren.

    Benutze Yacc oder einen anderen Parsergenerator! Yacc mag heutzutage vielleicht nicht mehr "in" oder sonstwas sein, aber es basiert auf guter Theorie und du kommst schnell voran. Yacc kannst du aber nicht direkt mit deinem Quellcode füttern. Zuvor kommt noch die lexikalische Analyse, die deinen Quellcode in "Tokens" zerlegt, die vom Parser verstanden werden.

    Auch für das gibt es Hilfsmittel, allerdings kann man Lexing auch prima selbst machen. Wenn du da angekommen bist und an etwas anderes als einen Zustandsautomaten denkst, solltest du doch lieber Lex o.ä. verwenden.

    Lese die einschlägige Literatur! Es gibt auch viele Onlinekurse zur theoretischen Informatik allgemein und zum Compilerbau speziell. Hiermit meine ich Kurse von anständigen Hochschulen, keine Youtube-Tutorials!



  • Danke miesertroll für deinen netten Kommentar 😉
    Bezüglich

    Es gibt auch viele Onlinekurse zur theoretischen Informatik allgemein und zum Compilerbau speziell. Hiermit meine ich Kurse von anständigen Hochschulen, keine Youtube-Tutorials!

    könntest du mir einen Link schicken?



  • Hallo,

    gerade vorgestern hatte ich in Expression Operatoren einen Link im Internet gefunden:
    Lecture 4: Implementing Lexers and Parsers

    Auch generell sind die weiteren Kapitel unter Lectures interessant.

    Und bei der Uni Potsdam gibt es ausführliche Foliensätze als PDF: Einführung in den Compilerbau


Anmelden zum Antworten