Seite 3 von 3

Verfasst: 16.04.2008 21:02
von Hroudtwolf
Naja. Du machst mir hier gerade echt denn Eindruck als dürfe man dein Werklein nicht kritisieren.
Ich mach dir einen Vorschlag... Publiziere nichts mehr. Dann kommt auch keine Kritik ;-)
Aber mehr als "nicht exakt definiert" sagts mir auch nicht.
Die andern Buchstaben stehen nicht in deinem Alphabet?

MfG

Wolf

Verfasst: 16.04.2008 21:05
von X0r
>Naja. Du machst mir hier gerade echt denn Eindruck als dürfe man dein Werklein nicht kritisieren.

Was hats damit zu tun? Das wir uns beide nicht verstehen, sollte dir ja klar sein. Ich habe wenig Lust mir solche Sachen anzuhören: http://www.purebasic.fr/german/viewtopi ... 799#174799
(Und ja, ich befürchte, dass das ganze hier wieder auf die selbe Sache hinausläuft. Und dass, lieber hroudtwolf, hat nix mit Kritik zu tun.)

Verfasst: 16.04.2008 21:11
von Hroudtwolf
Ich verstehe nur dass du keine Kritik erträgst.
Darf der grosse Xor nicht kritisiert werden?

Du solltest 2 Schritte zurücktreten.
Immerhin habe ich mich mit deinem Interpreter auseinandergesetz und war ERST erstaunt über die Leistung und musste DANN feststellen was wirklich Sache ist.
Ich war zunächst also erstmal positiv gegenüber deinem Werk eingestellt.
Was kann ich dafür wenn es hinten und vorne nicht funktioniert.
Wenn du deine Werke veröffentlichst welche noch nicht ausgereift sind (um das mit sanfteren Worten zu sagen) musst du mit Kritik rechnen.
Ob dir das passt oder nicht.
Das muss jeder von uns ertragen.
Ich hab das schon 2000x ertragen müssen und lebe noch.

Und nimm doch endlich mal was an was man dir rät.
Dein Abgetue macht dich letztlich nämlich nicht schlauer.

MfG

Wolf

Verfasst: 16.04.2008 21:40
von X0r
Nö wieso, ich kann damit leben. Ich weiß, dass es noch ziemlich unfertig ist(Nach Wikipedia also eine "Pre-Alpha"). Ich hab mich damit jetzt auch nicht Wochen beschäftigt. Ist für mich auch nix besonderes. Sieh es als ein Endprodukt meiner "Langeweile" an. Ich werds vielleicht auch garnicht verbessern, wer weiß. Vielleicht lass ichs so rumgammeln.

>Ich verstehe nur dass du keine Kritik erträgst.
Dann verstehst du alles falsch. Hab ich irgendwo gesagt, dass du es besser machen sollst oder irgendwas in dieser Art, was dann auch tatsächlich darauf schließen lassen würde, dass ich keine Kritik akzeptiere? Nur wegen diesem "Wiki-Gelächter"? Das war nicht so ernst gemeint(Smily wurde bewusst eingesetzt!). Aber gut, nun weiß ich ja, was eine Beta tatsächlich ist, auch wenn es keine Def. gibt.

>Darf der grosse Xor nicht kritisiert werden?
Wer isn das? Kenn ich garnicht. :lol:

Verfasst: 16.04.2008 23:27
von STARGÅTE
ich muss noch mal dazwischen schreiben:

Auch Terme werden komplett zerlegt oder ?

also bei:

Code: Alles auswählen

VAR = 1+2*3-4/5
wird zu:

Code: Alles auswählen

1: SET $1 ?2
2: SUB ?3 ?5
3: ADD #1 ?4
4: MUL #2 #3
5: DIV #4 #5
(wobei hier sympolisch ? ein Zeiger ist, # eine Konstante, und $ eine Variable)

Sagt mir bitte wenn euch diese Fragen lächerlich vorkommen, aber ich habe halt mcih noch nie mit diesem Gebiet befasst, möchte nun aber mal ein bisschen experimentieren.

Verfasst: 17.04.2008 09:18
von ZeHa
Ja, das wird alles zerlegt, weil sich solche kleinen elementaren Operationen einfach sehr fix erledigen lassen. Wenn Du den Term nämlich live erst noch auseinanderpfrimeln mußt, dauert das natürlich sehr viel länger. Daher wird der Bytecode so aufgebaut, daß Dein Interpreter im Grunde nichts "denken" muß, er muß einfach nur "machen": Einen Opcode einlesen, und danach sofort wissen, wie viele von den nachfolgenden Bytes er lesen muß und was er mit denen dann anfangen soll.

(Die Fragen sind auch nicht lächerlich, wenn Du bisher noch nie mit Assembler oder so zu tun hattest, dann ist das völlig verständlich, daß das eine "neue Welt" für Dich ist)

Dein kleines Beispiel ist jetzt supoptimal, da es hier eh nur Konstanten gibt. Sowas würde beim Kompilieren natürlich sofort in eine einzige Konstante verwandelt :)

Nehmen wir mal sowas hier:

Code: Alles auswählen

VAR1 = 20
VAR2 = 37 + VAR1 * 5
Das könnte dann z.B. erstmal so aussehen:

Code: Alles auswählen

SET ?VAR1 20
SET ?VAR2 37
SET REG1 ?VAR1
MUL REG1 5
ADD ?VAR2 REG1
REG1 entspräche jetzt z.B. einer Art Register.
Die Variablennamen stehen, wie Du siehst, auch noch drin, aber diese würdest Du dann später durch absolute Adressen ersetzen.

Hier ist jetzt übrigens auch ein gutes Beispiel für verschiedene Opcodes dabei: Sagen wir mal, Dein virtueller Prozessor hat nur 4 Register, REG1-4 also, dann könntest Du für "MUL mit einem Register" 4 Opcodes einführen, z.B. 40 für MUL mit REG1, 41 für MUL mit REG2, usw., somit würdest Du wieder einen Parameter sparen und müßtest beim Ausführen das Register nicht erst auslesen. Du brauchst natürlich dann noch mindestens einen 5. Opcode für "MUL mit Adresse", dort werden dann natürlich 2 Parameter hinter den Opcode gesetzt.

Am sinnvollsten ist es wohl, das Skript erstmal in solch einen Klartext-Assembler-Code zu übersetzen (wo dann auch z.B. MUL REG1 5 steht), welcher dann in einem zweiten Schritt endgültig in den Bytecode übersetzt wird (dort kann dann ein MUL REG1 5 zu einem MULREG1 5 werden, also 1 Opcode-Byte und ein Parameter).


Du solltest Dir echt mal den Java-Bytecode anschauen, der ist ja nicht für einen echten Prozessor gemacht sondern für einen virtuellen, daher ist der sicherlich auch etwas anders aufgebaut als x86-Maschinencode. Vielleicht hilft Dir das, was eigenes zu entwerfen. Anfangs kann es ja auch noch simpel und straightforward sein, später kannst Du es ja immernoch komplexer und optimierter machen.

Verfasst: 17.04.2008 10:38
von STARGÅTE
jo thx ZeHa, habe auch schon mit Nic per PN weiter geschrieben.

Inzwischen funzt mein ByteCode schon recht gut, und ich muss eingestehen, das es im Endeffekt wirklich viel einfacher zu Handhaben ist, als ohne ByteCode. Ich sage das jetzt, weil ich es ja damals ohne versuchen wollte.

Werde vllt mal in den nächsten Wochen, mein Ergebnis präsentieren.

Verfasst: 24.04.2008 14:54
von X0r
Ok, ich hab jetzt mal wolfs Vorschlag angenommen und FScript etwas verbessert.

Hab jetzt ne Fehlerausgabe integriert. Die erfolgt (erstmal) mit einer MessageBox. Fertig ist das ganze natürlich noch nicht. Es werden noch nicht alle Fehler erkannt. Alle Bugs diesbezüglich bitte melden!

Außerdem sind jetzt statt einfach nur $var++;|$var--; auch komplexere Operationen verfügbar:

Code: Alles auswählen

$var=2*(2+2);
Download: http://members.forgesoft.net/Soner/FScript.zip

Verfasst: 24.04.2008 15:04
von STARGÅTE
das erste und dritte Beispiel funzt nicht. da kommt ein ERROR

EDIT. und Syntaxerror bei Vorzeichen:

Code: Alles auswählen

decl var;
$var=(-2)*2;
Debug($var);