jayrandom: (Default)
[personal profile] jayrandom
Дипломная в универе у меня была связана с компрессией данных, а конкретнее - теста.
Об избыточности дефолтного кодирования, исследовании "дисбаланса" наличных данных и создании такой модели данных, которая лучше (т.е. плотнее) использует наличное кодовое пространство. Теория Шеннона, код Шеннона-Фано, Хаффмана, Арифметическое кодирование... - вот это всё.

Сегодня на рассвете до меня наконец дошло, что то, чем я прямо сейчас занимаюсь (изобретаю язык программирования), имеет очень реальную связь с теми идеями о кодировании. Но... with a twist. А именно, я наконец-то понял, откуда в языках программирования возникают всякие уродливые формы синтаксического эскейпинга.

Например: команда на каком-нибудь Bash делится на отдельные параметры пробелом. А что, если пробел должен входить в один из параметров? Закавычим. А что, если кавычка тоже входит в параметр? Заэскейпим или закавычим другими кавычками. А что, если другая кавычка тоже? Заэскейпим. И так далее. Чем дальше в лес, тем менее красиво, и тем больше связанных с этим сложностей (хотя тем реже, конечно). В случаях, когда нужно насквозь записать строку, которая вынужденно пройдёт 3-4 уровня "деструктивной интерпретации", хочется стреляться.

Так вот, до меня дошла, как сказать, глубинная причина этого феномена. Состоит она в том, что при создании новых языков мы опираемся на заведомо пересыщенный алфавит. Всё в этом алфавите возможно, любые символы могут встречаться. И новый язык, рождающийся над этим алфавитом, вынужден тесниться ещё в утробе. А это, (эксплетив), неправильно! Алфавит должен "дышать" - его нужно изначально создавать в расчёте на возможное расширение, даже в НАДЕЖДЕ на будущее расширение, с большим количеством запасных символов. Давно прошли времена, когда критически не хватало модемного времени или места на магнитной ленте. Да, память кончается, но если посмотреть, как её уже транжирят, возжи можно и подотпустить. Десяток-другой разноцветных пробелов или кавычек легко решат все эти проблемы, а для текстовых кодировок это совсем небольшая жертва.

Пример спланированной избыточности в окружающей нас технологии: на большинстве клавиатур есть целый ряд переназначаемых клавиш F1..F12, а то и больше. Они дошли до нас из седых 60х, и очень нехотя вытесняются всякими тачбарами. Многие пользователи не знают, что с ними делать, но художники, фотографы или видеомонтажёры за них пасть порвут и моргала выколят. И недаром!

Date: 2021-05-10 07:28 pm (UTC)
From: [identity profile] chip33.livejournal.com
Ну, программы системного уровня воленс-неволенс надо делать с учетом ограниченности алфавита, нет? Хотя согласен, более изящные и продуманные способы эскейпинга — это очень важная тема. И в баше они не слишком тщательно над этим подумали. Можно было что-то вроде UTF8 придумать универсальное. Но, с другой стороны — универсальность и расширяемость несет с собой проблемы с совместимостью — ибо вечно будут разные противоборствующие варианты, как делать одно и то из разных источников, если открыть для этого возможность.

Date: 2021-05-11 05:26 am (UTC)
From: [identity profile] jayrandom.livejournal.com
Ну вот поэтому об этом нужно заботиться немножечко заранее, пока никто ничего на систему сверху не нарастил. Если бы в ASCII было 20 условных символов типа "универсальный сепаратор 1..20", из них можно было бы черпать во все языки. И редакторы современные всё равно поддерживают цвет, так что вполне могли бы эти пробелы раскрасить и за синтаксической сбалансированностью следить.

Думаю, ретрофит этого дела в существующие языки тоже можно было бы организовать при желании, но нормально только там, где Беневолентный Диктатор сможет своим авторитетом (или какой у него там беневолентный инструмент) подавить возможные разногласия.

Profile

jayrandom: (Default)
jayrandom

January 2026

S M T W T F S
    1 23
45678910
111213141516 17
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 20th, 2026 04:31 am
Powered by Dreamwidth Studios