Hi,
[Ja verdammt. Jetzt haben gehtnix und ich anscheinend fast gleichzeitig einen Beitrag geschrieben, habe meinen abgesandt, und er war weg! Jetzt kann ich das nochmal tippen. Ist so ein Problem bekannt?]
wow, wow und nochmals wow! Hatte leider in den letzten Tagen extrem wenig Zeit, habe aber trotzdem ganz begeistert verfolgt, was rudi hier macht!
Zunächst zur früheren Frage von gehtnix:
- Code: Alles auswählen
if a then
Ist das ein Tippfehler oder geht das wirklich? Im Java-Tool bleibt das da hängen.
Wie rudi schon schrieb, ist das syntaktisch korrekt so und funktioniert auch. (Auch in UBDebug. Bist du sicher, dass das bei dir einen Fehler macht?)
Der Interpreter wertet jede Zahl = 0 als false und jede Zahl <> 0 als true. Das ist korrekt und auch so dokumentiert.
Und das Ergebnis jeder relationalen oder logischen Operation wird als 0 (für false) oder 1 (für true) zurückgegeben.
Folgendes funktioniert also zum Beispiel:
- Code: Alles auswählen
a = 0
b = 1
if a then print "a is true"
if b then print "b is true"
a = 1>2
b = 1<2
print a, b
print 1>2, 1<2
und liefert folgenden Output:
b is true
0 1
0 1
Der Fehler, den es in diesem Zusammenhang gibt, betrifft
nur die Priorität der Auswertung von Ausdrücken. (Nicht klar, ob das wirklich streng ein "Fehler" ist, da es wahrsch. nirgends dokumentiert ist, wie es sich verhalten sollte. Aber es ist zumindest unerwartet.):
Der Ausdruck (6-3)>2 wird korrekt ausgewertet in der Reihenfolge (6-3)=3 und 3>2 und liefert also korrekt 1 (= true) zurück.
Der Ausdruck 6-3>2 wird falsch (unerwartet) ausgewertet in der Reihenfolge 3>2=1 (= true) und 6-1 und liefert also 5 zurück. (Was vielleicht nicht auffällt, da ebenfalls true! Aber mit anderen Zahlen wie z.B. (6-6)>2 und 6-6>2 wird false (korrekt) und true (falsch) geliefert.)
Soweit also alles ganz klar. Das hat m.W. mit dem "IF-Bug" (bzw. den "IF-Bugs") gar nichts zu tun! Die Lösung ist auch ganz einfach, weil es genügt, halt die Klammern zu setzen.
Jetzt aber zum eigentlichen Thema, dem IF-Bug:
Eigentlich hatte ich ja nur erhofft, dass es uns gelänge, Klarheit (in Form von hoffentlich ein paar ganz wenigen Regeln) zu schaffen, was "verboten" ist und was nicht, um den/die Bug(s) zu umschiffen. Das war mein Ansatz zu Beginn. (Den ich aus Zeitgründen leider nicht mehr fortsetzen konnte bisher.)
Aber falls es Hoffnung gibt, den Fehler zu beheben, wäre das natürlich
viel besser! Ist es denn denkbar, dass so ein gefixter Code von rudi bald ins offizielle Build aufgenommen würde?
Kann selber leider hier nichts beitragen, würde mich aber schon gerne zum Testen anbieten, wenn es Sinn macht. (Benötigte dann ein Build für die A620.)
Noch schöner (weil viel bequemer) wäre es natürlich, wenn man Dave Mitchell, den Autor von UBDebug, überreden könnte, sein Tool testhalber mit der korrigierten uBasic Variante zu kompilieren. (Bin aber nicht sicher, ob die DLL und die Java-Lib, die er benutzt, von ihm selber erzeugt wurden.) Zumindest was den kürzlichen gosub..return Bug anbelangte, war er ja sehr kooperativ und fix!