Whitespace (Programmiersprache)

Whitespace (Programmiersprache)
Whitespace-Quellcode mit Syntax-Highlighting
  • Tabulatoren
  • Leerzeichen

Whitespace ist eine relativ junge esoterische Programmiersprache. Die Befehle und Steueranweisungen bestehen im Gegensatz zu üblichen Programmiersprachen aus definierten Folgen von Leerzeichen, Tabs und Zeilenumbrüchen (engl. Whitespaces). Neben dieser offensichtlichen Eigenart verwendet Whitespace das übliche Dualsystem nur für Daten; der Programmcode wird in einem dreiwertigen Stellensystem („l“, „t“, „u“ oder engl. "s", "t", "l") abgebildet.

Inhaltsverzeichnis

Syntax

Die Befehle und Steueranweisungen bestehen aus definierten Folgen von Leerzeichen (l), Tabulatoren (t) und Zeilenumbrüchen (u).

Es gibt kein Syntaxelement zur Kennzeichnung von Kommentaren. Stattdessen können Kommentare, die selbst keine Whitespaces enthalten dürfen, an beliebigen Stellen im Quellcode eingegeben werden. Der Interpreter ignoriert alle Zeichen, die für ihn keine Bedeutung haben.

Befehle

Die Befehle lassen sich grob in fünf Bereiche einteilen:

Zeichen Bedeutung
l Stack-Zugriff
tl Rechenfunktionen
tt Heap-Speicher-Zugriff
u Schleifen, Sprünge, Bedingungen
tu Ein- /Ausgabe von Werten

Eine genaue Beschreibung der einzelnen Befehle inklusive erwarteter Parameter befindet sich auf der unten genannten Webseite.

Daten

Während die Befehle ein dreiwertiges Stellensystem verwenden, werden die Daten im normalen dualen System abgebildet: An der ersten Stelle von links steht ein t für eine negative Zahl; ein l für eine positive. Im weiteren Verlauf steht t für 1 und l für 0. Die Spezifikation besagt, dass Zahlen eine beliebige Bitlänge haben können, allerdings können Compiler und Interpreter hier eine sinnvolle Obergrenze festlegen. Abgeschlossen wird ein Datum durch einen Zeilenumbruch.

Sprache

Whitespace ist eine imperative, stackbasierte Programmiersprache, die den Programmierern einen Stack und Heap zur Verfügung stellt.

Alle Operationen arbeiten intern auf Ganzzahlen beliebiger Bit-Länge. Es besteht allerdings die Möglichkeit, eine Speicherposition im ASCII-Code als Zeichen auszugeben (outchar).

Geschichte und Hintergrund

Whitespace wurde Ende 2002 von Edwin Brady und Chris Morris entwickelt. Slashdot berichtete am 1. April 2003 über diese Programmiersprache.[1] Mitte 2003, mit der Fertigstellung eines Whitespace-Interpreters in Whitespace, hat die Sprache die Kinderstube verlassen. Bereits fünf Jahre zuvor hatte Bjarne Stroustrup die Idee in einem Entwurf für C++2000 erwähnt. Seine Grundidee war, dass Mathematiker üblicherweise statt des Malzeichens ein Leerzeichen notieren. Diesem Leerzeichen könnte man also in C++2000 die Bedeutung der Multiplikation zuordnen.[2]

Whitespace ist mit Python und make verwandt, in denen Tabulatorzeichen am Zeilenanfang den Programmablauf steuern. Die meisten anderen Programmiersprachen ignorieren Whitespaces. Für den menschlichen Betrachter dienen sie jedoch einer nützlichen Strukturierung, die den Programmcode besser lesbar machen kann.

Vorteile seien laut den Erfindern, dass massenhafte Ausdrucke von Quelltexten Tinte spare und dass Spione, die Code entwendet haben, diesen nicht entschlüsseln können. Allerdings bleiben noch Probleme bestehen, wenn man den Code nach dem Ausdrucken wieder eingeben möchte.

Whitespace eignet sich besonders gut zum Verbergen von Programmcode in normalem Text ähnlich der Steganographie. Ein Beispiel dafür findet sich in einem Beitrag des International Obfuscated C Code Contest.

Hello World

Das oben dargestellte „Hello, world!“-Programm:

 lllullltlltllluttlllltulllttlltltuttlllltlulllttlttlluttllllttulllttlttlluttllll
 tllulllttlttttuttlllltltullltlttlluttllllttlullltllllluttlllltttullltttltttuttll
 lltlllulllttlttttuttlllltlltullltttlltluttlllltltlulllttlttlluttlllltlttulllttll
 tlluttllllttllullltlllltuttllllttltulllttltuttlllltttlullltltluttllllttttullllut
 tllllluulllltulultttlulutlltlutullllltutlllululltuullltluuuu

Entwicklungsumgebungen

Der Editor Vim bietet von Haus aus ein Syntax-Highlighting für Whitespace an, wodurch die Programmierung deutlich vereinfacht wird. Dies läuft allerdings einem Designziel der Sprache, beim Ausdruck möglichst wenig Tinte zu verbrauchen, entgegen. Einen Mode für Emacs gibt es bei den Weblinks.

Das oben und unten dargestellte "Hello, world!" kann mit einem der folgenden Skripts in richtiges Whitespace konvertiert werden:

 #!/bin/sh
 sed "s/ //g;s|//.*||g;s/\\n//g" $1 | tr -d '\n' | sed "s/l/ /g;s/t/\t/g;s/u/\n/g"
 
 #!/bin/sh
 sed "s|//.*||g" < $1 | tr -d " \t\n" | tr ltu " \t\n"

Whitespace-Assembler

Da der Umgang mit trinär kodierten Maschinenbefehlen relativ mühsam ist, wird häufig ein äquivalenter Assembler-Dialekt verwendet:

 // "Hello, world!" in den Speicher schreiben
 lllu          // push 0   // Speicherstelle 0
 llltlltlllu   // push 'H' // Zeichen 'H'
 ttl           // store    // in den Speicher
 llltu         // push 1   // ...
 lllttlltltu   // push 'e'
 ttl           // store
 llltlu        // push 2
 lllttlttllu   // push 'l'
 ttl           // store
[…]
 lllttllu      // push 12
 llltlllltu    // push '!'
 ttl           // store
 lllttltu      // push 13
 lllttltu      // push \r
 ttl           // store
 llltttlu      // push 14
 llltltlu      // push \n
 ttl           // store
 lllttttu      // push 15
 llllu         // push 0
 ttl           // store
 
 // Ausgabe-Schleife:
 llllu         // push 0
 ulllltu       // 1:          // /Schleife
    lul           // dup      // | --.
    ttt           // pop      // |   --- Spitze des Stacks untersuchen
    lul           // dup      // | --'
    utlltlu       // jz 2     // | ----> bei 0 sind wir fertig
    tull          // outchar  // | ----> Ausgabe
    llltu         // push 1   // | --._. Speicherstelle hochzaehlen
    tlll          // add      // | --'
 ululltu       // jmp 1       //  \naechster Durchlauf
 ullltlu       // 2:          //
 uuu           // halt        // ende

Literatur

  • Oliver Lau: Hexenwerk – Ein Plädoyer für esoterische Programmiersprachen: In: c’t, 22/2007, S. 192–199.

Weblinks

Einzelnachweise

  1. New Whitespace-Only Programming Language, Slashdot, 1. April 2003
  2. Bjarne Stroustrup: Generalizing Overloading for C++2000. (PDF) 1998

Wikimedia Foundation.

См. также в других словарях:

  • Whitespace — ist Typografischer Weißraum, die Freistellen im Text Leerraum, in der Informatik eine Bezeichnung für nicht dargestellte Zeichen Whitespace (Programmiersprache), eine Programmiersprache White Space (Funktechnik), Funkfrequenzen, welche dem… …   Deutsch Wikipedia

  • Whitespace (Informatik) — Leerraum (auch: Whitespace / waɪtspeɪs/, Zwischenraumzeichen, Weißraum) ist in der Informatik eine Bezeichnung für Zeichen in einem Text, die im Texteditor oder Textverarbeitungsprogramm normalerweise nicht dargestellt werden und dennoch… …   Deutsch Wikipedia

  • Programmiersprache Perl — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

  • Perl (Programmiersprache) — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle Version …   Deutsch Wikipedia

  • Esoterische Programmiersprache — Esoterische Programmiersprachen sind Programmiersprachen, die nicht für den praktischen Einsatz entwickelt wurden, sondern ungewöhnliche Sprachkonzepte umsetzen. Eine einfache Bedienung ist selten, teilweise werden Sprachen konzipiert, um… …   Deutsch Wikipedia

  • Ruby (Programmiersprache) — Ruby Offizielles Logo Basisdaten Paradigmen: multiparadigmatisch Erscheinungsjahr: 1995 …   Deutsch Wikipedia

  • White space — Whitespace ist in der Informatik eine Bezeichnung für nicht dargestellte Zeichen. Siehe Leerraum. der Name einer Programmiersprache. Siehe Whitespace (Programmiersprache). ist der englische Begriff für Typografischer Weißraum Siehe auch… …   Deutsch Wikipedia

  • Liste von Hallo-Welt-Programmen/Sonstige — Dies ist eine Liste von Hallo Welt Programmen für grafische Benutzeroberflächen, Web Technologien, exotische Programmiersprachen und Textauszeichnungssprachen. Weitere Beispiele für gebräuchliche Programmiersprachen sind unter Liste von Hallo… …   Deutsch Wikipedia

  • Liste der Programmiersprachen — A A (Programmiersprache) A# A+ A 0 A 1 A 2 A 3 A9 AACC AADL AAIMS aal AAPL Aardappel AARDVARK Abacus ABACUS 10 ABACUS/X ABAP ActionScript Ada ADbasic AgentSpeak(L) Agilent VEE AHDL Aleph ALGOL (ALGOL 60, ALGOL W, ALGOL 68) Amber …   Deutsch Wikipedia

  • Polyglott (Programmierung) — Ein polyglottes Programm (polyglott = mehrsprachig) ist ein Computerprogramm, dessen Quelltext in mehr als einer Programmiersprache gültig ist; d. h. es kann vom jeweiligen Interpreter bzw. Compiler jeder der dafür vorgesehenen Sprachen… …   Deutsch Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»