Почему существуют орграфы в C и С++?

Сегодня я узнал, что существуют орграфы на C99 и С++. Ниже приведена действующая программа:

%: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:>;
    %>
%>

Мой вопрос: зачем они существуют?

Ответ 1

Диграфы были созданы для программистов, у которых не было клавиатуры, поддерживающей набор символов ISO 646.

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

Ответ 2

Я считаю, что их существование можно проследить до того, что где-то кто-то использует компилятор с операционной системой, набор символов которой настолько архаичен, что не обязательно содержит все символы, которые C или С++ должны выразить весь язык.

Кроме того, он делает хорошие записи в IOCCC.

Ответ 3

Я думаю, потому что некоторые клавиатуры на этой планете могут не иметь таких клавиш, как "#" и "{".

Ответ 4

Диграфы и триграфы в c/С++ исходят из дней шестибитных наборов символов, используемых CDC6000 (60 бит), Univac 1108 (36 бит), DECsystem 10 и 20 систем (36 бит), каждый из которых использовал собственный 64-символьный набор, не совместимый с ASA X3.4-1963 (теперь известен как ANSI X3.4-1963 "7-разрядный американский национальный стандартный код для обмена информацией" ). Последняя редакция - ANSI X3.4-1986. Поскольку эти системы не были способны отображать все 96 графических кодовых точек, многие из них были опущены. Кроме того, X3.4 координировался с другими национальными стандартными институтами (GBR, GER, ITA и т.д.), И в X3.4 были обозначены кодовые точки, которые были обозначены как национальные символы замены - наиболее очевидным примером является # для британского фунта символ (очевидно, потому что имя символа # является "значком фунта" из его обычного использования в американской торговле - до эволюции Twitter), а "{''}" также обозначались как национальные символы замены. Таким образом, были введены орграфы для обеспечения механизма для тех компьютерных систем, которые не могут представлять символы, а также для оборудования терминалов данных, которое назначает национальные символы замещения конфликтующим кодовым точкам. Di/Tri-graph стали архаичным артефактом вычислительной истории (предмет, который в наши дни не преподавался в области информатики). Исчерпывающую статью по этому вопросу можно найти здесь: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.678&rep=rep1&type=pdf