Seite 10 von 10

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 25.10.2013 22:32
von puretom
PS: Du solltest EnableExplicit in den Modulen nutzen, z.B. bei der Umstellung auf #PB_Any hast Du File als Variable
eingeführt. Ohne Deklaration wird es schwer zu erkennen, ist das Global oder Lokal in der Procedure.
Also ein Protected File am beginn der Procedure gibt einem gleich den notwendigen Hinweis, ausserdem vermeidet
EnableExplicit auch weitere Fehler.
Danke für den Tipp! Doch das liegt mir leider überhaupt nicht! Tut mir leid!

Bei früheren Versionen hatte ich mal mit EnableExplicit gearbeitet, aber dadurch werden die Prozeduren länger und für mich immer unübersichtlicher, das habe ich nicht sehr gerne und ich bin froh, dass PB ohne Vordeklaration Variablen erlaubt, auch wenn ich Deklarationen in ToyC einführen werde, aber C ist C und Basic ist Basic.

Habe dann alle Deklarationsteile wieder weggelöscht, weil sie mir extrem fürchterlich am Nerv gegangen sind.

Die Handvoll globale Variablen, die ich verwende, kann man aus dem Deklarationsteil der Module sehen. Dort sind sie dokumentiert und sogar erklärend kommentiert.

Wer genau hinschaut, der sieht, dass ich globale Variablen groß und lokale/+Parameter klein beginne, das weiß natürlich nur ich, das ist mir natürlich schon klar :wink:. Sollte es mal wo anders sein, dann war es ein Fehler von mir.

Natürlich hast du im Prinzip und in der Sache recht, aber das liegt mir leider wirklich nicht.

LG Thomas

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 26.10.2013 11:17
von Ameisen23
@puretom :lol: Das solltest du aber machen sonst ist das ein sehr schlechter, unsauberen Programmierstil. Und hauptsächlich globale Variablen zu nutzen geht garnicht. :lol:
Wenn du das und andere Sachen nicht lernst, dann wirst du für immer ein Anfänger bleiben!

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 26.10.2013 13:04
von puretom
Ameisen23 hat geschrieben:@puretom :lol: Das solltest du aber machen sonst ist das ein sehr schlechter, unsauberen Programmierstil. Und hauptsächlich globale Variablen zu nutzen geht garnicht. :lol:
Wenn du das und andere Sachen nicht lernst, dann wirst du für immer ein Anfänger bleiben!
Deine Meinung! Ich respektiere das.

Aber als Anfänger würde ich mich grad nicht bezeichnen, eventuell als bereits ein bisschen fortgeschritteren Anfänger :lol: .

Bei dieser Art Compiler-Aufbau sollte man aber einige (aber nicht hauptsächlich) globale Variablen nutzen ( /:-> du kennst den Code, auf den wir uns beziehen?)!
Im Gegenteil: Mein Code nutzt eigentlich sogar hauptsächlich lokale Variablen, ein recursive descent parser lebt vom impliziten Stack, der durch die Lokalität von Variablen in Prozeduren entsteht. Das ist ja gerade diese spezielle Parse-Technik, die so einfach und bestechend genial ist <) .

Es gibt wesentliche Designmerkmale, die diese Art Compiler und VM/Emulator wesentlich definieren, da gehören ein globaler Look, ein globales Lexem und ein globales Token z.B. dazu.
Auch globale Datenstrukturen, wie die Stacks in einer Virtual Machine, sind als lokale Arrays ausgeführt weshalb wozu gut? Ja, man könnte auf 'Shared' jedesmal gehen, wozu? Der Stack einer CPU ist für ihn global, man könnte das Array versuchen, ByRef mit Pointern zu übergeben, wozu?
(Zu Info: Andere Compiler-Versionen von mir hatten das zum Teil)

Das ist ein Grund-Designmerkmal und nicht zu ändern, ohne umständlich zu werden. Und warum umständlich, wenn es einfach (Crenshaw --> Kiss-Philosophie) auch geht - mein Tutorial-Ziel.

Hier Parameter - z.B. bei Lexem oder Token oder Look oder ein File-Handle - umherzuschicken, das machen nicht mal Leute wie Wirth oder lese ich auch nicht im Drachenbuch, die diese Art von Compiler ja quasi erfunden haben. Es gibt freilich modernere objektorientierte Designs, oder welche mit Bäumen uvm. Aber ich will bewusst diese Art Compiler-Aufbau dem Forum näherbringen, zumal ich von den anderen selbst keine Ahnung habe.

Pure Basic ist auch nicht objektorientiert, wobei ich der Objektorientierung insgesamt nicht so viel abgewinnen kann (wenngleich ich Grunderfahrungen in C# habe), drum programmiere ich ja auch nach wie vor Basic als Hobbyist, aber das ist auch nicht der Punkt. Bitte jetzt keine Diskussionen über pro und kontra Objektorientierung, da machen wir einen neuen Flame-Thread auf!

Aber ich möchte dich herzlich einladen, meinen Compiler vollständig auf lokale Variablen umzuprogrammieren. Ich bin dankbar für jeden brauchbaren Vorschlag.

Aber wie gesagt, es ist der Wirth-Crenshaw-Varanese-Dragon-Book-recursive-descent-parser-Ansatz (gibt es dieses Wort überhaupt? :lol: ), den ich VERSUCHE, dem Forum auf Deutsch, auf meinem Anfängerniveau näherzubringen.

Nach wie vor ist aber die Vorgabe, ihn für Laien verständlich zu halten, es wird ja ein Tutorial und keine kommerzielle Release-Version!

Aber über Fragen des Programmierstils zu diskutieren, ist interessant, denn jeder hat seinen Stil, und seine Meinung! Man könnte ganze Flame-Schlachten führen!

Liebe Grüße, puretom

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 08.11.2013 20:07
von fsw
Hallo puretom,
sehr schoen was du hier zusammen gebastelt hast.
Bin nicht so oft im deutschen forum, werde aber dein tutorial mit spannung weiter verfolgen.
Bitte lass dich nicht entmutigen in deinem ziel diesem forum "compilerbau" naeher zu bringen.
Das einzige was zaehlt ist dass der gepostete code funktioniert so das der leser die erwarteten
ergebnisse nachvollziehen kann und dabei was lernt.

Keep up the good work...
:allright:

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 09.11.2013 13:05
von puretom
Vielen Dank fsw!

Ich bastle weiter!
Lasse mir aber mehr Zeit, als ich zu Beginn getan habe.

Aufgrund meiner Unerfahrenheit beim Buchschreiben (hab das noch nie vorher versucht) bin ich vorangestürmt, ohne vorher auf das Ende zu blicken.
Sprich: Ich wusste nicht, den Faden zum Ende zu spinnen.

Andererseits: Es sind etliche Einzelartikel bis jetzt herausgekommen, die für sich hoffentlich auch interessant sind.

Im Tutorial-Thread wird sich einiges wieder verändern (nur im Teil Zwei! Die vorigen sind glaube ich schon so weit fertig - hoffentlich - da kommt bestenfalls ein Literaturtipp mal DAZU und nicht weg), sobald ich Teil Zwei fertig habe (und bis dahin werde ich NICHTS mehr veröffentlichen - außer kleine Formatierungsgeschichten, die mir auffallen im Vorbeigehen.)

Deshalb rate ich jedem, sich die bisherigen Sachen im Tutorialthread (hier bleiben sowieso alle Einzelartikel drinnen, da lösche ich nichts weg mehr!) rund um Teil Zwei vielleicht zu sichern, wenn jmd. an älteren Versionen interessiert ist.

Ich werde aber bei Motivation alles im Teil Drei wieder aufnehmen und weiterführen.

Aber jetzt will ich TTC 0.5 mit Assembler, mit Virtual Machine in der Konsole lauffähig vorzeigen können, bevor ich irgendetwas Neues zeige, ich nehme auch die bereits funktionierenden Strings wieder raus (Kommt dann ab TTC >0.5 wieder), denn ich möchte V0.5 nicht überfrachten.
Die Zielgruppe sind nämlich Interessierte, die wie ich vor ca. 5 Jahren für eine einfache Einführung in Primitivtechniken dankbar gewesen wäre - Ich nehme alles raus, was zu genial ist, um die Übersicht für den Anfänger absolut aufrecht zu erhalten!
Also den Code und alles rauskopieren, denn Teil Zwei ist in Arbeit!

LG
Puretom

Danke für das Feedback! Hoff es gefällt auch anderen noch /:-> , aber so leicht ist das gar nicht, ein solches Projekt als Neuling im Schreiben durchzuziehen, wie ich geglaubt habe :wink:

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 12.11.2013 19:13
von puretom
Liebe Leute!

Nur als Zwischeninfo!

Der Thread lebt noch :D , ich arbeite noch regelmäßig an meinem Teil Zwei!

Es dauert aus beruflichen und privaten Gründen aber alles seine Zeit!

Ich bitte um Geduld!

LG
Puretom

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 16.11.2013 00:17
von puretom
Pfuuuhhhh!

Das war jetzt aber mehr Arbeit, als ich gedacht habe :D !

Das Compiler-Einsteiger-Kapitel ist jetzt konzeptuell fertig, und zwar mit allem Drum und Dran.
Ich HOFFE da jetzt nicht mehr alles umwerfen zu müssen!

Stark zurückgebaut und abgespeckt, um den Namen Einsteiger wirklich auch verdienen zu können.

Virtual Machine und Assembler folgen in den nächsten Wochen, so ich die Motivation finde, aber schon alleine dieses Kapitel hat mich an den Rand des Nervenzusammenbruchs geführt, da ich alles 100-mal gedreht, gewendet, zurückgewendet und manches verworfen, dann wieder zurückgeholt (habe alle Versionen in Kopie ! Gott sei Dank!) habe.

Meine absolute Hochachtung gilt ab jetzt Fachbuchautoren! Oh ja! :wink:

Da sind sicher noch
  • Tippfehler
  • Inkonsistenzen wegen der 100-maligen Herumschieberei (wie gesagt, ein Buch zu schreiben ist schwerer, als ich dachte)
  • Formatierungsfehler
  • BUGS!!! Die Suche ich am dringendsten!!!!
Ich bitte um motivierende Worte und vor allem aktive Mitarbeit beim Aufspüren von Blödsinn in meinen Texten und Codes.

Ich hoffe, es hat irgendwer eine Freude damit, eine Mini-Scriptsprache entwerfen zu können, alle wesentlichen Sprachelemente, die man so braucht (aber noch keine Strings, die kommen mit 1.0), sind enthalten.

Liebe Grüße, Puretom!!



P.S. Manches wirkt umständlicher als nötig, aber da sind schon Konzepte von V1.0 vorbereitet!

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 16.11.2013 00:20
von RSBasic
:allright:

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 16.11.2013 01:26
von Kiffi
puretom hat geschrieben:Ich bitte um motivierende Worte
Bild

http://www.purebasic.fr/german/viewtopi ... 27#p316927:
Zuletzt möchte ich gerne einen kurzen Überblick über die Arbeitsweise eines Compilers und einer Virtuellen Maschine zu geben.
http://www.purebasic.fr/german/viewtopi ... 30#p316930:
frei nach dem Spruch (weiß nicht, wer das gesagt hat, habe ich mal aufgeschnappt): Optimiere funktionierenden Code nie, es sei denn, du musst unbedingt (so oder so ähnlich).
Hier gibt's ein paar Zitate zum Thema Code-Optimierung. Vielleicht ist Deiner ja dabei (ich tippe mal auf Knuth):

http://www.clean-code-developer.de/Vors ... ungen.ashx

Grüße ... Kiffi

Re: [Tutorial] Compiler und Virtual Machine

Verfasst: 16.11.2013 08:53
von Danilo
Das bezieht sich auf Nutzer des Compilers. Die schreiben Code in der Hochsprache, und sollen
diesen Hochsprachencode nicht kaputt-optimieren, so dass er evtl. nicht mehr lesbar ist.
Oder der Aufwand für eine Optimierung steht in keinem Verhältnis zum Ergebnis, dann sollte
man sich besser um wichtigere Dinge kümmern.
Für den Quelltext des Compilers gilt das auch. Der muss vor allem auch gut zu warten und
zu erweitern sein. Das ist bei einem größeren Projekt auf Dauer meist am Wichtigsten.

Bei Optimierungen im Compilerbau gilt aber das Gegenteil, denn dabei geht es einfach nur darum,
dass der Compiler die Quelle in ein effektiveres Ziel übersetzt, so dass danach die Ausführungsgeschwindigkeit,
der Speicherverbrauch, die Größe des Ziels, oder der Energieverbrauch des Resultates optimierter und besser sind,
als ohne solche Optimierungen.
Das heisst, ohne das der Quellcode (die Eingabe) geändert werden muss (und somit gleich lesbar bleibt),
können bei der automatischen Übersetzung in das Ziel (die Ausgabe) bestimmte Optimierungen angewandt werden,
so dass dann das Resultat zur Laufzeit schneller ausgeführt werden kann, weniger Speicher oder Energie verbraucht,
oder das Resultat kleiner ist (100kb statt 2,5MB).
Welche Optimierungen dabei am Wichtigsten sind, hängt aber meist sehr speziell vom Ziel ab. Bei embedded Devices
wie Mini-Computer in der Industrie oder Mobiltelefonen sind der Energie- und Speicherverbrauch meist wichtiger,
aber auch die Größe des Resultats. Bei High-End Renderern auf Workstations wird es wohl eher die Geschwindigkeit sein,
auf die man hin optimieren möchte, da hier die Ausführungsgeschwindigkeit meist höhere Priorität hat als der Energie- oder Speicherverbrauch.