Archiv der Kategorie: Coding

Dev: Kenne deinen Code oder zumindest Teile davon – Die Suchfunktion dein Freund und Helfer (8Bit+)

„Coden“ war oft ein Navigieren in einem stetig wachsenden und komplexer werdenden Source-Code. Der Code war mehr oder minder ein Plaintext. Meist die einzige Möglichkeit nicht muehsam scrollen zu muessen (Scrollen per Mouse war anfangs nicht vorhanden und ist sehr ineffizient bei viel Code), sondern direkt hinzuspringen war die Suche. Was kann man suchen?

– Sprungmarken oder Funktionen (was in Assembler dasselbe ist)
– Variablen-Namen
– Spezieller Code
– Kommentare

Das war und ist egal ob es Spaghetti-Code war oder nicht.

// Code completion war selbstverständlich auch nicht vorhanden.

Assembler (Bsp: 6502): JMP, BNE, BCS, BCC etc.

Der Control-Flow von 6502-Assembler (und viele andere auch) besteht letztlich aus JMPs und Register-abhängigen Branches (Vorgelagerte Vergleiche und implizite Vergleiche (INC,DEC) etc. Dadurch werden komplexeste Abfragen und Spruenge möglich (vgl. GOTO-Befehl in BASIC), die so gar nicht mehr heutigen vorallem Tree-basierten Ideen von Programmiersprachen entsprechen (vgl. C-ähnliche Sprachen). Die meisten Hochsprachen haben die Sprungbefehle abgeschafft und damit die Programme les- und beherrschbarer gemacht. Zum selben Problem gehören natuerlich auch die Sprungmarken. So muss im Assembler-Universum fuer jeden Sprung, Vergleich ein eineindeutiger Namen gefunden werden. An und fuer sich schon eine haessliche Sache, da interaktive digitale Welten von Vergleichen (If-Statements, For-Next, Loops) leben. (Selbstverständlich können moderne Assembler auch relative Sprungmarken verarbeiten wie etwa der KickAssembler – Nachfolgendes Beispiel).

Anders gesagt, die Möglichkeit zu Springen erweitert das Mögliche enorm und macht die Fehlersuche auch wiederum ungemein anspruchsvoll. Dennoch muss gesagt werden, dass Assembler Source-Code mehr nach einem Rhizom aussieht (einem Hin- und Her, einem Nutzen von Code mehrfach), als die linearsierte Form von Hochsprachen später.

Das Bild zeigt nicht unbedingt, was im Text diskutiert wird. Allerdings ist es hier auch möglich etwas nach comment_show zu springen, obwohl es linear gar nicht ausgefuehrt werden kann.

Assembler (C64): Fehler, Rumprobieren, Analyse, Konzeptfehler, neu anfangen?

Warum nur kopiert es die Color- und die Multicolorfarben nicht richtig rein in die entsprechenden Speicherbereiche?

Coding in Assembler ist Hardcore-Arbeit (vergleichbar mit Brainfuck-Coding). Beim Coden entsteht ein Konstrukt, das ausgeführt wird und etwas tut. Tut es das Richtige? All das ist in Assembler noch eine Runde schwieriger, da der Output nicht so simple ist, da die Möglichkeiten klar sind und Heisenbergsche Fehler (Unscharfe Fehler) gerade im unendlich oft vorkommen.

Fail

Funktioniert etwas nicht, probiert man rum, versucht es systematisch mit Ausgaben, Annahmen, Analysen.

Ist alles wie es sollte vom Code her?
Im Code gibt es keine Probleme? Und doch funktioniert es nicht?
Ist es ein Modellfehler? Funktioniert die Grafikrepräsentation anders? Habe ich falsche Vorstellung von der Sprache? Der Maschine?
Gibt es einen Konzeptfehler?
Ein Problem mit überschriebenen Registern? Soll ich neu anfangen?

Die Unsicherheiten mit Assembler – obwohl im Einzelnen so klar – sind gross. Und ja Brainfuck funktioniert tatsächlich ähnlich.