fOi=1to1024:?cH(205.5+rN(1));:nE

Als John G. Kemeny und Thomas E. Kurtz ihre Programmiersprache BASIC 1964 aus der Taufe hoben, war eines ihrer Ziele, den Befehls- und Funktionsumfang der Sprache so übersichtlich zu halten, dass die Lernenden diesen von Woche zu Woche im Kopf behalten konnten. Das führte dazu, dass das erste Dartmouth-BASIC aus nur 15 „Statements“ und acht mathematischen Funktionen bestand. Dass die Befehle zumeist aus englischen Wörtern bestanden, unterstützte diesen Anspruch auf Lern- und Merkbarkeit. Aber wie auch bei geschriebenen natürlichen Sprachen wurden häufig genutzte BASIC-Befehle bald abgekürzt, um Tippzeit zu sparen. Ganz gegen den Sinn ihrer Erfinder etablierten sich für unterschiedliche BASIC-Dialekte bald verschiedene Abkürzungssysteme, die teilweise aus den gesprochenen Sprachen übernommen wurden. Sie werden im Folgenden vorgestellt.

(zuerst erschienen in RETURN Nr. 55, 2023)

Es mag eine Kombination aus der angenommenen Schreibfaulheit der künftigen Nutzer und ihrer knappen Ressourcen (wozu nicht nur der Speicher, sondern auch die [Ab-]Tippzeit gehört) gewesen sein, die die BASIC-Entwickler Anfang der 1970er Jahre dazu bewogen hat, ihren Dialekten als Alternative zum Befehlswort PRINT das Fragezeichen (?) anbei zu stellen. Die Wahl dieses Zeichens mag auch den Hintergedanken gehabt haben, dass man mit dem ? wie bei einem Tischrechner schnelle arithmetische Anfragen an den BASIC-Interpreter stellen könnte: „Wie viel ist 173 multipliziert mit 25 dividiert durch 6?“ würde dann zu ?173*25/6. Für die Faulheitshypothese spricht auch, dass etwa zeitgleich das Befehlswort LET, mit dem in BASIC von Beginn an Variablenwerte zugewiesen werden, bei den meisten Dialekten nun weggelassen werden konnte. Ebenfalls optional wurde der Befehl END, der bei jedem BASIC-Programm zuvor notwendig am Schluss stehen musste – Entwicklungen, ganz zum Missfallen der BASIC-Erfinder Kurtz und Kemeny. Sie machten BASIC-Programme zu unstrukturiertem Spaghetticode, was die beiden Entwickler später als „Street BASIC“ kritisierten.

Die Abkürzung von PRINT durch „?“, REM durch „’“ sowie das Fortlassen von LET und END haben ihr Echo in der Homecomputer-Zeit gefunden. Zahlreiche BASIC-Dialekte unterschiedlicher Hersteller haben nicht nur diese Abkürzungen übernommen, wobei PRINT und REM zeitweise auch durch andere Zeichen abgekürzt werden konnten – PRINT mit „#“ beim Maxi-BASIC der Digital Group und REM durch „!“ beim BASIC-Plus für PDP-11 und später beim KC-85/1 – sie haben auch weitere Abkürzungen eingeführt, die auf unterschiedlichen Prinzipien basieren. Solche Abkürzungen müssen, um brauchbar zu sein, zwei Bedingungen erfüllen: Sie sollten eine echte Zeitersparnis beim Schreiben/Tippen bringen und trotzdem „verständlich“ sein. Letzteres wird dadurch erreicht, dass die Abkürzung möglichst ohne Hilfe zurück zum ungekürzten Begriff führt und umgekehrt der ungekürzte Begriff eine bestimmte Abkürzung nahelegt. Dieses Prinzip nennt man Mnemotechnik.

Gedächtniskunst

Die Mnemotechnik stammt vom altgriechischen Wort für „Gedächtniskunst“ (mneme und techne) und beschreibt eine seit dem 6. Jahrhundert vor unserer Zeitrechnung bekannte Methode zur Verbesserung der Gedächtnisleistung. Hierzu werden „Eselsbrücken“ zwischen dem, was gemerkt werden soll, und dem, was man sich hierfür merken muss, gebaut. Dies kann auf unterschiedliche Weise erreicht werden – etwa dadurch, dass man aus einer zu lernenden Phrase ein Akronym bildet: BASIC ist das Akronym für „Beginner’s All-purpose Symbolic Instruction Code“. Weil BASIC zugleich auch eine Bedeutung als Wort besitzt (engl. basic = einfach), lässt sich leicht eine Beziehung zwischen dem Merkwort und seiner Bedeutung herstellen.

Dieses mnemonische Prinzip bildet die Grundlage der Programmiersprachenentwicklung von Beginn an. Alle Programmiersprachen, die „oberhalb“ der Maschinensprache (die nur aus Dualzahlenketten oder binären Schaltprozessen besteht) residieren, stellen solche „Merkhilfen“ dar, weil sie die schwer memorierbare Sprache der Maschine durch den Einsatz von lesbaren und merkbaren Befehlswörtern für Menschen lernbar(er) gestaltet. Die ersten höheren Programmiersprachen waren Assembler; sie boten den Programmierern „Mnemonics“ anstelle der langen Ketten von Nullen und Einsen (oder Schalterstellungen) zur Programmierung an. Eine Maschinenfunktion (und manchmal auch verschiedene Maschinenfunktionen einer zusammengehörigen Gruppe) wird dafür in einem Kurzwort zusammengefasst. Das Mnemonic ADD bedeutet in vielen Assemblersprachen zum Beispiel „addiere“. Woher der Computer die zu addierenden Daten (Zahlen) bezieht, ob die Addition mit oder ohne Registrierung eines Übertrags, unter Berücksichtigung von Vorzeichen usw. stattfinden soll oder wohin das Ergebnis gespeichert werden soll, ist in den einzelnen Opcodes (den Maschinenbefehlen), die sich hinter dem Mnemonic ADD verbergen, definiert und muss den Programmierer oft nicht kümmern. Das Übersetzerprogramm (das bei Assemblersprachen „Assemblierer“ heißt) übersetzt ADD automatisch in den benötigten Opcode.

Tokens

Diesem Prinzip folgt jede höhere Programmiersprache – auch BASIC. Hinter jedem BASIC-Befehl steht eine umfangreiche Maschinenspracheroutine, die ihn ausführt. Beim Befehl PRINT wird leicht ersichtlich, wie umfangreich diese Routine beschaffen sein muss, vergegenwärtigt man sich, welche Attribute man dem Befehl hinzufügen kann. Damit der BASIC-Interpreter die richtige Routine und ihre Subroutinen auswählt, findet bei der Übersetzung eines BASIC-Befehls zunächst dessen Umkodierung in ein Token statt. Das ist eine Zahl, die intern bei der Ausführung des Befehls verwendet wird, um die korrekten Funktionen aufzurufen. BASIC ist also auch in dieser Hinsicht den Assemblersprachen nicht unähnlich. Vielleicht hat diese Ähnlichkeit dazu geführt, dass Abkürzungen sowohl bei den Entwicklern der Dialekte als auch bei ihren Nutzern als sinnvoll erachtet wurden. Bei der Übersetzung dieser abgekürzten BASIC-Befehle muss der Interpreter die Abkürzungen denselben Token zuweisen wie dem ursprünglichen Befehl. Die Abkürzungen müssen deshalb ebenfalls „tokenisiert“ sein, das heißt: immer dieselben sein. In manchen Dialekten genügt es, dass die ersten zwei bis drei Buchstaben eines Befehls oder seiner Abkürzung aufgeführt werden, damit die Übersetzung korrekt erfolgt. So ist es dem Shepardson-BASIC in Ataris 8-Bit-Computern egal, ob das Befehlswort LIST mit L., LI. oder LIS. abgekürzt wird. Hauptsache ein L steht ganz links.

Das Beispiel zeigt bereits, dass es unterschiedliche Realisierungen von Abkürzungen gibt. Warum sich welche Entwickler für ein bestimmtes Abkürzungssystem entschieden haben, wäre durch Befragungen oder Archivrecherchen noch zu ermitteln; vielleicht geben aber die Abkürzungssysteme selbst Hinweise auf ihre Ursprünge, weshalb ich einige von ihnen im Folgenden vorstellen möchte. Die Tokenisierung von BASIC-Befehlen stellt ein speichersparendes Prinzip der Befehlscodierung dar: Für einen BASIC-Befehl muss im Prinzip nur eine Zahl gespeichert werden (die zumeist zwischen 0 und 255 liegt, also nur 1 Byte groß ist). Ein Befehl wie GRAPHICS im ZX81-BASIC belegt dann nur noch 1 Byte und nicht mehr 8 (eines für jeden Buchstaben), was bei einem Computer mit nur 1 KB RAM einen markanten Unterschied macht. Wird das so abgekürzte BASIC-Programm später aufgeLISTet, dann wird anstelle des Tokens das Befehlswort, das in einer Tabelle im ROM-Speicher hinterlegt ist, auf dem Bildschirm angezeigt.

BASIC-Tasten

Wer den ZX81 kennt, weiß aber auch, dass die Eingabe von acht Zeichen auf der Folientastatur eine echte Herausforderung darstellt. Deshalb hat sich bei Sinclairs Homecomputern eine Abkürzungsart durchgesetzt, die ich „Tokenisierung“ nennen möchte: Man tippt gar keine Befehlswörter mehr Buchstabe für Buchstabe ein, sondern drückt anstelle dessen eine der Sondertasten und danach eine andere Taste, die den Token repräsentiert. Auf dem Keyboard sind in verschiedenen Farben die dieser Taste zugewiesenen Befehle und Funktionen aufgedruckt. Diese Art der Befehlseingabe ist bei Sinclair alternativlos (das heißt, man kann Befehle gar nicht „ausbuchstabiert“ eingeben) und erfordert einige Übung und Gewöhnung. Diese Art der Befehlseingabe bewahrt gerade Programmieranfänger natürlich vor Vertippern.

Einige Computerhersteller, wie die Bit Corporation haben dieses Prinzip für ihre Systeme übernommen. Die BIT-60 und BIT-90 verfügen über eine „BASIC“-Taste, die gedrückt gehalten werden muss, wenn man die Tastaturabkürzung für einen Befehl verwenden möchte. Beim Exidy Sorcerer gibt es sogenannten „One-Stroke Instructions“, die bei Drücken der GRAPHIC-Taste zusammen mit einer anderen Taste aufgerufen werden und für den Wang System 2200 ist gleich eine komplette BASIC-Tastatur optional erhältlich. Einige BASIC-Dialekte (in Commodores C-264ern, C128, in MSX-Computern, TI-99/4a und bei PC-BASIC-Dialekten) ermöglichen es, Funktionstasten mit Befehlen zu belegen. Dazu gibt es dann manchmal eine Schablone, die man beschriften und über die Tasten legen kann. Auch Atari hat bei seinen ersten BASIC-Dialekten auf diese Möglichkeit zurückgegriffen: Das 1979 erschienene “BASIC Programming”-Modul für Atari VCS enthält zwei Schablonen, die auf die die separat erhältlichen Keyboard Controller aufgesteckt werden und den 24 Tasten einzelne Befehle und Funktionen zuwiesen. Die 128 Byte RAM der Konsole konnten auf diese Weise platzsparend für kleine BASIC-Programme genutzt werden.

Punkte und Schnörkel

Bei seinen Homecomputern wandte sich Atari allerdings einer anderen Abkürzungsphilosophie zu, die ich hier „lexikalische Abkürzung“ nennen möchte. Hierbei wird ein Wort dadurch abgekürzt, dass man die markanten Bestandteile auf der linken Seite bestehen lässt, dann einen Satzpunkt setzt und die nicht-markanten Bestandteile danach auslässt. Beim Lesen solcher Abkürzungen, die oft selbsterklärend sind und nicht gelernt werden müssen, sollte sich das Langwort bereits ankündigen: Abk. für Abkürzung, urspr. für ursprünglich usw. Einige dieser Abkürzungen sind derartig geläufig geworden, dass das ursprüngliche Wort (und der Punkt) dahinter vergessen wurde: Auto für Automobil oder Foto für Fotografie. Solche Kurzwörter gibt es auch in BASIC (REMark, COSine, CONTinue, TABulator). Tiny-BASIC und das BASIC im Zilog Z8671 (eine CPU mit eingebautem BASIC-Interpreter!) erlaubt die Abkürzung einiger Befehle, indem man nur deren Anfangsbuchstaben schreibt. Dieses Prinzip findet sich bereits beim Time-Shared BASIC für Computer von General Electric aus dem Jahr 1968. BASIC-Abkürzungen mit Abkürzungspunkt sind bei Ataris Homecomputern die gebräuchliche Form. Etliche Befehle (nicht jedoch Funktionen) lassen sich auf diese Weise kürzer schreiben. Diese Form der Abkürzung findet sich auch im Level-1-BASIC des TRS-80 und im MTX-BASIC der Memotech-Computer.

Die bekannteste Form der Abkürzung ist die „Glyphen-Abkürzung“. Sie findet sich vor allem in Commodore-BASIC-Dialekten. Das Prinzip basiert darauf, dass der abzukürzende Teil des BASIC-Wortes durch ein Sonderzeichen dargestellt wird. Der Anfang des BASIC-Wortes steht links davor. (Sollte der Großbuchstaben-Zeichensatz aktiviert sein, dann erscheint das Abkürzungszeichen als Großbuchstabe.) Dies führt zu den vor allem vom C64 bekannten Abkürzungsschreibweisen für LIST (L+SHIFT-i), LOAD (L+SHIFT-o), RUN (R+SHIFT-u) usw. Das Prinzip ähnelt den im Mittelalter eingeführten Glyphen, bei denen Abkürzungen durch Buchstabenzusammenrückungen und -verschmelzungen durchgeführt wurden. Das kaufmännische &-Zeichen ist als zusammengerücktes „et“ ein Vertreter und Nachfahre dieser Abkürzungsart. Und die Pseudografikzeichen im PETSCII-Zeichensatz erinnern teilweise tatsächlich an verschnörkelte Buchstaben – etwa das Pik-Symbol bei der Abkürzung dA (DATA) oder das Kreuz-Symbol bei der Abkürzung eX (EXP).

Abkürzungen durch die Sprachgeschichte

Die immense Anzahl von BASIC-Dialekten lassen sich also auch in ihre Möglichkeiten Wörter abzukürzen (oder nicht) gruppieren. Inwiefern sich die Entwickler aneinander orientiert oder voneinander inspirieren lassen haben, wäre noch herauszufinden. Abgesehen von einigen wenigen Abkürzungsmerkmalen, die in beinahe allen Homecomputer-BASIC-Dialekten auftauchen, zeigt sich jedoch abermals eine „babylonische“ Vielsprachigkeit auch in diesem Aspekt. Es ist allerdings kaum verwunderlich, dass fast alle populären Plattformen und ihre Dialekte solche Abkürzungen nutzen; vielleicht liegt die Popularität ja sogar genau darin begründet, dass sie das Abtippen von BASIC-Programmen, die damals in zahlreichen Büchern und Zeitschriften zu finden waren, besonders einfach gestalteten. Denn gerade beim doch eher lästigen Abtippen seitenlanger Spielelistings sind solche Abkürzungen sehr willkommen.

In jüngerer Zeit werden die Abkürzungen aber auch zu einem anderen Zweck verwendet: um möglichst viel Code in einem BASIC-Programm unterzubringen. Die Interpreter unterscheiden nämlich die Bildschirmzeile von der „logischen Zeile“. Passen in erstere je nach Editor 40 bis 80 Zeichen, so kann letztere teilweise bis zu 256 Zeichen Code aufnehmen. Damit der Entwickler nicht durch die Bildschirmzeile begrenzt wird, kann er Abkürzungen nutzen und damit seine Programme so entwerfen, dass darin möglichst viel BASIC-Code untergebracht ist. Solche Programme lassen sich dann nur noch unter Verwendung der Abkürzungen eingeben und oft gar nicht mehr editieren.

Die Ergebnisse solcher Abkürzungen sind oft erstaunlich, wie bei BASIC-Oneliner und -Tenliner-Wettbewerben zu sehen ist. Einige Einsendungen enthalten Ausdrucke der abgekürzten BASIC-Listings, die für menschliche Leser kaum noch zu entziffern sind. Die Computer haben damit keine Probleme. Solche Grenzen auszureizen, ist Ergebnis der jahrzehntelangen Auseinandersetzung mit den BASIC-Dialekten und -Interpretern. Was ursprünglich als Eingabeerleichterung für Faulpelze gedacht war, wird heute zu einem Werkzeug für besonders findige Sprachakrobaten, die keine Zeit und Tipparbeit scheuen, um ihre Programme auf noch engerem Raum unterzubringen.

Über Stefan Höltgen

siehe: http://about.me/hoeltgen
Dieser Beitrag wurde unter BASIC, Computer, Programmiersprachen, Technikgeschichte/RetroTopie abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.