#1 18. Oktober 2012 Zuletzt bearbeitet: 19. August 2013 Hallo Leute, ich entwerfe in meiner Freizeit eine eigene Programmiersprache unter dem Projektnamen "PHS". Bevor ihr euch an den Kopf packt: Ich habe nicht vor eine eigene VM oder gar eine Maschinennahe Sprache zu erstellen! Ich dachte eher an einen Dialekt, der sich nach PHP übersetzen lässt. Mit dem Unterschied, dass die Sprache AOT ("Ahead Of Time" -> bevor der Code ausgeführt wird) übersetzt wird. Man kann das ganze natürlich auch zur Laufzeit übersetzten lassen und entsprechend Speichern. Das hat den Vorteil, dass der Code gründlich untersucht werden kann um ein optimales Ergebnis zu produzieren (= der PHP Code). Folgende Dinge habe ich auf meiner TODO-Liste: Kompatibel zu vorhandenem PHP-Code Eigenes Template-Format Lexical Scope für Variablen First-Class Funktionen Macros Prototyping Div. Syntax Zucker Kompatibel zu vorhandenem PHP-Code Ein Ziel ist es, komplett kompatibel mit vorhandenem PHP-Code zu bleiben ohne eine zusätzliche Runtime zu implementieren. D.h.: Ein Script erstellt mit dieser Sprache soll ohne Einschränkungen vollen Zugriff auf Klassen, Variablen, Konstanten und auch Funktionen* haben. * Siehe auch "Probleme mit vorhandenen Funktionen" Eigenes Template-Format Verworfen Lexical Scope für Variablen Variablen und Funktionen werden an den aktuellen Geltungsbereich statt an den Kontext gebunden - bzw. es wird während der Übersetzung überprüft was sinnvoller ist (z.b. bei Referenzen innerhalb von verschachtelten Funktionen). First-Class Funktionen Funktionen sind Variablen und können entsprechend angesprochen (z.b. als Parameter) und zur Laufzeit auch wieder gelöscht werden. Siehe dazu weiter unten "Probleme mit vorhandenen Funktionen". Macros Verworfen Prototyping Klassen können im Quelltext (natürlich nur während der Übersetzung) an mehreren Stellen einfach erweitert werden. Funktionen können jederzeit überschrieben werden. Div. Syntax Zucker "$" fliegt raus "\" wird zu "::" ":" statt "extends", "~" statt "implements" "public:" "protected:" "private:" wie z.b. in C++ "use other::Klass;" fungiert zusätzlich als import/autoloader + Operator für Zeichenketten** [0..10] als substr/array_slice*** Reguläre Audrücke als Sprachfeature /foo/ "this" wird Optional "parent::xyz()" in eine Methode mit dem selben Namen wird zu "super()" getter/setter schlagt was vor! ** Bestimmte Operatoren zu überladen ist in PHP schwer umzusetzen ohne Performance-Einbußen während der Laufzeit. *** Siehe das Problem unter "**" - Es ist aber möglich diesen Operator auf einen bestimmten Typ zu begrenzen (also entweder Array oder Zeichenkette) Es wäre aber auch möglich das ganze für alle Typen zu realisieren, man braucht dazu nur einen umfangreichen Spurensucher (Trace). Die Sprache wird statisch typisiert! Probleme mit vorhandenen Funktionen Da alle von PHP definierten Funktionen eben keine First-Class Funktionen sind, muss eine Lösung her diese während der Übersetzung dennoch als eben solche zu nutzen. Ich dachte da eine "extern" Deklaration bzw. "use extern ...". D.h. vordefinierte Funktionen wären zu jeder Zeit vorhanden, benötigen aber vorher eine Deklaration (ähnlich wie in C/C++ .c/.h) damit der Compiler Bescheid weiß. Vorhandene Variablen, Konstanten, Funktionen, Klassen, Interfaces und Traits müssen mit `extern` bekannt gemacht werden. Dazu wird es eine umfangreiche stdlib geben. Wer das ganze verfolgen will oder vielleicht sogar Lust hat später ein wenig zu helfen: Repo TBA 2 Person(en) gefällt das. + Multi-Zitat Zitieren
#2 5. November 2012 AW: Eigene Programmiersprache - Konzept Hey, habe mir dein Konzept mal in Ruhe angeschaut. Sieht auf jedenfall sehr Interessant aus und auch durchaus sehr durchdacht! Allerdings weiß ich nicht was du dir davon versprichst? Für wen soll diese neue Sprache gut sein? Wer soll damit arbeiten? Oder geht es rein um den Spaß daran soetwas zu konzipieren? Und welche genauen Vorteile versprichst du dir davon? Grüße Blackb!rd + Multi-Zitat Zitieren
#3 5. November 2012 AW: Eigene Programmiersprache - Konzept Hab gar nicht mitbekommen, dass du das noch aktiv verfolgst. Vom Konzept her gefällt mir das so weit sehr gut. Sollte mir irgendwas zu dem "Funktionen-Problem" einfallen melde ich mich. An sich ein interessantes Problem ?( Man sollte den Lerneffekt bei solchen Aufgaben nicht unterschätzen. Allein der ist es mMn wert. + Multi-Zitat Zitieren
#4 19. August 2013 Zuletzt von einem Moderator bearbeitet: 15. April 2017 AW: Eigene Programmiersprache - Konzept Kleines Update: Die Grammatik ist soweit implementiert und ich habe einen funktionsfähigen Parser dafür. Ich arbeite nun an einem Analyzer/Verifier und Compiler (Transcompiler). Wenn jemand Interesse und vielleicht ein wenig Ahnung von Compilerbau hat wäre es super wenn ihr euch meldet. Jabber: murdoc@jabber.ccc.de Oder direkt im Channel #rr-coding@conference.jabber.ccc.de Wer Hilfe bezüglich Jabber braucht: Jabber Chatroom/Konferenz betreten/config mit Miranda / Trillian / QIP - RR:Board Hier meine YACC-Grammatik (Ohne Context, daher sieht TypeName ein bisschen komisch aus): http://putc.me/etc/phs/grammar.y Nicht wundern, die Datei wandert vorm übersetzen durch eine precompiler. + Multi-Zitat Zitieren