# Programmiersprache entwickeln



## sFee (25. Aug 2016)

Hallo Liebe Leute,

ich möchte gerne eine eigene Programmiersprache für die JVM entwickeln.
Ich habe zum Thema Compilerbau viel gefunden aber nur eine eine Abschlussarbeit
die sich konkret mit der compilierung zur JVM beschäftigt und zwar diese hier:
http://teajay.org/TeaJay.pdf

Mein Problem ist ich verstehe diese Arbeit nicht.
Mir ist völlig unklar was man tun muss!

Kann mir jemand helfen ?


----------



## Thallius (25. Aug 2016)

Hä? Du willst eine Programmiersprache entwickeln die von einer JVM benutzt wird? Wie soll das denn gehen? Da kannst du maximal einen eigenen Crosscompiler in Java schreiben oder sowas.


----------



## sFee (25. Aug 2016)

Ich will eine Programmiersprache für die JVM entwickeln, ähnlich wie oben. Was ich nicht verstehe wie man Bytecode erzeugt, dass verstehe ich nicht !


----------



## Nuiton (25. Aug 2016)

Das ist kein Projekt, dass man mal so aus Spass macht. Eine Programmiersprache hat sehr viele Komponenten. Zu diesen Komponenten gehoeren z.B. die "Grammatik" (grammar) und ein Parser. Wie gesagt, einen Compiler baut man nicht mal so spontan am Wochenende - das waere schon viel eher eine Diplomarbeit (musste ich jedoch in einer meiner Kurse in der Uni schreiben). 

Um einen Compiler zu schreiben ist es viel wichtiger dass du verstehst, was Automatentheorie ist, und wie man es in der Praxis anwendet.


----------



## Tobse (25. Aug 2016)

In der Theorie ist es simpel:

1. Arbeite dich in den Java-Bytecode ein; du musst dich gut damit auskennen
2. Designe deine Sprache und achte bei jedem Element darauf, dass man es auf der JVM ausführen kann.
2.1. Wenn du Kompatibilität mit Java und anderen JVM-Sprachen willst bleibt dir jediglich, eine andere Syntax für Java zu schreiben. Alles darüber hinaus versaut die Kompatibilität.
3. Schreibe einen Kompiler der deine Sprache parsed und JVM Bytecode ausspuckt.

Die Praxis ist höllisch kompliziert und ich kann nur davon abraten. Es braucht eine Menge Experten um so ein Projekt sauber umzusetzen. Ich prophezie dir: du wirst nach vielen verschwendeten Stunden frustriert aufgeben.

EDIT:


> Was ich nicht verstehe wie man Bytecode erzeugt, dass verstehe ich nicht !


Offensichtlich mangelt es dir an Basics. Wie oben schon geschrieben: wenn du das wirklich! angehen willst, fange damit an, Bytecode zu verstehen. Das Internet bietet genug Infos und es gibt eine Reihe an Java-Libraries dafür.


----------



## sFee (25. Aug 2016)

Ich kann nicht glauben, dass dies so schwierig ist. An der Sprache in dem Artikel haben nur 2 Leute gearbeitet. Dann kann es doch nicht sein, dass man im Jahr 2016 noch viele Experten benötigt, um eine vernünftige Sprache zu entwerfen und diese auf der JVM zu laufen zu kriegen.


----------



## Meniskusschaden (25. Aug 2016)

Tobse hat gesagt.:


> Offensichtlich mangelt es dir an Basics.


Bytecode zu erzeugen gehört für dich zu den Basics? Alle Achtung! 

Theoretisch kann man dem Problem ja ausweichen, indem man den Compiler keinen Bytecode erzeugen lässt, sondern Java-Quellcode. Vielleicht ist dieses Buch ein guter Einstieg dafür. Der Autor scheint es so gemacht zu haben.


----------



## Thallius (25. Aug 2016)

Ninja, diese zwei Leute dürften so ca. 1000x mehr Wissen und Können haben als du. Macht alles in allem 2000x Wissen und Können...... Alles ist einfach wenn man es weis und kann aber du weist und kannst nichts. Fängst also bei 0 an..... Dementsprechend würde ich sagen brauchst du ca. 5 Jahr um ein erstes Ergebnis zu bekommen.....


----------



## sFee (25. Aug 2016)

Woher willst du eigentlich wissen, was ich kann oder nicht. Ich wollte nur wissen wie man zu Bytecode compiliert. Denn die Autoren haben, einfach geschrieben sie haben einen Bytecode Generator auf Basis der JVM Spezifikation geschrieben. Das verstehe ich nicht...! Aus dem Sourcecode werde ich nicht schlau.


----------



## Thallius (25. Aug 2016)

Ja das sagtest du bereits im ersten Post. Und das bedeutet was Compilerbau betrifft weist du nichts.....


----------



## Xyz1 (25. Aug 2016)

Guten Tag,
das kommt erst spät im Studium dran, wenn man das möchte, du sagst selber, dass du noch am Anfang bist. Java wird compiliert, interpretiert, usw. Man würd mit einem 'Hello, World'-Beispiel anfangen, das ist von Compilerbau ziemlich weit entfernt. Sagen wir, dein 'Kenntnisstand' wäre ein Vorort oder eine Kleinstadt, dann ist der Compiler in der Mitte der Galaxie. :/ Also es liegen einige Lichtjahre dazwischen.

Soll aber nicht heißen, das alles unmöglich erscheint. Vielleicht schätzen wir dich auch falsch ein. Weiß ich nicht.
Nimms mit Humor.


----------



## sFee (25. Aug 2016)

Thallius hat gesagt.:


> Ja das sagtest du bereits im ersten Post. Und das bedeutet was Compilerbau betrifft weist du nichts.....


Also du kennst dich mit Generierung von Bytecode aus? Könntest mir das erklären?
@DerWissende 
Ich verstehe nicht warum es so kompliziert sein soll. Wo liegt denn der Unterschied zu einem anderen Programm wie z.B. einem ERP System?


----------



## Dompteur (25. Aug 2016)

sFee hat gesagt.:


> Denn die Autoren haben, einfach geschrieben sie haben einen Bytecode Generator auf Basis der JVM Spezifikation geschrieben. Das verstehe ich nicht...!


Nun der Bytecode ist vergleichbar mit einer Assemblersprache. Damit man nun nicht jede zu übersetzende Struktur direkt in diesen Assembler übersetzen muss, haben die Autoren eine Abstraktionsschicht darüber gelegt. Soweit ich nach einem kurzen Blick in das Dokument sagen kann, übernimmt diese Schicht auch solche Sachen wie Sprungadressen-Berechnung und ähnliches Kleinzeug.
Die Autoren schreiben, dass sie diesen Bytecode Generator selbst geschrieben haben, weil es zur damaligen Zeit keinen gab, der Java 7 unterstützt hat. Eine eigene Lösung hat aber den Nachteil, dass die Doku und vor allem Tutorials zu kurz kommen.
Eine Alternative wäre beispielsweise ASM (http://asm.ow2.org/). Da dieses eine größere Anwenderbasis hat, wirst du hier eher auch Einführungsliteratur finden.
Es wird dir aber nicht erspart bleiben, dich mit dem Assembler der JVM zu beschäftigen. Siehe dazu: https://docs.oracle.com/javase/specs/jvms/se7/html/


----------



## Xyz1 (25. Aug 2016)

Naja du hast ein Stück Text. Was jetzt alles damit zu tun ist, das macht der Compiler (in Java) alles und ist sehr kompliziert. Nun glaub mir das doch einfach mal.


----------



## Flown (25. Aug 2016)

Also ich habe an der Uni Compilerbau 1 und 2 belegt und auch eine "abgespeckte" Version von Java, im Rahmen des Kurses, geschrieben. Daher kann ich dir nur raten: Les dich mal in Compilergeneratoren ein wie z.B. einen von meiner Uni: Coco/R. Dann brauchst du noch wissen über Bytecodegenerierung und diese Themen sind so groß, dass man damit Bücher füllt und nicht einfach hier in einem kleinen Post erläutert.


----------



## BRoll (26. Aug 2016)

Wenns dir nur um die "eigene" Java Sprache geht, und du kein Bytecode direkt selber machen willst,
dann schau dir einfach mal Xtext an. https://eclipse.org/Xtext/
Damit kannst du eigene DSL schreiben, die mit Java interagieren oder in jede beliebige andere Sprache compiliert werden können (theoretisch kannst du auch einen Bytecode compiler dafür schreiben). Zumindest hat man so eine IDE+Parser geschenkt und muss sich nur um Grammatik + Compiler kümmern.


----------



## InfectedBytes (26. Aug 2016)

Da du scheinbar (noch) nicht wirklich Ahnung von Compiler Entwicklung hast, würde ich dir eher empfehlen einen kleinen Interpreter zu schreiben. Mit Hilfe von Coco/R kann man dies sehr gut tun.


----------



## lam_tr (26. Aug 2016)

Hi wenn du eine Sprache für die JVM schreiben willst, sage ich wie BRoll auch nur Xtext angucken. Dieses Frankework ist so mächtig. Die definierst die Grammatik in EBNF Style und generierst daraus deine IDE.

Ist wirklich eine coole Sache.


----------



## sFee (26. Aug 2016)

Hallo Liebe Leute,
also, wenn ich das richtig verstanden habe muss man um eine eigene Programmiersprache für die JVM zu schreiben einen Parser entwickeln und Bytecode verstehen. Und das soll so schwierig sein? Ich denke ein Parser für eine Sprache wie Java lässt sich innerhalb von zwei Wochen schreiben. 
Beim Bytecode, wenn ich mir den link von Dompteur anschaue, weiß ich nicht was das soll. Warum sollte ich die ganze Spezifikation der JVM verstehen. 
Das Buch welches Meniskusschaden empfohlen hat, stellt irgendwie 5 Sprachen vor die allesamt einfach mal so entwickelt worden sind. Und wenn ich mir den oben genannten Artikel anschaue von den zwei Typen, sieht es für mich so aus, als hätten sie auch nicht so viel Zeit für die Entwicklung benötigt, wie ihr mir erklären wollt.


----------



## InfectedBytes (26. Aug 2016)

Java wird seit 20 Jahren von einem Team aus zig Leuten entwickelt, von denen sich jeder einzelne mit der Compiler Entwicklung auskennt. Wieso glaubst du, dass du es alleine in zwei Wochen hinbekommen könntest, obwohl du bisher noch keinerlei Ahnung davon hast?

Bei dem Buch das gleiche, das sind Leute die sich tiefgreifend mit der Materie auskennen und daher auch "schnell" zu Ergebnissen kommen und trotzdem haben die das ganze nicht mal eben in zwei Wochen gemacht, dazu kommt noch, dass die keine vollwertige Sprache auf dem Niveau von Java entwickelt haben, sondern einfach nur eine kleine Sprache, welche zur Anschauung dienen.

Es will dich hier niemand davon abhalten deine eigene Sprache zu entwickeln, aber es ist eben nicht so einfach wie du glaubst. Kannst dir ja mal Groovy anschauen, das ist auch eine Sprache welche zu Java Bytecode kompiliert und netterweise ist sie auch open source.

Hier will niemand gemein sein oder so, aber allein das du selbst sagst, das du die Arbeit TeaJay nicht verstehst, zeigt halt schon das du leider noch längst nicht bereit bist so ein Projekt aufzunehmen.


----------



## thecain (26. Aug 2016)

Wenn es so einfach ist, wie du denkst, dann mach es doch.

So wie du hier fragst fehlt dir noch einiges an Wissen. Überzeuge uns vom Gegenteil.


----------



## InfectedBytes (26. Aug 2016)

Und mal so ne andere Frage, wie gut kannst du überhaupt Java (oder irgendeine andere Programmiersprache)?


----------



## Dompteur (26. Aug 2016)

sFee hat gesagt.:


> Beim Bytecode, wenn ich mir den link von Dompteur anschaue, weiß ich nicht was das soll. Warum sollte ich die ganze Spezifikation der JVM verstehen.


Eine Anweisung in Java wird in eine Folge von Anweisungen in JVN Bytecode umgewandelt. Du schreibst also eine Menge kleinerer JVN Bytecode Routinen/Snippets. Diese musst du testen und debuggen können. Damit das einigermaßen zügig vor sich geht, musst du den Befehlssatz des JVN Bytecodes praktisch auswendig können. Wenn du immer wieder nachlesen musst, ist das so, wie wenn du einen Artikel in einer Fremdsprache liest und für jedes 2. Wort das Wörterbuch zu rate ziehen musst.
Du lernst also mit dem JVN Bytecode eine eigene, neue Programmiersprache.
Natürlich kann man das alles lernen, aber das benötigt dennoch einiges an Zeit.


----------



## sFee (26. Aug 2016)

Ich Programmiere seit 1 Jahr in Java und habe bis jetzt nicht feststellen können warum eine eigen Programmiersprache entwickeln so schwierig sein soll. Wenn das ein Unterfangen von mehreren Jahren sein sollte, dann hätte es weder das dieses Buch noch TeaJay  geben können. Denn dann wäre es für ein bis zwei Typen nicht in endlicher Zeit machbar.

Ich meine nah klar. Mir fehlt einiges an Basics und ja ich habe keine Ahnung von EBNF habe mich gefragt was diese komischen Definitionen bedeuten sollen. Also ich muss zuerst meine Sprache in EBNF definieren, und dann kann ich Bytecode erzeugen. 


Dompteur hat gesagt.:


> Du lernst also mit dem JVN Bytecode eine eigene, neue Programmiersprache.
> Natürlich kann man das alles lernen, aber das benötigt dennoch einiges an Zeit.


Ich dachte das könnte man über ein Bytecode Framework regeln.


----------



## InfectedBytes (26. Aug 2016)

sFee hat gesagt.:


> Also ich muss zuerst meine Sprache in EBNF definieren, und dann kann ich Bytecode erzeugen.


Nein, da fehlen noch einige Zwischenschritte.
Ganz ganz grob macht ein Compiler folgendes:
1. Lexikalische Analyse
Hier musst du den Eingabe stream in konkrete Tokens (Schlüsselwörter, Bezeichner, Literale, Sonderzeichen) zerlegen.
2. Syntaktische Analyse
Hier muss geprüft werden ob zumindest die Syntax richtig ist. Wenn nicht sollte nach Möglichkeit zumindest versucht werden sich so schnell es geht zu recovern, damit der Rest vom Programm weiter syntaktisch geprüft werden kann
3. Semantische Analyse
Hier muss geprüft werden ob der Code semantisch richtig ist. Also z.b. ob eine Zuweisung wie a = b erlaubt ist. Hier muss beispielswiese die Vererbungshierarchie beachtet werden, implizite Typecasts etc.
4. Codegenerierung
Hier wird dann schließlich der Bytecode generiert, sodass z.B. folgendes erzeugt wird:

```
float x = a + b;// mit a int und b float
// -----
iload_1
i2f
fload_2
fadd
fstore_3
```
Das ist nur ein kleiner Ausschnitt, da noch die ganze Methoden und Klassendeklaration fehlt. Außerdem muss die JVM wissen wie groß der Stack maximal wird, wieviele lokale Variable genutzt werden etc.

Jeder einzelne dieser Schritte besteht natürlich aus zig Unterschritten, welche eben auch sehr kompliziert werden, wie z.B. das Prüfen der Korrektheit der Vererbungshierarchie.


----------



## sFee (26. Aug 2016)

Ok, liebe Leute. Lasst mich das ganze hier mal ordnen.
Im Artikel sind die folgt vorgegangen:

Sie haben eine Bytecode API entwickelt. Die bräuchte ich aber nicht wenn ich ASM verwende. Richtig?
Sie haben einen Lexer geschrieben um einen Eingabe stream in konkrete Tokens umzuwandeln. Richtig?
Sie haben einen Parser geschrieben, um EBNF zu parsen???
Sie haben viele kleinere Dinge getan aber meines Erachtens nichts weltbewegendes um mit ihrer Bytecode API zu sprechen.
Also alles im allen nichts schwieriges und doch bin ich keine Lichtjahre entfernt.


----------



## InfectedBytes (26. Aug 2016)

sFee hat gesagt.:


> Also alles im allen nichts schwieriges und doch bin ich keine Lichtjahre entfernt.


Sorry wenn es hart klingt, aber wenn man selbst noch keine Ahnung von einem Gebiet hat, kann man die Komplexität davon nunmal nicht einschätzen und dies ist bei dir leider der Fall. Ich muss @thecain da wirklich zustimmen, wenn du es so einfach findest, dann fang doch einfach damit an.

[Ironie]
Und wenn du dann in zwei Wochen damit fertig bist, kannst du ja auch schnell in einem Monat Windows 11 programmieren 
[/Ironie]


----------



## Meniskusschaden (26. Aug 2016)

Ich würde dir auch raten, einfach zu beginnen. Es kann ja für die ersten Versuche eine ganz minimale Programmiersprache sein. Der Befehlssatz des Streichholzcomputers umfasst nur fünf oder sechs Befehle, die auch ziemlich einfach sind. Versuche doch, einen Compiler zu schreiben, der Streichholzcomputerprogramme in JVM-Bytecode übersetzt. Da brauchst du für den Parser wahrscheinlich wirklich nicht viel Zeit und kannst dich relativ schnell mit einem der Tools zur Bytecodegenerierung beschäftigen oder sogar die class-Dateien selbst schreiben.



sFee hat gesagt.:


> Woher willst du eigentlich wissen, was ich kann oder nicht.


Ich kann es zwar verstehen, wenn dich das empört, aber ich glaube, die Einschätzung ist nicht ganz unbegründet. Meines Erachtens triffst du aber auch selbst einige unbegründete Annahmen. Es folgen drei Beispiele dazu:



sFee hat gesagt.:


> Und das soll so schwierig sein? Ich denke ein Parser für eine Sprache wie Java lässt sich innerhalb von zwei Wochen schreiben.


Woraus leitest du das ab? Ich kann den Aufwand auch nicht seriös abschätzen, traue es mir aber nicht zu, das in so kurzer Zeit zu schaffen.


sFee hat gesagt.:


> Das Buch welches Meniskusschaden empfohlen hat, stellt irgendwie 5 Sprachen vor die allesamt einfach mal so entwickelt worden sind.


Wieso glaubst du denn, dass die das "einfach mal so" gemacht haben? Der Autor ist immerhin Informatik-Professor und - wie ich jetzt erst bemerkt habe - der Gutachter für die Arbeit der TeaJay-Autoren. Der wird in dem Fachgebiet also schon einiges KnowHow aufgebaut haben, bevor überhaupt eine Zeile des Buchs geschrieben wurde. Es ist auch durchaus möglich, dass ein großer Teil der Implementierung bereits im Rahmen seiner Lehr- und/oder Forschungstätigkeit von mehreren Personen erstellt wurde.


sFee hat gesagt.:


> Und wenn ich mir den oben genannten Artikel anschaue von den zwei Typen, sieht es für mich so aus, als hätten sie auch nicht so viel Zeit für die Entwicklung benötigt, wie ihr mir erklären wollt.


Der "Artikel" scheint eine Master- bzw. Diplomarbeit zu sein. Dafür müßte man ja ca. sechs Monate Zeit haben, was bei zwei Personen einem Aufwand von einem Personenjahr entspricht. Vielleicht haben sie es locker angehen lassen und nur ein halbes Personenjahr investiert. Nach oberflächlicher Betrachtung habe ich aber den Eindruck, dass das nicht irgendeine Abschlussarbeit ist, sondern eine wirklich gute. Die Autoren werden nicht bei Null begonnen haben.


----------



## sFee (26. Aug 2016)

Hm. Bin ich so auf dem Holzweg?
Ich meine ich habe bis heute jede Aufgabe im Informatik Unterricht geschafft. Ohne das ich Hilfe dazu benötigt hätte. Jetzt wo ich mich mit dem Thema Eigene Programmiersprache befassen möchte, heißt es lass es! Das schaffst du nicht! Ich habe source code gefunden, der LISP in weniger als 150 Zeilen implementiert. Deshalb denke ich das T.Lisp ja nicht so schwierig sein kann. 

Zum Thema TeaJay :  Ich habe sie seit ca. 2 Wochen auch den Quellcode und mir macht es nicht den Eindruck als hätten die wirklich viel Zeit investiert. Es liest sich so als wäre alles ziemlich Einfach wenn man nur ein paar Dinge versteht... . 

Der Quellcode wirkt für mich nicht als hätten das besonders gute Programmierer gemacht.  Mein Lehrer meint, dass einige meiner Lösungen für die Aufgaben von ihm, nur von wenigen Leuten verstanden werden kann. Deren Quellcode, kann ich verstehen.

Deshalb komme ich zu dem Schluss, dass das Thema Eigene Programmiersprache nicht schwierig sein kann.


----------



## Meniskusschaden (26. Aug 2016)

sFee hat gesagt.:


> Jetzt wo ich mich mit dem Thema Eigene Programmiersprache befassen möchte, heißt es lass es! Das schaffst du nicht!


Ich - und ich glaube, auch ein paar andere - habe das nicht gesagt, sondern vorgeschlagen, einfach zu beginnen. Wenn man darauf hinweist, dass das Projekt vielleicht größer wird, als du denkst, heisst es ja nicht zwangsläufig, dass du es nicht machen sollst.
Du hast doch geschrieben, dass du nicht weißt, wie du anfangen kannst. Meines Erachtens sollte man dann mit dem Problem herum spielen, Framework-Doku ansehen, etwas Testcode schreiben und ein Gefühl dafür entwickeln. Vorher kann man ohnehin kein Konzept erarbeiten. Danach kann man vielleicht schon etwas besser einschätzen, wie umfangreich es wird und macht entweder weiter oder lässt es sein. In beiden Fällen ist man danach schlauer als vorher. Bei Hobbyprojekten kann man den Erfolgsdruck ja glücklicherweise ignorieren.


sFee hat gesagt.:


> Mein Lehrer meint, dass einige meiner Lösungen für die Aufgaben von ihm, nur von wenigen Leuten verstanden werden kann.


Hm, das hört sich für mich eher nach einer Kritik an, aber vielleicht hat er es nicht so gemeint. Ich sehe es so: Je weniger Ahnung man haben muß, um einen gegebenen Code zu verstehen, desto besser ist der Code.


----------



## InfectedBytes (26. Aug 2016)

Meniskusschaden hat gesagt.:


> Hm, das hört sich für mich eher nach einer Kritik an, aber vielleicht hat er es nicht so gemeint. Ich sehe es so: Je weniger Ahnung man haben muß, um einen gegebenen Code zu verstehen, desto besser ist der Code.


Kann ich nur bestätigen. Ich habe mehrere Jahre an der Uni gearbeitet und dort u.a. auch für Programmiervorlesungen die Übungen betreut, sowie Klausuren korrigiert. Und die "schwer verständlichen" Programme waren eben die schlechten, da diese unnötig durcheinander waren, sowie vieles falsch gemacht haben und erst durch unnötig komplizierte Umwege dann zum richtigen Ergebnis kamen. 
Muss natürlich nicht zwangsweise auch bei dir der Fall sein, aber die Erfahrung zeigt eben, dass die "komplizierten Lösungen" häufig eher die schlechten Lösungen sind.


----------



## Thallius (26. Aug 2016)

Was willst uns eigentlich sagen? Was für ein genialer Überflieger Du bist und das wir vor Ehrfurcht vor dir niederknieen sollen.

Wenn du wirklich so gut bist, dann beweise es und löse mal eben die von mir gestellte Aufgabe (Sollte für einen Crack wie dich ja nicht länger als 30min dauern)

http://www.java-forum.org/thema/jdatepicker-oder-sucht-jemand-eine-aufgabe.173841/


----------



## Xyz1 (26. Aug 2016)

Lehrer???? Nicht 'Dozent' oder sonst ein Ungetüm? Das scheint mir immer schlimmer zu werden, mit deiner Selbsteinschätzung.

Wenn du 20 Jahre Programmierung Skillz gesammelt hast, können wir noch mal diskutieren. Obwohl ich das auch nicht von mir behaupte.

Und hier spricht jemand, der zu Zeiten, als es noch Lehrer gab, durchweg 1s hatte.


----------



## Thallius (26. Aug 2016)

Das oben geschrieben gilt übrigens genauso für unseren Wissenden.

Was wird das jetzt hier? Ein "wer ist das intelligenteste Kiddy" Wettkampf...

Oh mannn


----------



## Xyz1 (26. Aug 2016)

Thallius hat gesagt.:


> wer ist das intelligenteste Kiddy



Wer sagt denn, dass ich noch Kiddy bin? 

Ich meinte damit einfach Selbstein- und -Überschätzung.

2 Std., 2 Tage, 2 Wochen, 1 Monat, 1/2 Jahr, 1 Jahr, usw. DAS sollte man jenerell nicht zu gering einschätzen.


----------



## Thallius (26. Aug 2016)

Naja selbst einschätzen ist nicht so schwierig...

Du bist Wert was der Markt für dich bezahlt. 

Wer gute Arbeit leistet wird auch entsprechend umworben und bezahlt. Als ich vor über 30 Jahren angefangen habe musste ich um jeden Auftraggeber kämpfen. Heute rufen täglich irgendwelche Headhunter aus aller Welt an, die ich alle vertrösten muss, da ich bis Ende nächsten Jahres schon wieder komplett ausgebucht bin. Und ja, darauf bin ich stolz und ich denke das kann ich auch sein. Denn das ist was handfestes das man vorzeigen kann und nicht irgendwelche leeren Sprüche....


----------



## Xyz1 (26. Aug 2016)

Hm, machen wir doch eine Reihung draus:

Erfahrungen/Kenntnisse von sFee < (alle anderen) < DerWissende < Thallius 

Mir geht's gar nicht darum, wer "besser" ist - sondern ich muss hier falsche Fremd- und Eigeneinschätzung und Unterschätzung des Aufwands dessen etwas berichtigen.


----------



## cefour (26. Aug 2016)

@sFee Das was du schreibst entbehrt jeglicher Logik. Mit einem Jahr Info willst du bewerten was guter Quellcode ist. 
Dann schönen dank. 
Compilerbau ist einfach, wenn du eine Sprache hast die hinreichend einfach ist.
Compilerbaut ist schwer, wenn die Anforderungen hoch sind. Teajay ist so eine Sprache und wenn du Autoren in dieser Form angehst solltest du denen auch nicht schreiben. Ich denke du bist der Kerl der für seine Facharbeit gefragt hat. Ich habe dir auch gesagt, dass im Rahmen einer Facharbeit das was du willst nicht geleistet werden kann. 
Du hast hier auch tolle Vorschläge erhalten, wie den Streichholzcomputer. Das gefällt mir und mit einer netten GUI ist das auch ne nette Facharbeit.

Solltest du das nicht sein. Dann tut es mir leid und sage uns mal was du realisieren möchtest.

P.S google alert ist cool.


----------



## Xyz1 (26. Aug 2016)

Hmmm, wer ist wer??? Ich dachte, sFee sei eine Frau... Habt ihr jetzt schnell die Geschlechter getauscht?

Kann meinem Vorredner(n) nur zustimmen, für Schule- Facharbeit kann das Thema nicht geleistet werden und ist falsch.


----------



## Tobse (26. Aug 2016)

Meniskusschaden hat gesagt.:


> Bytecode zu erzeugen gehört für dich zu den Basics? Alle Achtung!


Nein, natürlich nicht  Basics sind für mich:

1. Verstehen, dass Java Quellcode zu Bytecode compiliert wird
2. Den JVM Bytecode recherchieren können und dabei herausfinden, dass:
2.1. Die Struktur vom Bytecode kein Hexenwerk ist und das erzeugen einer .class Datei mit statischem Inhalt auch für einen Anfänger schnell gemacht ist
2.2. Daraus Schlussfolgern, dass die Schwierigkeit darin liegt, die JVM Opcodes in der richtigen Reihenfolge und mit den richtigen Parametern in die .class zu schreiben



Meniskusschaden hat gesagt.:


> Theoretisch kann man dem Problem ja ausweichen, indem man den Compiler keinen Bytecode erzeugen lässt, sondern Java-Quellcode.


Das vereinfacht die Sache und das Ergebnis kann 100% funktional sein. Ich möchte dann aber keinen Stacktrace von so einer Sprache auswerten müssen...


----------



## cefour (26. Aug 2016)

Es wäre schon ein ziemlicher Zufall, wenn jemand mich vor 2 Wochen anschreibt zu diese  Thema und heute die Frage dazu stellt, ob man ihm die Arbeit erkläre  könnte. Das wäre zuviel die Arbeit ist zu Unbekannt ähnlich wie das Buch von Clausing was er erwähnt hat.


----------



## Meniskusschaden (26. Aug 2016)

@cefour: Du bist einer der TeaJay-Autoren, oder habe ich das falsch verstanden? Dann würde mich interessieren, ob du nachträglich abschätzen kannst, wieviel Zeit ihr in die Abschlussarbeit investiert habt.


----------



## Nuiton (26. Aug 2016)

sFee hat gesagt.:


> [...]wenn ich das richtig verstanden habe muss man um eine eigene Programmiersprache für die JVM zu schreiben einen Parser entwickeln und Bytecode verstehen. Und das soll so schwierig sein? Ich denke ein Parser für eine Sprache wie Java lässt sich innerhalb von zwei Wochen schreiben.





sFee hat gesagt.:


> Deshalb komme ich zu dem Schluss, dass das Thema Eigene Programmiersprache nicht schwierig sein kann.


Schreibe eine Grammatik. Schreibe einen Parser. Mach das in ein paar Wochen, und wenn alles richtig ist, werde ich dich bei dem Department of Computer Science von UCLA vorschlagen.


----------



## Xyz1 (26. Aug 2016)

@Meniskusschaden : Nimm doch sFee s Zeitrechnung: 1 Std.


----------



## cefour (26. Aug 2016)

8 Monate mit 4 bis 12 Std pro Tag 7 Tage die Woche inklusive Arbeit schreiben und Diskussionen ohne Ende.


----------



## Xyz1 (26. Aug 2016)

@sFee : Könnte ja die Fehler "beheben", die Java noch hat, und erst in kommenden Versionen berichtigt werden. 

Also Klartext: Java 7 oder 8 verbessern.


----------



## Meniskusschaden (26. Aug 2016)

cefour hat gesagt.:


> 8 Monate mit 4 bis 12 Std pro Tag 7 Tage die Woche inklusive Arbeit schreiben und Diskussionen ohne Ende.


Pro Person, nehme ich an. Wenn man es noch auf Fünf-Tage-Woche umrechnet, geht es sogar in Richtung zwei Personenjahre. Auf jeden Fall viel zu viel Aufwand, um es mal eben nebenbei zu erledigen.


----------



## Xyz1 (26. Aug 2016)

Also sFee, nun mal Prompt, 1) wie alt bist du, 2) in welcher Klasse/Schule bist du, 3) wie lange hast du schon Erfahrungen in Programmierung und 4) in welchen Programmierungen? Zusätzlich, aber nicht wichtig: Wer wo wann und warum hat dir diese Aufgabe gegeben? Was hast du bisher versucht? Wie ist der aktuelle und erwartete Stand? Wie sind deine Noten so? Geht's dir gut? Ist das Wetter schön? Wird Bayern "gewinnen"?


----------



## Meniskusschaden (27. Aug 2016)

Ich habe mir jetzt die Einleitung zu Achim Clausings Buch durchgelesen und festgestellt, dass meine ursprüngliche Annahme falsch ist. Hier hatte ich vermutet, dass die Beispiel-Programmiersprachen Java-Quellcode erzeugen:


Meniskusschaden hat gesagt.:


> Theoretisch kann man dem Problem ja ausweichen, indem man den Compiler keinen Bytecode erzeugen lässt, sondern Java-Quellcode. Vielleicht ist dieses Buch ein guter Einstieg dafür. Der Autor scheint es so gemacht zu haben.


Aus der Einleitung geht hervor, dass es sich um Interpretersprachen handelt, deren Interpreter in Java realisiert sind. Das scheint mir für die Zielsetzung des Buches auch ein viel naheliegenderer Ansatz zu sein. Im Nachhinein weiß ich gar nicht mehr, warum ich zunächst etwas anderes vermutet hatte.


----------



## sFee (27. Aug 2016)

Deine Antworten auf meine Fragen waren arrogant, Cefour! 
Du hast geschrieben: Wenn du eine eigene Sprache entwickeln möchtest, sollte ich den Willen haben mir ins Knie schießen zu wollen, 5 Bücher empfohlen und das meine Erfahrung und Können nicht ausreichen um eine Programmiersprache zu entwicklen.

Die Arbeit ist aber nicht so toll oder siehst du jemanden damit Entwicklen. Das was ihr geschrieben habt, ist alles Simpel und besondere Fähigkeiten im Programmieren sehe ich nicht an eurem Quellcode.


----------



## Thallius (27. Aug 2016)

Kann mal einer der Mods das hier zumachen? Es wird jetzt wirklich peinlich und persönlich...


----------



## sFee (27. Aug 2016)

Entschuldigung! Ich wollte euch alle nicht Nerven. 
Aber ich will eine eigene Sprache entwickeln und wenn ich dann Fragen habe, geben mir die Leute zu verstehen, das ich zu Jung bin.

Ist es denn nicht möglich eine Sprache wie Java einfach zu entwickeln?
Es gibt heute, so viele Hilfsmittel da sollte doch eine solche Aufgabe nicht mehr schwierig sein


----------



## JCODA (27. Aug 2016)

sFee hat gesagt.:


> Aber ich will eine eigene Sprache entwickeln und wenn ich dann Fragen habe, geben mir die Leute zu verstehen, das ich zu Jung bin.


Niemand sagst, dass du zu jung bist. 
Jeder sagt, dass du dir nicht ein zu großes Projekt vornehmen sollst, welches am Ende vielleicht nicht deinen Ansprüchen genügt. (Vor allem wenn es benotet wird...)
Ich versteh schon, du hast dir ein Ziel gesetzt und die Leute aus dem Forum sagen dir, dass du das nicht umsetzen kannst. Aber unbestreitbar haben die Leute hier Wissen. Wenn du deren Wissen als nichtig einschätzt, wie etwa "Der Quellcode wirkt für mich nicht als hätten das besonders gute Programmierer gemacht" oder "Die Arbeit ist aber nicht so toll oder siehst du jemanden damit Entwicklen.", dann darfst du auch nicht böse sein, wenn dir nicht mehr in dem Maße geholfen wird, dein Wissen zu erweitern. 
Achso und nur weil dein Lehrer etwas sagt, heißt das nicht, dass das außerhalb der Schule etwas zu bedeuten hat. Ich habe das leider selbst erfahren müssen ... 

Jedenfalls, fang an! Du hast es in der Hand uns allen das Gegenteil zu beweisen.


----------



## thecain (27. Aug 2016)

Mir kommt das ein bisschen so vor...

Hallo,  ich möchte ein Auto bauen, das kann ja nicht schwer sein, aber ich hab da noch eine Frage. Wie baut man ein Auto?


----------



## Xyz1 (27. Aug 2016)

Ich lenke mal mit einer eigenen Frage ab:

Hallo, ich möchte ein Operating System schreiben, weiß aber noch nicht wie. Könnt ihr mir ahnungslosen bitte erklären, wie man ein Operating System schreibt, damit ich das kann? Ich schätze den Zeitaufwand meinen bisherigen Erfahrungen nach sehr gering ein...

*Edit: Beantworte doch einfach meine Fragen 1) bis 4), wenn dir wirklich etwas daran liegt. Gehört zur "Kommunikation" nämlich dazu.*


----------



## Tobse (27. Aug 2016)

JCODA hat gesagt.:


> [...] Aber unbestreitbar haben die Leute hier Wissen. Wenn du deren Wissen als nichtig einschätzt, wie etwa "Der Quellcode wirkt für mich nicht als hätten das besonders gute Programmierer gemacht" oder "Die Arbeit ist aber nicht so toll oder siehst du jemanden damit Entwicklen.", dann darfst du auch nicht böse sein, [...]


Den selben gedankten hatte ich auch.

@sFee: Wenn wir alle keine Ahnung haben dich fälschlicherweise als zu unerfahren einschätzen, dann verstehe ich nicht, warum du immernoch so viel Wert auf unsere Aussagen legst.  Sagte mir ein Viertklässler sagt ich beherrschte die Integralrechnung nicht, ginge mir das auch mal sonst wo vorbei.



			
				sFee hat gesagt.:
			
		

> Aber ich will eine eigene Sprache entwickeln und wenn ich dann Fragen habe, geben mir die Leute zu verstehen, das ich zu Jung bin.


Wenn du auf einen Berg steigen willst und einen erfahrenen Bergsteiger um Hilfe fragst, bist du dann auch beleidigt wenn er dir sagt "Du bist zu unsprotlich, du hälst es nicht bis zur Spitze durch. Du musst noch XY Zeit trainieren."? Denn genau das passiert hier.


----------



## Flown (27. Aug 2016)

sFee hat gesagt.:


> Ist es denn nicht möglich eine Sprache wie Java einfach zu entwickeln?


Möglich zu entwickeln ja, einfach nein.

Grundsätzlich ist es im Forum so, dass hier bei konkreten(!) Fragen gern mit Rat und Tat dir zur Seite gestanden wird. Aber eine so breite Fragen wie: Wie baue ich ein ganzes Projekt (Compiler, Parser, ...), wie glaubst du sollen wir dann helfen? Es gibt nun mal keinen einfachen Weg so etwas zu bauen, mal eben so.

Grundsätzlich: kannst du "simpel" Sprachen kreieren, die nur Rechnen können und Funktionen schon zur Compilezeit existieren ohne indirekte Rekursion, etc. Wenn jetzt dynamic dispatching, Vererbung, Threading, ... noch dazu kommen, dann wird es ein ausgewachsenes Projekt, dass sehr viel Wissen und Zeit benötigt es umzusetzen.
Versteh mich nicht falsch: Ich habe Compilerbau auf der Uni gehabt (da war aber auch schon sehr viel vorgegeben) und schon über 15 Jahre Erfahrung mit Programmierung (speziell Java) und könnte es trotzdem nicht von Grundauf "neu" schreiben, ohne mich ernsthaft in die Materie einzulesen.


----------



## cefour (27. Aug 2016)

@sFee deine Entschuldigung ist angenommen. Natürlich kannst du das alles lernen und du kannst durchaus innerhalb weniger Tage eine kleine Programmiersprache implementieren. Aber Sprachen wie Java oder C++ ist zuviel und ich erkläre dir auch warum: 
Eine Programmiersprache würdest du normalerweise mit Antlr oder yacc und einen beliebigen Lexer. Dadurch musst du dich wirklich nur noch mit dem Sprache Design und der Code Generierung befassen.
Die Krux an Java oder C++ ist das die Sprachspezifikation sich mit diesen  Parsergeneratoren nicht Parser lassen ( stand 2014,. Antlr hat beachtliche Fortschritte gemacht). Somit wird es fast unmöglich für dich eine Sprache in dem Umfang zu implementieren.
Entwerfe kleine Sprachen und Parser sie mit den vorgeschlagenen Tools. Ist das geschaft kannst du dich an die Code Erzeugung setzen. Wenn du soweit bist, hast du einiges mehr an Erfahrung und dann sollte es sich tatsächlich nur noch um <3 Jahre handeln.
Die größte Schwierigkeit ist, du musst bereit sein über einen sehr langen Zeitraum keine Ergebnisse deine Arbeit zu sehen und dies ist ein wirklicher Motivationskiller. Das muss du aushalten lernen.
Und für Fragen stehen wir alle bereit.


----------



## CSHW89 (27. Aug 2016)

@sFee So jetzt muss ich aber auch noch meine bescheidene Meinung dazu geben und vielleicht ein paar Typs für dein Unterfangen geben. Doch zunächst mal, Schlag dir ausm Kopf eine Sprache wie Java komplett selbst zu entwickeln. Und glaub mir, ich weiß wovon ich rede. Ich habe selbst schon mehr als ein halbes dutzend Programmiersprachen geschrieben. Bspw. schreibe ich hobbymäßig eine Sprache mit ähnlichem Umfang wie Java seit Juni 2014 (hab gerade nochmal nachgeguckt). So langsam kommt tatsälich die Zeit, in der ich die Sprache wirklich benutzen könnte, nach 2 Jahren!
Ich möchte dich aber nicht entmutigen, denn es gibt durchaus Möglichkeiten eine Programmiersprache in deutlich weniger Zeit zu entwickeln. Unterklassen von Sprachen wie Haskell (ohne Typsystem zur Compilezeit) oder Python können mit sehr viel weniger Aufwand programmiert werden. Vor allem, wenn das Ziel ist, den Code "nur" zu interprietieren, und ihn nicht in Bytecode oder ähnliches umzuwandeln.
Aber selbst eine ähnliche Sprache wie Java kann man in ein paar Monaten entwickeln, wenn bspw. der Compiler von Java selbst einem vieles abnimmt. So könnte man eine Sprache entwickeln, dessen Code sehr ähnlich zu Java ist, und diesen in Java-Code umwandeln. Nun jagt man den Java-Compiler rüber, und gibt alle gefundenen Fehler weiter. So muss man kein Typsystem programmieren, was bei Java-änhlichen Sprachen mit das schwierigste und aufwändigste ist. Da lässt sich natürlich streiten, ob mans noch ein echten Compiler nennen kann, oder nicht eher ein Precompiler.



cefour hat gesagt.:


> Die Krux an Java oder C++ ist das die Sprachspezifikation sich mit diesen  Parsergeneratoren nicht Parser lassen


Welche Fälle meinst du da genau? Wenn ich mich recht erinnere, gibts bei C++ Fälle, bei denen die Syntax von der Semantik abhängt. Weiß aber nicht mehr genau, wo das war. Aber bei Java? Da fällt mir höchstens das Casten "'(' type ')' expression" ein, was ich nie hinbekommen habe. Man hat ja meistens immer noch eine Regel in expression mit "'(' expression ')'". Da kam es dann immer zu Konflikten. Ich dachte aber Java wäre eine LALR(1)-Sprache.

lg Kevin


----------



## cefour (27. Aug 2016)

Dein Beispiel des cast Problems ist so ein Problem. Ein Parser Generator kann nicht ohne weiteres entscheiden welche Regel produziert wird. Der Java 7 Compiler ist z.B ein von Hand geschriebener LALR Parser und das genau aus solchen gründen. Du kannst dir auch die Statement Regel von Java anschauen.


----------



## Xyz1 (27. Aug 2016)

Also mir hat man gesagt, niemand kann die EBNF-Regeln für Java lesen, wir sollen das lassen. Nicht mal Compilerbaue lesen das. 

*Edit: Hier hat jemand den anfang gemacht:*
https://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html


----------



## cefour (27. Aug 2016)

Wenn du die Java Grammatik anschauen möchtest im appendix der Teajay Arbeit ist sie vorhanden. Es ist kenntlich gemacht was teajay Part ist. Des Weiteren ist die Grammatik dort schon soweit es geht bearbeitet um mit einen LL Parser geparst zu werden.


----------



## Xyz1 (27. Aug 2016)

Ich bin ehrlich gesagt noch nicht so weit in der Arbeit vorgedrungen, bis zu Grammatik. Das ist aber auch teilweise dem Wetter heute geschuldet. Ich hoffe, ihr sitzt alle in der Sonne.


----------



## Nuiton (31. Aug 2016)

Wenn man doch wirklich so motiviert ist, sowas durchzuziehen, kann man ja hiermit anfangen.


----------



## tommysenf (31. Aug 2016)

Wahrscheinlich sollte das hier das beste für den Threadersteller als Einstieg sein:


----------



## Saheeda (31. Aug 2016)

@sFee 
Hilft dir das hier vielleicht weiter?
http://www.heise.de/developer/artik...iersprache-mit-Xtext-modellieren-3180566.html

Das geht einen etwas anderen Weg, aber könnte für dich schon reichen.


----------

