Kurzvorstellung neue Version BonnyDOS/286

  • Na ja, war ja auch nur ein Vorschlag. Das Grundproblem bleibt aber, daß der Mensch da zwei unterschiedliche Dinge mit einem Symbol versieht, was aber so ein Compiler nicht gut differenziert bekommt. ( Zuweisung vs Vergleich )
    Und ":=" ist doch zumindest in DLand bei den ganzen alten TurboPascal-Recken bestens etabliert.


    ( ich setz jetzt mal noch einen drauf ... ;) ... das coole an "?=" ist nämlich, daß da im Symbol noch Platz für eine Vergleichsrichtung ist. Keine Ahung ob man sowas für irgendwas braucht, aber oft hat man ja bei Vergleichen die Vorstellung von einem Wert, den man in Bezug zu was anderem setzt, was man daraufhin untersucht inwieweit das zu Vergleichende zum Ersten paßt ( ob es größer oder kleiner oder schwerer oder bunter ist ). Da heißt der Verglich hat, zumindest oft, in unserer Vorstellung eine Richtung. Und genau das könnte ein "?=" abbilden; wenn man es umkeht schreibt man einfach "=?" und vergleicht damit "andersherum".
    OK. Dürft ihr wieder vergessen. Ziemlich unausgegorener Unfug und im allgemeinen unnötig - aber eben eigentlich nicht in Computersprachen aus der üblichen Riege (C, Pascal, Basic) abbildbar. )


    Ich fand das ":=" / "=" System von Pascal immer ziemlich eingängig , dagegen das "=" / "==" C Geschreibsel leicht eigenartig. Richtig gut fände ich halt eine Version, wo das "=" gar nicht mehr für Verwirrung sorgt - darum der Vorschlag ":=" / "==" oder alternativ ":=" / "?=". Die Noatation ist dabei eigentlich egal, nur das Problem der Uneindeutigkeit sollte behoben werden. ( OK - mit LET bekommt man das auch hin, aber das ist halt so "uralt" und bißchen Weiterentwicklung schadet ja nix, gerade wenn's jemand quasi komplett neu aufbaut. )

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Sehr interessante Anmerkungen, vielen Dank dafür. Also LET kann ich auch nicht mehr wirklich sehen


    Edit: Menno. Wieder der Text weg. Ivh antworte nachher nochmal, wenn ich am Computer bsitze. Handy idt mist. Der überträgt nicht den ganzen Text...

  • Hmm ... eine Uneindeutigkeit des = kann ich erstmal nicht nachvollziehen.
    Kannst Du das nochmal erläutern?


    Ich kanns probieren.


    Der Rechner hat zwei unterschiedliche Sachen, die er machen kann, wenn wir ein "=" aufschreiben würden. Uns ist i.a. völlig klar, was in der jeweiligen Situation gemeint ist. Dem Compiler nicht, der kann probieren, das rauszubekommen, indem er das "Umfeld des Kommandos" berücksichtigt, was aber mit Unsicherheiten versehen ist - oder Variante 2, man schreibt es ihm halt einfach dazu, was gemeint ist. ( Wie man das macht ist eben genau das Problem, wo sowas lesbarer Code wird oder komisch aussieht. )


    Die zwei Fälle sind:
    1.) "Variable% = Wert" , also z.B. A%=23 . Da soll der Computer einen freien Speicherplatz suchen, den für später freihalten und merken, damit er den Variableninhalt wiederfindet und den Wert 23 in die Speicherzelle schreiben. Dagegen Fall
    2.) "Variable% = Wert" in einem Vergleich ( Merke: Gleiche Schreibweise!) , also z.B. IF A%=23 THEN Counter%=Counter%-1 ; hier soll der Computer schauen, ob der Wert der Variablen A% übereinstimmt mit der 23, die der zu vergleichende Wert ist.


    In Fall 1.) Kommt da sowas raus wie ( LDA #$23 ; STA $2000 ; weiter)
    In Fall 2.) ( CMP #$23 ; BEQ Label_Treffer_A_ist_genau_23 ; weiter )




    Wozu ist das noch gut - oder anders gefragt : Warum kein LET ? Man kann dann Zuweisungen schön in Klammern machen und so Konstrukte schreiben wie
    DO Countervariable% UPTO ( Maximalwert% := 23 ) ... LOOP


    Da hast Du jetzt quasi alles mit drin. Die Zuweisung in der Klammer und dann innerhalb der Schleife bei jedem Schleifendurchlauf einen ( impliziten ) Vergleich von ( Countervariable% = Maximalwert% ) ? , wenn ja Schleife zu Ende.


    Mit LET würde sowas so aussehen
    DO Countervariable% UPTO ( LET Maximalwert% = 23 ) ... LOOP

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Uneindeutig wäre es bei


    a=5
    a=5 goto hallo


    Aber deswegen fängt ein Vergleich mit IF an. Oder verstehe ich jetzt was falsch? Der Compiler soll zu später LET anspringen wenn er sonst nichts erkennt. Das sollte zumindest LET überflüssig machen.


    So, nachher kommt dann die ausführliche Antwort

  • Das LET braucht man nicht. Ein lexikalischer Parser mit vorgebener Semantik schafft es mit Leichtigkeit, bei vorangestelltem IF ein Vergleich von einer Zuweisung zu unterscheiden.
    Kauft Euch mal das wirklich gute Buch "Compilerbau" von Nikolaus Wirth (da ist in der ersten Auflage ein kleiner PASCAL Compiler im Source drin, in der letzten Auflage ist das ein Oberon Compiler geworden). Der Herr Wirth hat seine Programmiersprachen in Baccus-Naur-Form (BNF) oder in erweiterter BNF dargestellt, das kann man recht leicht in 1:1 für einen Compiler (aber auch für ein Interpreter) umsetzen.

    "The biggest communication problem is we do not listen to understand. We listen to reply." - Stephen Covey


    Webseite und Blog ist immer noch - seit fast 20 Jahren - online.

  • Ich versuche gerade, dass der Compiler das LET automatisch ausführt, wenn er sonst keine Anweisung erkennt. Fehlt das typische Variablen-Kennzeichen, das "=" oder sonst etwas, gibt es halt einen Fehler. :)


    Noch etwas zu INC und DEC aus dem BDOS-Handbuch: Die Befehle ADD/SUB usw. sind nichts anderes als entprechende CPU-Befehle, daher liefern die auch die entsprechenden Ergebnisse.
    Soll heißen: Ist eine ENV-Var = 65535 und man führt ein INC aus, dann kommt 0 heraus, beim nächsten INC eine 1 usw. gleiches gilt auch für DEC (nach 0 kommt 65535, dann 65534 usw.).
    Gleiches gilt natürlich für ADD/SUB usw. Es sind vorzeichenlose Integer (Words).


    Das mit dem Passwort kann ich ja noch ändern. Das mit den Zahlen hat sich einfach so ergeben und nachdem man das Passwort normal gar nicht braucht (außer man versieht Dateien/Ordner mit dem Admin-Attribut), habe ich da nicht lange überlegt :)

  • INC / DEC - wenns so funktioniert, ist es quasi "üblich" und sicher gut wie es ist.


    Das Testen auf LET würde man sich mit einem definierten Zuweisungssymbol eben komplett sparen. Und den Test auf IF ist genau das was ich mit "... indem er das "Umfeld des Kommandos" berücksichtigt, ..." gemeint hatte. Beides wird schlicht unnötig, wenn es schon per Symbol klar ist, was gemeint ist. Hauptvorteil ist aber erstmal nur das vereinfachte Lesen. ( das Codeparsen vereinfacht es aber auch )


    Und noch was Lustiges, was vielleicht Sinn macht, da Du ja anscheinend auch kleine kurze Assemblerstückchen schreibst für Befehle - guck Dir mal das Konzept von TAOS an ( war um die Jahrtausendwende herum mal angedacht als nächste Iteration des Amiga OS anzutreten, hat aber nicht geklappt ). Da gibt es so eine sehr interessante und flexible Trennung zwischen Befehl und letztlich ausgeführtem Code.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries