Диграфы и триграфы, а также замена на уровне отображения


Данная информация отчасти устарела, но оставлена для истории, в целях пояснения причин, по которым было решено добавить триграф
(+)
и два диграфа
>=
и
<=
.


11l поддерживает только 4 диграфа и 1 триграф и вот почему.

Диграфы
'"
и
"'
нужны для возможности набора одиночных парных кавычек — символов
и
{} — в условиях недоступности подходящей среды разработки (например, REditor) или установленного средства назначения глобальных горячих клавиш (например, AutoHotkey).

Триграф
(+)
заменяется на
в исходном коде, т.к. замена на уровне отображения для этого символа нежелательна: уменьшение ширины в 3 раза слишком сильно бросается в глаза. К тому же, обозначение
(+)
не используется ни в одном языке программирования, а символ ⊕ используется в публикациях, в Википедии и в текстах задач по спортивному программированию.

Диграфы
>=
и
<=
заменяются на
и
, соответственно, так как:
  1. >=
    и
    <=
    выглядят не очень красиво, а
    <=
    вообще выглядит как парный оператор для
    =>
    ;
  2. замена на уровне отображения приводит к тому, что строка с
    a >= b
    будет длиннее строки с
    a ≥ c
    и знаки сравнения не будут располагаться один под одним, как было бы красивее.

[+]
не является триграфом, т.к. для него нет соответствующего символа для замены.

[&]
и
[|]
не заменяются на символы конъюнкции
и дизъюнкции
, т.к. эти символы легко путаются.

Символ
~
не заменяется на
¬
, т.к. это достаточно редкая операция и даже в языках программирования, использующих математические символы для обозначения операторов, таких как Julia и APL, для отрицания [побитового в Julia и логического в APL] используется символ
~
, а не
¬
.

!=
не заменяется на
, потому что:
  1. символ
    слишком короткий и теряется в коде, замена на уровне отображения [в Fira Code и в REditor] выглядит красивее;
  2. т.к. оператор сравнения
    ==
    состоит из двух символов, то возникает несогласованность (строка с
    a == b
    длиннее строки с
    a ≠ c
    );
  3. есть операция логического отрицания, которая обозначается символом
    !
    [что с ней делать — непонятно, не заменять же её на
    ¬
    ]
    , так что символ
    !
    в любом случае будет ассоциироваться с отрицанием и присутствие его в обозначении оператора не-равно
    !=
    вполне логично.

Опционально заменяются на уровне отображения в REditor:

Было решено отказаться от триграфа
(+)
по причине того, что не очевидно, как его набирать глядя на код. (Это же относится и к диграфам
>=
и
<=
, хотя и в меньшей степени.) Кроме того, есть проблемы с отображением символа ⊕: в KDiff3 значок ⊕ слишком мелкий и некрасивый, а в Sublime Text и на GitHub-е — довольно большой в 1.5-2 символа шириной, при этом ломается выравнивание кода.


Но сама идея замены
(+)
на
имеет значимый положительный побочный эффект: цепочка логических выводов в итоге привела к тому, что было пересмотрено обозначение для оператора поразрядного НЕ.
2024-01-20 18:35:56
(-)
заменяется на
¬
, т.к.:
  1. парная ей операция
    (+)
    теперь заменяется на
    и в коде больше не используется;
  2. (-)
    слишком непривычно выглядит, не используется больше ни в каком другом языке программирования, и я не вижу смысла привыкать к этой записи, когда есть общепринятая (как в русском, так и в английском) запись отрицания
    ¬
    .
2024-01-20 18:44:02/
Увидел на странице https://en.wikipedia.org/wiki/Negation.
Так что, можно оставить просто
~
(как во всех других ЯП, в т.ч. Julia и даже в APL [хотя в нём используется символ
, но он очень похож на
~
]
) и заменять
~
на
¬
только при отображении в REditor (и по умолчанию можно даже не заменять наверное).