INTERCAL

INTERCAL ist eine esoterische Programmiersprache, die als eine Parodie von Don Woods und James M. Lyon, zwei Universitätsstudenten von Princeton 1972 geschaffen wurde. Es verspottet Aspekte der verschiedenen Programmiersprachen zurzeit, sowie die Proliferation von vorgeschlagenen Sprachkonstruktionen und Notationen in den 1960er Jahren.

Es gibt zwei zurzeit aufrechterhaltene Versionen von INTERCAL: C-INTERCAL, der früher von Eric S. Raymond und CLC-INTERCAL aufrechterhalten ist, der von Claudio Calvelli aufrechterhalten ist.

Geschichte

Gemäß dem ursprünglichen Handbuch von den Autoren,

Die ursprüngliche Durchführung von Princeton hat geschlagene Karten und die EBCDIC Codierung verwendet. Um INTERCAL zu erlauben, auf Computern mit ASCII zu laufen, mussten Ersetzungen für zwei Charaktere gemacht werden: $ wechselte den ¢ als der vermischen Maschinenbediener aus, "vertreten Sie [ing] die zunehmenden Kosten der Software in Bezug auf die Hardware", und? wurde  als das unäre exklusive - oder Maschinenbediener "zum richtig Schnellzug die Reaktion des Durchschnittsmenschen auf dem ersten Antreffen exklusiv - oder" ausgewechselt. In neuen Versionen von C-INTERCAL werden die älteren Maschinenbediener als Alternativen unterstützt; INTERCAL Programme können jetzt in ASCII, lateinischem 1, UTF-8, EBCDIC, Hollerith oder Baudot verschlüsselt werden.

Details

INTERCAL war beabsichtigt, um von allen anderen Computersprachen völlig verschieden zu sein. Allgemeine Operationen auf anderen Sprachen haben rätselhafte und überflüssige Syntax in INTERCAL. Aus dem INTERCAL Bedienungshandbuch:

INTERCAL hat viele andere Eigenschaften, die entworfen sind, um es noch ästhetischer zu machen, unangenehm dem Programmierer: Es verwendet Behauptungen solcher, wie "VORGELESEN", "IGNORIEREN SIE", "VERGESSEN SIE" und Modifikatoren solcher als "BITTE". Dieses letzte Schlüsselwort stellt zwei Gründe für die Verwerfung des Programms durch den Bearbeiter zur Verfügung: Wenn "BITTE" häufig genug nicht erscheint, wird das Programm ungenügend höflich betrachtet, und die Fehlermeldung sagt das; wenn zu häufig das Programm als übermäßig höflich zurückgewiesen werden konnte. Obwohl diese Eigenschaft im ursprünglichen INTERCAL Bearbeiter bestanden hat, wurde sie undokumentiert.

Trotz der absichtlich stumpfen und wortreichen Syntax der Sprache ist INTERCAL dennoch Turing-abgeschlossen: In Anbetracht genug Gedächtnisses kann INTERCAL jedes Problem beheben, das eine Universale Turing Maschine lösen kann. Die meisten Durchführungen von INTERCAL tun das sehr langsam jedoch. Ein Sieb des Abrisspunkts von Eratosthenes, alle Primzahlen weniger als 65536 schätzend, wurde auf einer Sonne SPARCStation-1 geprüft. In C hat es weniger genommen als eine halbe Sekunde; dasselbe Programm in INTERCAL hat siebzehn Stunden übernommen.

Gemäß dem INTERCAL Handbuch, "sollte das Ziel im Entwerfen von INTERCAL keine Präzedenzfälle haben", vermutlich weder im Fluss kontrollieren Eigenschaften, noch in Datenmanipulationsmaschinenbedienern. Die Entwerfer waren relativ erfolgreich; jedoch ist ein bekannter Präzedenzfall eine Maschineninstruktion in einem sowjetischen Großrechner-Computer BESM-6, veröffentlicht 1967, der "dem ausgesuchten" Maschinenbediener von INTERCAL effektiv gleichwertig ist.

Dokumentation

Das INTERCAL Bedienungshandbuch enthält viele paradox, sinnlos, oder sonst humorvolle Instruktionen:

Das Handbuch enthält auch eine "Mandel", wie erklärt, in diesem Kommentar: "4) Da alle anderen Bedienungshandbücher Anhänge haben, wurde es entschieden, dass das INTERCAL Handbuch einen anderen Typ des absetzbaren Organs enthalten sollte."

Das INTERCAL Handbuch gibt ungewöhnliche Namen allen nichtalphanumerischen ASCII Charakteren: Einzeln und Anführungszeichen sind "Funken" und "Kaninchen-Ohren" beziehungsweise. (Die Ausnahme ist das Und-Zeichen: Wie die Jargon-Datei feststellt, "was konnte dümmer sein?") Der Anweisungsmaschinenbediener, vertreten als ein Gleichheitszeichen (die "Hälfte von INTERCAL des Ineinandergreifens") auf vielen anderen Programmiersprachen, ist in INTERCAL ein nach links Pfeil,

Syntax

Eingang (die Instruktion verwendend), und Produktion (die Instruktion verwendend), verwendet die üblichen Formate nicht; in INTERCAL-72, SCHREIBEN SIE IN Eingängen eine Zahl ausgeschrieben als Ziffern in Englisch (solcher als SECHS FÜNF FÜNF DREI FÜNF), und LESEN SIE Produktionen es in 'geschlachteten' Römischen Ziffern VOR. Neuere Versionen haben ihre eigenen Eingabe/Ausgabe-Systeme.

Anmerkungen können durch das Verwenden des umgekehrten Behauptungsbezeichner-Beteiligens NOT oder N'T erreicht werden; diese veranlassen Linien, am Anfang ENTHALTEN zu werden, so dass sie keine Wirkung haben. (Eine Linie kann dessen ENTHALTEN werden, selbst wenn sie gültige Syntax nicht hat; Syntax-Fehler geschehen an der Durchlaufzeit, und nur dann, wenn die Linie UNENTHALTEN wird.)

Datenstrukturen

INTERCAL-72 (die ursprüngliche Version von INTERCAL) hatte nur vier Datentypen, die ganze 16-Bit-Zahl (vertreten mit a, genannt einen 'Punkt'), die ganze 32-Bit-Zahl (ein 'twospot'), die Reihe von ganzen 16-Bit-Zahlen (ein 'Schwanz'), und die Reihe von ganzen 32-Bit-Zahlen (eine 'Hybride'). Es gibt 65535 verfügbare Variablen jedes Typs, der von zu für ganze 16-Bit-Zahlen zum Beispiel numeriert ist. Jedoch hat jede dieser Variablen seinen eigenen Stapel, auf dem sie gestoßen und (VERSTECKT und WIEDERBEKOMMEN, in der INTERCAL Fachsprache) knallen gelassen werden kann, die mögliche Kompliziertheit von Datenstrukturen vergrößernd. (Modernere Versionen von INTERCAL haben im Großen und Ganzen dieselben Datenstrukturen mit passenden Modifizierungen behalten; TriINTERCAL, der die Basis modifiziert, mit der Zahlen vertreten werden, kann einen 10-trit Typ aber nicht einen 16-Bit-Typ verwenden), und CLC-INTERCAL führt viele seiner eigenen Datenstrukturen, wie 'Klassen und Vorträge', durch, indem er die grundlegenden Datentypen mehr Information versorgen lässt, anstatt neue Typen hinzuzufügen. Reihe wird durch das Zuweisen ihnen dimensioniert, als ob sie eine Skalarvariable waren. Konstanten können auch verwendet werden, und werden durch ('Ineinandergreifen') vertreten, das von der Konstante selbst gefolgt ist, schriftlich als eine Dezimalzahl; nur Konstanten der ganzen Zahl von 0 bis 65535 werden unterstützt.

Maschinenbediener

Es gibt nur fünf Maschinenbediener in INTERCAL-72: Durchführungen ändern sich, in dem Charaktere vertreten, welche Operation, und viele mehr als einen Charakter akzeptieren, so wird mehr als eine Möglichkeit für viele der Maschinenbediener gegeben.

Gegen die meisten anderen Sprachen, UND, ODER, und XOR sind unäre Maschinenbediener, die an Konsekutivbit ihres Arguments arbeiten; das bedeutendste Bit des Ergebnisses ist der auf die bedeutendsten und am wenigsten bedeutenden Bit des Eingangs angewandte Maschinenbediener, das zweite bedeutendste Bit des Ergebnisses ist der Maschinenbediener, der auf die meisten und die zweiten am meisten bedeutenden Bit angewandt ist, das dritte bedeutendste Bit des Ergebnisses ist der Maschinenbediener, der auf die zweiten am meisten und dritten am meisten Bit und so weiter angewandt ist. Der Maschinenbediener wird zwischen dem Satzzeichen gelegt, das einen Variablennamen oder unveränderlich und der Zahl angibt, die angibt, welche Variable es, oder gerade innerhalb von Eingruppierungen ist (d. h. ein Charakter später, als es auf Programmiersprachen wie C. sein würde) WÄHLEN SIE AUS und schießen Sie DURCH (der ist auch bekannt als VERSCHMELZEN SIE), sind Infix binäre Maschinenbediener; AUSGESUCHT nimmt die Bit seiner ersten operand, die '1' Bit seines zweiten operand entsprechen und die Bit entfernt, die '0' Bit entsprechen, sich zum am wenigsten bedeutenden Bit bewegend und mit zeroes auspolsternd (so 51 (110011 in der Dualzahl) WÄHLEN 21 AUS (10101 in der Dualzahl), ist 5 (101 in der Dualzahl)); VERMISCHEN SIE Stellvertreter-Bit von seinem ersten und zweiten operands (auf solche Art und Weise, dass das am wenigsten bedeutende Bit seines zweiten operand das am wenigsten bedeutende Bit des Ergebnisses ist). Es gibt keine Maschinenbediener-Priorität; Eingruppierungen müssen verwendet werden, um die Priorität zu disambiguieren, wo es sonst zweideutig sein würde (die verfügbaren Eingruppierungen sind (sprühen Funken), der einen anderen Funken vergleicht, und ('Kaninchen-Ohren'), der ein anderes Kaninchen Ohren vergleicht; der Programmierer ist dafür verantwortlich, diese auf solche Art und Weise zu verwenden, dass sie den Ausdruck eindeutig machen.)

Kontrollstrukturen

INTERCAL Behauptungen der ganze Anfang mit einem 'Behauptungsbezeichner'; in INTERCAL-72 kann das sein, oder, von denen alle dasselbe zum Programm bedeuten (aber das Verwenden von einem von diesen veranlasst zu schwer das Programm, eine undokumentierte Eigenschaft in INTERCAL-72 zurückgewiesen zu werden, der im C-INTERCAL Handbuch erwähnt wurde), oder eine umgekehrte Form (damit oder hat am Bezeichner angehangen). Denselben Weg zurückverfolgend erlaubt INTERCAL, eine moderne Variante, auch das Variante-Verwenden (vielleicht verbunden mit BITTE, oder TUN SIE) als ein Behauptungsbezeichner, der einen auserlesenen Punkt einführt. Vor dem Bezeichner kann eine fakultative Linienzahl (eine ganze Zahl, die in Parenthesen eingeschlossen ist), gegeben werden; nach dem Bezeichner kann eine Prozent-Chance der Liniendurchführung im Format, der Verzug zu 100 % gegeben werden.

In INTERCAL-72 sind die Hauptkontrollstrukturen DANN ZUSAMMENFASSUNG und VERGESSEN. Zweige zur Linie haben angegeben, sich an die folgende Linie erinnernd, die ohne das FOLGENDE auf einem Anruf-Stapel durchgeführt würde (andere Bezeichner, als TUN, kann auf jeder Behauptung verwendet werden, TUN wird als ein Beispiel gegeben); entfernt Ausdruck-Einträge von der Spitze des Anruf-Stapels (das ist nützlich, um den Fehler zu vermeiden, der sonst geschieht, wenn es mehr als 80 Einträge gibt), und Ausdruck-Einträge vom Anruf-Stapel entfernt und sich Sprünge zur letzten Linie erinnert haben.

C-INTERCAL stellt auch das GEKOMMENE AUS der Instruktion, schriftlich zur Verfügung; CLC-INTERCAL und die neusten C-INTERCAL Versionen stellen auch geschätzt zur Verfügung kommen HER (und ALS NÄCHSTES DAVON, der ähnlich ist, kommen HER, sondern auch spart eine Rücksprungadresse auf dem FOLGENDEN STAPEL.

Alternative Weisen, Programm-Fluss zu betreffen, der ursprünglich in INTERCAL-72 verfügbar ist, sollen das IGNORIEREN verwenden und SICH an Instruktionen auf Variablen ERINNERN (den Ursache der Variable schreibt, die still zu ignorieren ist und wieder zu wirken ist, so dass Instruktionen arbeitsunfähig sein können, indem sie sie veranlasst wird, keine Wirkung zu haben), und das ENTHALTEN und SETZEN SIE Instruktionen auf Linien oder auf Typen der Behauptung WIEDER EIN, die Linien veranlassend, keine Wirkung zu haben oder eine Wirkung wieder beziehungsweise zu haben.

Hallo, Welt

Das traditionelle "Hallo, die Welt!" Programm demonstriert, wie verschiedener INTERCAL aus Standardprogrammiersprachen ist. In C konnte es wie folgt lesen:

  1. einschließen

int Hauptsache

{\

printf ("Hallo, Welt! \n");

kehren Sie 0 zurück;

}\

</Quelle>

Das gleichwertige Programm in C-INTERCAL ist länger und härter zu lesen:

TUN SIE 1

Dialekte

Die ursprünglichen Wälder-Lyon INTERCAL wurden in seinen Fähigkeiten des Eingangs/Produktion sehr beschränkt: Der einzige annehmbare Eingang war Zahlen mit den Ziffern dargelegt, und die einzige Produktion war eine verlängerte Version von Römischen Ziffern. Eine Weile später gab es eine 'Durchführung von Atari', über die Zeichen im INTERCAL Bedienungshandbuch zur Verfügung gestellt werden; es 'unterscheidet sich von der ursprünglichen Version von Princeton in erster Linie im Gebrauch von ASCII aber nicht EBCDIC'.

Die C-INTERCAL Wiederdurchführung, im Internet verfügbar seiend, hat die Sprache populärer bei Anhängern von esoterischen Programmiersprachen gemacht. Der C-INTERCAL Dialekt hat einige Unterschiede zu ursprünglichem INTERCAL und hat einige neue Eigenschaften, solcher als ein GEKOMMENER VON der Behauptung und einem Mittel eingeführt, auf dem Turing Textmodell gestützte Texteingabe/Ausgabe zu tun.

Die Autoren von C-INTERCAL haben auch die Variante von TriINTERCAL geschaffen, die auf dem Dreifältigen Ziffer-System und der Generalisierung des Satzes von INTERCAL von Maschinenbedienern gestützt ist.

Eine neuere Variante wird Intercal Eingefädelt, der die Funktionalität von HERGEKOMMENEN erweitert, um Nebenläufigkeit zu unterstützen.

Einfluss und Diskussion

Im Artikel "A Box, Darkly: Obfuscation, Weird Languages, and Code Aesthetics" wird INTERCAL unter der gehenden "Hemmungslosigkeit die ganze Vernunft, Sie beschrieben, die hier hereingehen: INTERCAL". Der Bearbeiter und die Kommentieren-Strategie sind unter den "unheimlichen" Eigenschaften hat beschrieben:

Außenverbindungen


Liste von Inseln / Internationaler Datenverschlüsselungsalgorithmus
Impressum & Datenschutz