Диграфы и триграфы, а также замена на уровне отображения
Данная информация отчасти устарела, но оставлена для истории, в целях пояснения причин, по которым было решено добавить триграф
(+)и два диграфа
>=и
<=.
11l поддерживает только 4 диграфа и 1 триграф и вот почему.
Диграфы
'"и
"'нужны для возможности набора одиночных парных кавычек — символов
‘и
’{…} — в условиях недоступности подходящей среды разработки (например, REditor) или установленного средства назначения глобальных горячих клавиш (например, AutoHotkey).
Триграф
(+)заменяется на
⊕в исходном коде, т.к. замена на уровне отображения для этого символа нежелательна: уменьшение ширины в 3 раза слишком сильно бросается в глаза. К тому же, обозначение
(+)не используется ни в одном языке программирования, а символ ⊕ используется в публикациях, в Википедии и в текстах задач по спортивному программированию.
Диграфы
>=и
<=заменяются на
≥и
≤, соответственно, так как:
>=
и<=
выглядят не очень красиво, а<=
вообще выглядит как парный оператор для=>
;- замена на уровне отображения приводит к тому, что строка с
a >= b
будет длиннее строки сa ≥ c
и знаки сравнения не будут располагаться один под одним, как было бы красивее.
[+]не является триграфом, т.к. для него нет соответствующего символа для замены.
[&]и
[|]не заменяются на символы конъюнкции
∧и дизъюнкции
∨, т.к. эти символы легко путаются.
Символ
~не заменяется на
¬, т.к. это достаточно редкая операция и даже в языках программирования, использующих математические символы для обозначения операторов, таких как Julia и APL, для отрицания [побитового в Julia и логического в APL] используется символ
~, а не
¬.
!=не заменяется на
≠, потому что:
- символ
≠
слишком короткий и теряется в коде, замена на уровне отображения [в Fira Code и в REditor] выглядит красивее; - т.к. оператор сравнения
==
состоит из двух символов, то возникает несогласованность (строка сa == b
длиннее строки сa ≠ c
); - есть операция логического отрицания, которая обозначается символом
!
[что с ней делать — непонятно, не заменять же её на¬
], так что символ!
в любом случае будет ассоциироваться с отрицанием и присутствие его в обозначении оператора не-равно!=
вполне логично.
Опционально заменяются на уровне отображения в REditor:
C
заменяется на∈
;*
заменяется на×
или на∙
;~
заменяется на¬
.
Было решено отказаться от триграфа
(+)по причине того, что не очевидно, как его набирать глядя на код. (Это же относится и к диграфам
>=и
<=, хотя и в меньшей степени.) Кроме того, есть проблемы с отображением символа ⊕: в KDiff3 значок ⊕ слишком мелкий и некрасивый, а в Sublime Text и на GitHub-е — довольно большой в 1.5-2 символа шириной, при этом ломается выравнивание кода.
Но сама идея замены
(+)на
⊕имеет значимый положительный побочный эффект: цепочка логических выводов в итоге привела к тому, что было пересмотрено обозначение для оператора поразрядного НЕ.
2024-01-20 18:35:56
(-)заменяется на
¬, т.к.:
- парная ей операция
(+)
теперь заменяется на⊕
и в коде больше не используется; (-)
слишком непривычно выглядит, не используется больше ни в каком другом языке программирования, и я не вижу смысла привыкать к этой записи, когда есть общепринятая (как в русском, так и в английском) запись отрицания¬
.
Увидел на странице https://en.wikipedia.org/wiki/Negation.
Так что, можно оставить просто
~(как во всех других ЯП, в т.ч. Julia и даже в APL [хотя в нём используется символ
∼, но он очень похож на
~]) и заменять
~на
¬только при отображении в REditor (и по умолчанию можно даже не заменять наверное).