[Tutorial] Compiler und Virtual Machine

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
puretom
Beiträge: 109
Registriert: 06.09.2013 22:02

Re: Tutorial - Compiler und Virtual Machine (nicht beschreib

Beitrag von puretom »

Ich weiß zwar nicht, was einen daran nerven kann, ein gratis Tutorial auf Deutsch zu bekommen, aber bitte, jeder Mensch hat seine eigenen subjektiven Empfindungen.

Doch glücklicherweise muss ich nicht "normal" schreiben, was immer auch normal ist, ich muss im Grunde nämlich überhaupt nicht schreiben.

Danke, dass du dich nicht daran gehalten hast, hier nicht reinzuschreiben. Man sieht, du hast keine Vorstellung, wie viele Tage Arbeit - Untertreibung: mittlerweile Wochen - dahintergesteckt sind. Stundenlange Versuche so zu formatieren, dass es übersichtlich wird.
Versuche, schöne Ascii-Art zu machen.

Wenn es wenigstens im Diskussionsthread gewesen wäre, aber dort schreibt ohnehin niemand etwas.

Aus diesem Grund glaube ich langsam, dass meine Mühen ohnehin keinen interessieren.

Wenn es euch wirklich so sehr nervt, dann werde ich meine Arbeit beenden.

Nicht nur deswegen, sondern auch weil seit einiger Zeit sowieso kein Feedback kommt und niemand etwas schreibt und ich glaube, dass es ohnehin niemand mag, bedanke ich mich bei allen, die es interessiert hat, und verabschiede mich.

Liebe Grüße, euer Puretom.

P.S. Hat mir bisher viel Spaß gemacht. :cry:
Windows 7 und Windows 10 (Laptop), PB 5.62 | Projekt: Tutorial - Compiler und Virtual Machine | vielleicht einmal ein Old School Text-Adventure Tutorial | Neu: Spielereien, Üben rund um OOP in PB
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 12:11, insgesamt 1-mal geändert.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Tutorial - Compiler und Virtual Machine (nicht beschreib

Beitrag von NicTheQuick »

mirca hat geschrieben:Warum musst du immer alles GROSS SCHREIBEN oder übertriebene
Formatierungen
nutzen? Kannst du bitte normal schreiben wie jeder andere und nicht die Formatierungen
als N*tte missbrauchen?
Und warum erstellst du Platzhalter Beiträge die du später durch Code ersetzt? Macht es Sinn? Kannst du dein Code nicht
einfach dann posten wenn es fertig ist? Es nervt sorry!
Ist dir langweilig? Da ist jemand produktiv und will etwas für die Allgemeinheit tun und formatiert sogar noch alles sehr übersichtlich und dann kommt wieder einer, der sich daran stört. Dann ignoriere den Thread in Zukunft eben und gut ist. Oder halte dich wenigstens daran und mecker im richtigen Thread und nicht in dem Tutorial-Thread selbst. Danke.
Bild
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: [Tutorial] Compiler und Virtual Machine

Beitrag von Regenduft »

Also es ist unglaublich! Ich Trottel habe es dezent per PN an Mirca versucht... hat nicht einmal reagiert.
Die kindliche Ausdrucksweise und das Trotzverhalten ist zwar fast schon amüsant, trotzdem muss hier auch die Moderatoren kritisieren: So ein Vollpfosten gehört direkt gebannt! :wink:

@puretom: Ich fände es unglaublich schade, wenn Du Deine Arbeit einstellen würdest! Da Dir das Feedback fehlt gebe ich nochmal ein kleines: Das Tutorial ist (zumindest für Hobbyprogrammierer wie mich) wahnsinnig interessant, aber schwere Kost. Du schreibst (sozusagen) schneller als ich lesen kann! Daher hatte ich nur zu Beginn ein "flaches" Feedback gegeben. Ich vermute es geht vielen hier ähnlich. Ich fühle mich einfach überfordert ein inhaltliches Feedback zu geben. Optisch ist alles ansprechend und die Texte sind gut strukturiert! Das ist eins der engagiertesten und Projekte seit langem! Auch wenn Du das Projekt aufgeben solltest, so hättest Du meiner Meinung nach Dir selbst schon ein virtuelles Denkmal gesetzt! Daher einfach mal Danke! :allright:
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: [Tutorial] Compiler und Virtual Machine

Beitrag von KeyKon »

Von mir auch ein :allright:
Ich finde die Formatierung im übrigen gelungen.
Ich finde das Thema sehr interessant, da ich aber noch keine Zeit hatte mich rein zu vertiefen habe ich bisher kein Feedback gegeben.

Weiter so!

LG KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Tutorial - Compiler und Virtual Machine (nicht beschreib

Beitrag von Danilo »

puretom hat geschrieben:Nicht nur deswegen, sondern auch weil seit einiger Zeit sowieso kein Feedback kommt
Im Moment wird da noch zu viel umgebaut, was soll man da Feedback geben,
wenn man schon weiss das Du es dann sowieso noch ändern musst? ;)

Beispiel: Am Anfang hattest Du Expressions direkt in der ersten Ebene des Parsers,
also wurde "1+2*5" korrekt erkannt und übersetzt. Am Ende hat dieser Code aber
alleinstehend keinen Sinn, da es kein Ziel für das Ergebnis gibt ("x = 1+2*5" wäre korrekt).
Von daher ersparte ich mir Feedback dazu, da ich wusste dass Du das eh noch ändern musst
und wirst.

Ich denke bisher, man könnte einige Sachen evtl. etwas umschreiben um sie lesbarer und leichter
verständlich zu machen. Im Moment habe ich nicht so viel Zeit einen kompletten Scanner und Parser
für Toy-C anders zu schreiben und aufzubauen (dauert 2-3 Tage), da ich mit anderen Aufträgen zu tun habe.
Würde mich zwar reizen, da mir so etwas mehr Spass macht, aber das Andere hat momentan Priorität.
Vielleicht also am Ende, wenn ich dann Zeit und Lust habe. Aufgeben ist die einfachste Variante,
also würde ich es besser finden, wenn Compiler und virtuelle Maschine benutzbar und brauchbar sind
und Du weiter machst wie bisher. Wenn es dann fertig ist treten nicht mehr so viele Änderungen auf und man kann
evtl. ein paar Dinge diskutieren oder alternative Wege aufzeigen.
Insgesamt ist das Tutorial aber eher für die Leute, die davon lernen wollen. Diese können vielleicht
Fragen haben, wenn sie am Ende etwas nicht verstehen, aber grossartiges Feedback in Form von
Hilfestellung werden sie Dir kaum geben können. Du bist der Lehrer, und Deine Schüler können kaum
mehr sagen als "Danke, bitte weiter so" - und das haben Einige schon getan, die nun weiter gespannt mitlesen.
Also enttäusche Deine Fans nicht und mach einfach weiter wie bisher... bis zum Ende dauert es bestimmt noch
ein paar Tage. ;)

Wen die Änderungen und zwischendrin-Formatierungen stören, der sollte es einfach ignorieren und abwarten
bis es dann fertig ist. Geduld üben ist auch eine interessante Aufgabe. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Tutorial - Compiler und Virtual Machine (nicht beschreib

Beitrag von Bisonte »

Danilo hat geschrieben:Geduld üben ist auch eine interessante Aufgabe. ;)
Wie wahr, wie wahr.... Also puretom : :praise: Weitermachen
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
puretom
Beiträge: 109
Registriert: 06.09.2013 22:02

Re: [Tutorial] Compiler und Virtual Machine

Beitrag von puretom »

Liebe Leute!

Zuerst: Danke für den Zuspruch! Danke euch allen wirklich für die Motivation!

Ich freue mich wirklich, wenn ich die Sache nicht umsonst mache, obwohl sie für sich schon Spaß macht.


@Danilo:
  • Danilo hat geschrieben:Ich denke bisher, man könnte einige Sachen evtl. etwas umschreiben um sie lesbarer und leichter
    verständlich zu machen.
    [...]
    Wenn es dann fertig ist treten nicht mehr so viele Änderungen auf und man kann
    evtl. ein paar Dinge diskutieren oder alternative Wege aufzeigen.
    Ich hoffe, dass ich die Sache jetzt nicht[...]
    Insgesamt ist das Tutorial aber eher für die Leute, die davon lernen wollen. Diese können vielleicht
    Fragen haben, wenn sie am Ende etwas nicht verstehen, aber grossartiges Feedback in Form von
    Hilfestellung werden sie Dir kaum geben können. Du bist der Lehrer, und Deine Schüler können kaum
    mehr sagen als "Danke, bitte weiter so" - und das haben Einige schon getan, die nun weiter gespannt mitlesen.
    Natürlich hast du vor allem mit deinen letzten Zeilen recht, sicherlich ist es für die Leser kaum bis gar nicht möglich, sinnvolles Feedback zu geben.

    Ich habe aber die Form eines Forums-Tutorials gewählt, weil ich mir natürlich menschlichen wie fachlichen Austausch und auch Anschluss an eine Gruppe ähnlich Interessierter erhofft habe, für mich übrigens ein Riesenschritt, ich habe weder eine private Mail noch gibt es mich in Facebook. Habe also die Sache mit dem sozialen Netzwerkzeugs immer verweigert.
    Doch irgendwie hatte ich plötzlich Lust, mich etwas mehr mit Menschen auszutauschen.
    Und jetzt sitze ich doch wieder im stillen Kämmerlein und schreibe meine Texte.
    Und das hat (@Mirca) nichts mit
    Mirca hat geschrieben: Warum fängst du mit "niemand magt mich - jeder ignoriert mich" wieder an?
    zu tun, sondern mit dem Ziel, das Tutorial im AUSTAUSCH mit anderen Menschen zu schreiben, sonst hätte ich es ja als Word zuhause machen können und auf der Platte herumliegen lassen können.

    Daher weht also der Wind bei mir, erhoffte mir fachliche Diskussionen, alternativen Input und neues Wissen und natürlich auch sozialen menschlichen Austausch.
    Nach dem Motto "Zeig ich dir meins, zeigst du mir deins" möchte ich von den Kollegen hier lernen und an Wissen alles erwerben, was es gibt.

    Und ich bin mir sicher, dass man einiges besser machen könnte als der für mich legendäre Jack Crenshaw, der für einen alten Mann wie mich :) immer noch Pascal-Gigant Niklaus Wirth und Varanese, die ja die Vorbilder für diese Scanner- und Compilertechnik sind, die ich mit eigenen Verfeinerungen und vor allem Vereinfachungen für das Tutorial wiederzugeben versuche.

    Nun! Du hast aber recht, was sollen die Leser schon groß schreiben, vor allem wenn das Zeug noch nicht fertig ist. Verstehe ich vollkommen. Das muss ich einsehen.

@alle:
  • Das mit der Formatiererei ist so ein Sache. Ich möchte meine Beweggründe erklären.

    Allen ist sicher schon aufgefallen, dass ich versuche, das irgendwie in Form eines echten Buches, also mit Kapiteln und Unterkapiteln und Teilen usw, aufzubauen, weil ich das - und für mich nur so - eben nicht chaotisch finde. Tut mir leid, wenn das jemanden nervt.
    Anders verliere ich aber den Überblick und wenn man ehrlich zu sich ist, ein solches Monsterprojekt muss gegliedert werden, wenn alles in einer Wurst (wie man bei uns sagt) ist, dann kennt sich niemand, nicht mal der Autor selbst :lol: , mehr aus

    Des Weiteren möchte ich BEWUSST NICHT wochen-, vielleicht monatelang mein Ding im stillen Kämmerlein durchziehen und dann das fertige Produkt posten. Da könnte ich ein PDF auf eine HP laden, und aus!
    Sondern es macht mir Spaß, euch den Erzeugungsprozess live mitmachen zu lassen, mit allen Irrtümern, Fehlern, Verbesserungen, WEIL ES MIR SO SPASS MACHT.
    Und gratis mache ich so eine Arbeit nicht! Der Preis: Spaß, Befriedigung, Austausch, schöne Stunden, was auch immer!
    Ich denke, es geht jedem hier so, dass er stolz ist, wenn andere sein Werk anerkennen, auch wenn man über Irrtümer, Bugs, Verbesserungsalternativen usw. diskutieren kann.

    Sollte das jemanden nerven und sogar verboten sein (Mirca meinte ja (allerdings in einem Posting, das nur kurz online war und dann wieder verschwand), man hätte mich woanders schon gebannt! Naiv-Modus an :oops: -> Warum eigentlich? ), dann ist vielleicht ein Forum nicht die richtige Plattform für so ein Projekt und man müsste es irgendwie anders machen. Das klingt jetzt naiv, ist aber für mich nicht so klar.

    Außerdem hatte ich den Eindruck, dass die Extremformatierungen usw. sich eigentlich nur auf den ersten Fehlversuch beschränken und ich mich im neuen Tutorial mehr dabei gebremst habe (Ich neige nämlich schon dazu, recht viel zu formatieren, obwohl gerade das Nachformatieren die so richtig zusätzliche Arbeit ist.) Darum verstehe ich die extreme Aggressivität nicht, die ich so in der Form eigentlich nicht erwartet hätte hier im Forum, aber ich will das nicht schon wieder beginnen, beenden wir das Streitthema endgültig, weil ich mehr Energien für das aufwenden muss als für das Tut-Schreiben, und jetzt ist's gut damit!


Ah! Fast vergessen, eine fachliche Sache noch (EINER DER GRÜNDE FÜR MEIN FORUMSENGAGEMENT, Streitereien sind nämlich Energieverschwendung):

@Nochmal Danilo:
  • Danilo hat geschrieben:Beispiel: Am Anfang hattest Du Expressions direkt in der ersten Ebene des Parsers,
    also wurde "1+2*5" korrekt erkannt und übersetzt. Am Ende hat dieser Code aber
    alleinstehend keinen Sinn, da es kein Ziel für das Ergebnis gibt ("x = 1+2*5" wäre korrekt).
    Ich meinte mit meinen Ausführungen eine reine Expression, also keine Zuweisung, wie z.B. in:

    Code: Alles auswählen

    if_statement = "if" "(" expression ")"  statement ;
    while_statement = "while" "(" expression ")" statement;
    u.s.w.
    
    Ich weiß, manche unterscheiden hier noch Condition() (oder so), aber da ich mixed Operations wie in C erlaube, kann jede Expression eben ohne Ziel in einer Bedingung (Condition) stehen.
    Das Ziel ist also da, aber es ist sozusagen der Top of Stack, d.h. am TOS liegt dann das Ergebnis der Expression für die Weiterverarbeitung durch einen Condition-Test und nicht durch Pullen in eine Variable:

    Code: Alles auswählen

    Source:
    
    if ( b < 2 ) print(b)
    
    
    ASM-Code:
    
       ipushg b  // natürlich der Index der Variable
       ipushc 2
       ilt       // CONDITION-TEST statt z.B. "ipullg x"
                 // kleiner als (lt=lower than) - Ergebnis der 
                 // Expression (true oder false) liegt danach am Stack
       
       JF LABEL  // überspringe True-Teil, wenn "b<2" falsch war
                 // jf=Jump if False     
       
       ipushg b  // TRUE-TEIL:
       print     //   print(b)
    
    [LABEL]      // FALSE-TEIL
    
    Die Expression hat also als implizites Ziel einen Condition-Test statt einer Variablen.
    Das ist im Tut nicht rübergekommen, was ich da erklären wollte?
So! Ein etwas langes Posting :oops: !

LG Puretom
Windows 7 und Windows 10 (Laptop), PB 5.62 | Projekt: Tutorial - Compiler und Virtual Machine | vielleicht einmal ein Old School Text-Adventure Tutorial | Neu: Spielereien, Üben rund um OOP in PB
puretom
Beiträge: 109
Registriert: 06.09.2013 22:02

Re: [Tutorial] Compiler und Virtual Machine

Beitrag von puretom »

So! Jetzt würde ich eure Hilfe gebrauchen können!

Bin gerade dabei, die Virtual Machine zu erstellen.

Ich möchte diesmal etwas Neues ausprobieren und alles in einen Memorybereich laden und dann mittels eines Program Counters (PC) wie ein echter PC ansprechen.

In meinen anderen VMs (ist ja nicht meine erste :wink: ) hatte ich alles in einem Array mit Strukturen usw., die ich dann mit dem PC durchgewandert bin.
Hat auch sehr gut funktioniert.
Mit der Direkt-Memory-Methode lässt sich aber das EXE schnell und direkt laden, ohne eine Loader-Prozedur, die mir das Programm aufteilt in Code-Bereich, String-Konstanten-Pool, Parameterunterscheidung in Struktur usw., was Arbeit ist und auch seine Zeit braucht.


Ich möchte also im Prinzip gerne bei dieser Umsetzungsart bleiben (abgesehen von einer Sprungleiste mit ASM am Ende für den Speed statt der Select-Case-Struktur, aber darum geht es jetzt mal nicht).
  • Ich frage mich, ob die Sache mit Memory überhaupt schneller ist als High-Level-Datentypen und -strukturen (insb. strukturierte Arrays)?

Ich bin außerdem ein ganz schlechter "Pointerer"! Bin eher so der typische High-Level-Basic-Typ, der mit Pointern sehr sparsam umgeht, vor allem auch mangels eigenen Könnens in diesem Bereich.

Hier ein Schnippsel meiner Fetch-Execute-Schleife der VM:

Code: Alles auswählen

      While ( Opcode <> #end )      
    
          
          Select Opcode
          
          
          Case #spushc              
              
              *PC+4                     ; PC auf String-Länge       
              sLen=*PC\l                ;      - holen
              *PC+4                     ; PC auf String
              sPara.s = PeekS(*PC,sLen) ;      - holen
              sPush(sPara)              ; String auf Operanden-Stack
              *PC+sLen-4                ; PC auf nächsten Opcode
 

          Case #lprint
          
              sPull(sPara.s)            ; String vom Operanden-Stack
              Print(sPara)              ; Ausgabe in Konsole


          Case #nprint
              sPull(sPara.s)
              PrintN(sPara)           


          EndSelect         
             
          
        ; PC + 4
          *PC + 4  
          
        ; hole nächsten Opcode 
          Opcode = *PC\l
          
      Wend
Kurze Erklärung:

Der Standardbefehl ist ein Long, das muss nicht so bleiben (wird ev. Unicode oder gar nur ein unsigned Byte aka. Ascii), aber darum geht es nicht, soll nur die *PC+4 erklären.

Nehmen wir den Opcode #spushc:

Code: Alles auswählen

Der liegt so im Speicher:

spush "Hallo Welt"

01 00 00 00         0B 00 00 00         48 61 6C 6C 6F 20 57 65 6C 74 21
'---------'         '---------'          H  a  l  l  o     W  e  l  t  !
 = 1            = Länge des Strings
 = Opcode:      = 11 Zeichen
   spushc   

  • Den Opcode hole ich mit: Opcode = *PC\l
  • Die Länge des Strings hole ich mit: *PC+4: sLen=*PC\l
  • Den String selbst mit: *PC+4: sPara.s = PeekS(*PC,sLen)
Die Sache funktioniert. Ich habe schon eine Ausgabe des Textes auf Konsole korrekt erreicht.

Also meine Frage:
  • Ist das sehr umständlich mit den Pointern?
  • Alternative zu PeekS() ? Ganz wichtige Frage für mich!
  • Gibt es da überhaupt bessere Varianten, die aber für das Tut nicht zu unübersichtlich werden?
  • Meine Pointersache, ist die überhaupt korrekt so ? Ich bin bei Pointern immer unsicher.

Danke!

LG Puretom
Zuletzt geändert von puretom am 21.10.2013 20:29, insgesamt 2-mal geändert.
Windows 7 und Windows 10 (Laptop), PB 5.62 | Projekt: Tutorial - Compiler und Virtual Machine | vielleicht einmal ein Old School Text-Adventure Tutorial | Neu: Spielereien, Üben rund um OOP in PB
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: [Tutorial] Compiler und Virtual Machine

Beitrag von ts-soft »

puretom hat geschrieben:[*]Alternative zu PeekS() ????? Ganz wichtige Frage für mich!!!!
Da Deine Strings nicht nullterminiert sind, werden die "normalen" Alternativen nicht funktionieren,
da diese keine Längenangabe verarbeiten.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten