Символьные кодовые страницы: управление назначением кодовой страницы, которое означает, что "следующий визуализированный символ (в этом исходном коде) экранирован?"
Я признаю, что этот вопрос может быть неопровержимым или чрезвычайно трудным для ответа.
Кроме того, несмотря на то, что я ожидаю, что эта аудитория будет знакома с escape-последовательностями, например, в языках сценариев, по соображениям ясности, которые вы увидите позже в этом посте, я рассмотрю эту концепцию:
Под "экранированием" я подразумеваю, например, печатные символы, которые интерпретируются как "Не используйте следующий символ как обычно; интерпретируйте его в другом контексте". Контексты для этого включают символы, предназначенные не для интерпретации как код, а как буквально напечатанные символы или, наоборот, символы, которые обычно могут интерпретироваться как буквальные символы, которые мы хотим интерпретировать вместо этого как код. Мои примеры (более запутанно, я теперь понимаю) используют последний случай.
Конкретный пример: регулярное выражение, используемое с 'nix sed, которое, если оно не экранировано для sed, выглядит так:
([^0-9]*)(20[0-9]{2})([^0-9]{1,2})([0-9]{1,2})
Но когда экранируется оболочка, чтобы передать регулярное выражение в sed таким образом, что sed знает, что символы должны интерпретироваться не как буквальные символы, а как код регулярного выражения, вся строка становится намного более уродливой (и гораздо менее читаемой человеком):
\([^0-9]*\)\(20[0-9]\{2\}\)\([^0-9]\{1,2\}\)\([0-9]\{1,2}\)
Escape-символы (или последовательности) являются одним из запретов программирования. Это особенно верно для длинных строк (или строк кода), где целесообразно либо уделять особое внимание и / или использовать инструменты, которые создают и удаляют escape-последовательности.
Я оглянулся и не нашел решения, подобного тому, которое я предложу, но не зная, как это можно назвать, если оно существует, и не будучи экспертом, поиск был тщетным.
Где я говорю такие вещи, как "управление назначением кодовой страницы", я говорю о кодовых страницах в смысле таблиц печатных (и непечатаемых) символов, которые компьютеры используют для визуализации и управления макетом текста и т. Д., Как объяснено в статье в Википедии "Кодовые страницы". Вы могли бы (свободно) назвать эти "компьютерные алфавиты", если хотите. Когда я говорю "назначение кодовой страницы", я имею в виду запись в "алфавите" компьютера, интерпретируемую как визуализированный глиф (печатный символ) или непечатный управляющий код (непечатные символы).
Идея состоит в том, чтобы назначить конкретное не распечатанное назначение кодовой страницы управления для обозначения "интерпретировать следующий символ как экранированный", который текстовый рендерер мог "прочитать" и указать программисту, изменив, например, цвет и / или яркость экранированного символа. это следует контрольному коду. И / или назначение контрольной кодовой страницы может быть печатным глифом, например, стандартизированным, неинтрузивным символом акцента, который не конфликтует с другими акцентами в любых алфавитах, связанных с латинским алфавитом.
Это непечатное назначение кодовой страницы также будет считываться интерпретаторами и компиляторами аналогичным образом.
Предположим, что визуализированная версия с более длинным регулярным выражением, чем то, что я дал выше:
Если бы у нас было распечатанное назначение кодовой страницы, которое означает, что "следующий символ экранирован", экранированные символы можно, например, просто сделать ярче, чтобы указать, что они экранированы:
Это гораздо проще для человека интерпретировать (например, это трудно начать с регулярного выражения), чем следующее, которое вместо этого использует печатные символы для escape-последовательностей:
Преобладающая, если не универсальная ситуация, когда я пишу это, заключается в использовании печатных символов в escape-последовательностях, а не в назначениях кодовых страниц без печати.
Сопутствующими проблемами для предложенного решения было бы обеспечение соответствия назначенной кодовой странице экранированному множеству инструментов, которые используют программисты. Программисты также должны знать, какие утилиты поддерживают назначение экранированных кодовых страниц, а какие нет. Кроме того, для любых инструментов, принимающих такое назначение кодовой страницы, было бы лучше явно указать, являются ли они обратно совместимыми (могут ли они использовать как печатные символы, так и не напечатанное назначение кодовой страницы для escape-последовательностей).
Я бы не предпочел какой-либо язык программирования или инструмент, который бы выполнял это каким-либо образом, кроме назначения кодовой страницы управляющего кода. Тем не менее, мне было бы очень интересно узнать о любых инструментах, которые это делают.
Итак, после всего этого у меня возникает вопрос: какие языки программирования существуют для этого и / или уже есть назначение кодовой страницы, которое делает это?
2 ответа
- Насколько я знаю, почти все языки программирования придерживаются печатных символов ASCII *.
- В ASCII уже есть специальный управляющий символ escape, который неудивительно называется Escape или ESC (сходство с клавишей Esc не случайно), код 27 или 0x1B. Но этот персонаж больше не используется таким образом.
- Я думаю, что вы можете получить довольно близко к тому, что вы хотите, просто подсветка синтаксиса.
- Если вы хотите разорвать прямое соответствие между байтами в редактируемом файле и символами, которые вы видите на экране, тогда я думаю,
\
может оставаться побегом Вам просто нужно найти достаточно настраиваемый редактор и настроить его так, как вы хотите.
* Два основных исключения, о которых я могу подумать, здесь не интересны: APL с собственным набором символов и языков, поддерживающих Unicode в идентификаторах.
Я не знаю ни одного языка программирования, который бы делал то, что вы предлагаете. Проблема с хранением вашей программы в непечатном текстовом формате заключается в том, что ваши пользователи останавливаются только на использовании инструментов, которые понимают этот конкретный непечатный текстовый формат.
Также предположим, что вы выбрали определенный непечатный управляющий символ для обозначения экранированных символов. Тогда как бы вы их удобно набрали? Если вам нужно ввести специальную клавишу для экранирования символа, вы также можете легко сделать его обратной косой чертой. В конце концов, вы можете печатать красивые печатные символы так же легко, как и непечатные - если вы разрабатываете синтаксис языка, чтобы ваш умный редактор мог правильно определить, какие литералы должны быть напечатаны.