Warum gibt es in C und C ++ Digraphen?

76

Ich habe heute erfahren, dass es in C99 und C ++ Digraphen gibt. Folgendes ist ein gültiges Programm:

%:include <stdio.h>

%:ifndef BUFSIZE
 %:define BUFSIZE  512
%:endif

void copy(char d<::>, const char s<::>, int len)
<%
    while (len-- >= 0)
    <%
        d<:len:> = s<:len:>;
    %>
%>

Meine Frage ist: Warum existieren sie?

Sydius
quelle
5
Meine Übersetzung überprüfen? %: ist # und <%%> ist {} und <:::> ist []. Ist das richtig?
Abelenky
6
Die eigentliche Antwort: Weil IBM laut war und darauf bestand, es allen aufzuzwingen.
1
Abstimmung zur Wiedereröffnung. Diese Frage ist spezifischer als diese (nur über andund or). Dieser ist auf einer nützlicheren Form gestellt und hat mehr positive Stimmen. Bearbeiten: sollte stattdessen ein Duplikat von: stackoverflow.com/questions/1234582/… sein .
Ciro Santilli 法轮功 冠状 病 六四 事件 9
1
Die wahre Antwort: So können Sie verschleierten Code schreiben:-)
MD XF

Antworten:

68

Digraphen wurden für Programmierer erstellt, die keine Tastatur hatten, die den ISO 646-Zeichensatz unterstützte.

http://en.wikipedia.org/wiki/C_trigraph

CTT
quelle
2
Ich habe kürzlich diesen Artikel gefunden , der besagt, dass Digraphen in Pascal nicht in Tastaturbeschränkungen, sondern in Beschränkungen für die Darstellung von Lochkartenzeichen begründet sind. Und ja, Pascal ist nicht C oder C ++, aber ich dachte, Sie finden es vielleicht interessant.
qqbenq
1
Nicht-ASCII-Tastaturen waren kein Problem. Sicher sah es seltsam aus, aber ... main (int argc, char * argvÄÅ) ä printf ("HelloÖn"); å
robinr
25

Ich glaube, dass ihre Existenz auf die Möglichkeit zurückzuführen ist, dass irgendwo jemand einen Compiler mit einem Betriebssystem verwendet, dessen Zeichensatz so archaisch ist, dass er nicht unbedingt alle Zeichen enthält, die C oder C ++ benötigen, um die gesamte Sprache auszudrücken .

Es sorgt auch für gute Einträge im IOCCC .

Greg Hewgill
quelle
6
Nicht unbedingt der Compiler, Greg. Einige der EBCDIC-Zeichensätze des Mainframes enthalten keine konsistenten Zeichen für die eckigen Klammern, was die Array-Verarbeitung eher beeinträchtigt. Dies ist eine Einschränkung des Editors und / oder Terminalemulators mehr als der Compiler selbst.
Paxdiablo
Ich meinte nicht wirklich, dass es nur der Compiler war. Ich habe bearbeitet, um zu klären.
Greg Hewgill
Nein, es hat nichts mit EBCDIC zu tun. Diese Sequenzen waren für Skandinavier gedacht, die einige der ASCII-Zeichen als Sprachzeichen verwendeten (daher waren die Symbole auf den Tastenkappen und in der Ausgabe unterschiedlich).
Jim Balter
5
Die Erwähnung von IOCCC hat dieser Antwort für mich einen erheblichen Mehrwert verliehen.
Weston
15

Ich denke, das liegt daran, dass einige der Tastaturen auf diesem Planeten möglicherweise keine Tasten wie '#' und '{' haben.

ChrisW
quelle
10

Die Digraphen und Trigraphen in C / C ++ stammen aus den Tagen von Sechs-Bit-Zeichensätzen, die von CDC6000 (60 Bit), Univac 1108 (36 Bit), DECsystem 10 und 20 Systemen (36 Bit) verwendet wurden und jeweils proprietäre 64 Zeichen verwendeten Set nicht kompatibel mit ASA X3.4-1963 (jetzt bekannt als ANSI X3.4-1963 "7-Bit American National Standard Code für den Informationsaustausch"). Die neueste Version ist ANSI X3.4-1986.

Da diese Systeme nicht in der Lage waren, alle 96 grafischen Codepunkte darzustellen, wurden viele weggelassen. Darüber hinaus wurde X3.4 mit anderen National Standard Institutes (GBR, GER, ITA usw.) koordiniert, und in X3.4 gab es Codepunkte, die als nationale Ersatzzeichen bezeichnet wurden - das offensichtlichste Beispiel ist das # für das Britsh Pound Das Symbol (offensichtlich, weil der Name des # -Zeichens "Pfundzeichen" aus seiner herkömmlichen Verwendung im US-Handel ist - vor der Entwicklung von Twitter) und das "{''} 'wurden auch als nationale Ersatzzeichen bezeichnet.

Daher wurden Digraphen eingeführt, um einen Mechanismus für jene Computersysteme bereitzustellen, die nicht in der Lage sind, die Zeichen darzustellen, und auch für Datenendgeräte, die den widersprüchlichen Codepunkten nationale Ersatzzeichen zuweisen. Di / Tri-Graphen sind zu einem archaischen Artefakt der Computergeschichte geworden (ein Fach, das heutzutage in der Informatik nicht unterrichtet wird).

Ein ausführliches Dokument zu diesem Thema finden Sie hier: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.678&rep=rep1&type=pdf

JTM
quelle