Антоний Великий говорил: «Наступят последние времена, когда девять больных придут к одному здоровому и скажут: ты болен, потому что ты не такой, как мы».
И тогда здоровый возьмёт скамейку для приёма здоровых гостей, и покажет больным, кто здесь здоровый. Не надо додумывать этому рассказу печальный конца, преподобный Антоний не говорил, что эта будущая встреча закончится плохо для здорового. Скамейка в наших руках, и мы не будем их опускать.
Давайте поговорим об американском стандарте кодов и описании знаков системой единиц Матрёшка.
1. Отряд знак
Знаки - это четвертый отряд единиц языка, наименьшая из единиц и основа языка программы - азбука языка.
(Рисунок можно открыть отдельно в полный рост.)
Стандартное представление знаков настолько необычно, что здоровый человек может усомниться в своём ли он уме. Собственно, на это оно и рассчитано - заставить программиста отказаться от здравого смысла и перейти на другую сторону - к абстрактному мышлению, не привязанному к предметам, а только к числам.
2. Американский стандарт кодов ВИСКИ
Стандартное представление знаков - это американский стандарт кодов интернационального обмена - сокращенно АСКИ, для лучшего запоминания - ВИСКИ.
На первый взгляд, этот стандарт принимали сильно пьющие люди. Знаки перепутаны в нём самым невероятным образом, и вы начинаете искать в этой путаница систему, чтобы понять её смысл. Ну не могут люди настолько всё перепутать, и не взаправду же они были пьяными.
Пьяными не были, по крайней мере, не от виски, а перепутать могли и даже были обязаны.
Разгадка путаницы находится в названии стандарта - "стандарт кодов", а не "стандарт знаков".
Перед нами азбука языка не здорового человека, но математика, который хочет оборвать естественные связи мышления с настоящими предметами, и создать новые связи с абстрактными числами. Поэтому порядок оставлен только для чисел знаков, или кодов, и разрушен для самих знаков.
Слово код (латинское - "доска", "запись") имеет два связанных смысла - это:
1) знак в определенной системе, и
2) тайный знак для непосвященных в эту систему.
Математики навязывают программистам свою особую систему записи, которая должна оставаться тайной для непосвященных. Эта система называется кодированием, и она касается как описания языка, так и способа записи программы.
Если вы не находите таблицу ВИСКИ странной, то вы готовы войти "в матрицу", в кроличьею нору, в систему абстрактного мышления.
Если вы считаете таблицу ВИСКИ нормальной, то вы уже там, "в Зазеркалье", и находитесь в чужом уме.
Если вы тоже находите ВИСКИ странным, тогда поздравляю, Алиса, ты в своём уме.
Но во всех случаях наши действия будут одинаковыми. Мы продолжаем честно описывать сам язык, а не чьи-то представления о нём.
Итак, рассмотрим знакоряд системно.
3. Знакоряд системно
Отряд знак - это наименьшая единица записи и основное средство передачи сведений.
"Передача сведений" - это основа деления знаков.
За основу взята консольная передача сведений. Консольная, или соначальная, программа представляет из себя простой "телетайп" - соединение двух пишущих машинок, которые передавали друг другу сведения только через знаки. "Машинка" программиста печатает знаки, которые появляютсь "на бумаге" у пользователя (на экране), "машинка" пользователя (клавиатура) печатает знаки, которые появляются "на бумаге" у программиста (в ячейках памяти).
И да, программистам, рожденным до 1980 года, было хорошо знакомо устройство пишмашинки, они легко его воображали. Поэтому дальнейшее описание знаков для них было естественным. Ну, а более поздним поколениям придётся поднапрячь воображение.
Деление знаков повторяло устройство пишмашинки и состоит из трёх подотрядов:
- знак печатный - основной печатный знак "машинки"
- знак управляющий - управляющий знак "машинки"
- знак расширенный - дополнительный печатный или управляющий знак "расширенной машинки"
Печатный подотряд состоит из 4 родов знаков:
- Знак числа - десять знаков
- Знак латиницы - два вида: прописной и строчный - 26 и 26 - 52 знака
- Знак действия - 4 вида - 15 знаков
- Знак препинания - тоже 4 вида - 17 знаков
Всего 94 знака.
Некоторые знаки препинания одновременно являются знаками действия, но каждый знак считается один раз.
4. Управляющие знаки
Перейдём ко второму подотряду - управляющие знаки.
Они начинаются со знака пробел.
Мы не зря сказали про пишущие машинки. В пишмаш клавиша пробел - это не печатный, а управляющий знак, который переводит каретку (ролик с бумагой) в новое положение правее, тем самым оставляя на бумаге пробел. Поэтому пробел - это не печатный знак, также как и табуляция, и возврат каретки, и перевод строки.
А ещё у печатных машинок была клавиша "назад", которая возвращала каретку на один знак назад, левее. И пользователь мог запечатать одну букву другой буквой, но не знаком пробел.
В консольных программах это уже изменилось: пробел запечатывает прежде напечатанный знак. То есть в программе пробел - это скорее печатный знак, только не ясно, какого рода - не число, не латиница, не действие и не препинание.
Поэтому деление на печатные и управляющие знаки определяется именно устоявшимся логикой пишущих машинок, а не бурно развивающейся логикой ранних программы.
Управляющие знаки делятся на три вида:
- строковый - управляющий записью строки, это 5 знаков, необходимых для всех программ со строками: пробел, табуляция, перевод строки (картеки) , возврат каретки и конец строки
- соначальный - управляющий только соначальными (консольными) программами, в том числе 1) знак назад, 2) знак клавиши отказ (escape) и 3) звуковой знак, знак гудка - всего три знака.
- и системный - управляющий системными задачами.
Говорить о системных знаках бессмысленно без обсуждения самих системных программ, в которых они используются, а это очень закрытые и очень старые программы. Поэтому мы приводим название этих знаков, но бледно-серым цветом, как в целом бесполезные.
Однако важно знать общее число управляющих знаков - 34, и следовательно системных знаков - 26.
В сумме 94 + 34 дают 128 - ровно половина байта - основной единицы размера ячейки памяти. И скоро мы объясним, почему это важно.
5. Расширенные знаки
Теперь переходим к подотряду расширенных знаков и объясним его странное название.
Подотряд расширенный знак делятся на два рода:
- буквенный - это буквы всех алфавитов, кроме латиницы: русский, греческий, арабский, грузинский и так далее. Огромное число знаков.
- и всячный - это знаки типографские, математические, табличные - для рисования рабмок таблицы, или псевдографика, смешные рожицы и так далее. Число всячных знаков поменьше, чем буквенных, но тоже немалое.
В настоящее время для записи знаков принята восьмеричная система юникод - UTF-8 - восемь байтов на запись одного знака. При такой размере ячейки запись любого числа знаков - не вопрос, каждый знак получает своё собственное число.
Кстати, восьмеричную систему Юникод разработал наш добрый знакомый Кен Томпсон - создатель системы Юникс и нашей учебной программы Полёт. Но только в 1992 году, а распространилась она лишь в начале 2000-х.
А предшествующие 50 лет действовала другая система записи - единичная, один байт на один знак, дающая возможность записи только 256 знаков.
Первая половина чисел байта - числа 0-127 - были отведены под основные знаки: печатные и управляющие.
Вторая половина байта - числа 128-255 - под расширенные знаки.
Здесь мы снова обращаемся к устройству пишмашинки.
В основном машинки были одноязычными, вы печатали текст на основном языке, в случае программы - на латинском, и если вам был нужен другой язык, то вы брали другую машинку, вставляли в неё свой лист, и допечатывали нужные знаки - русские, греческие, арабские, типографские, математические, псевдографику и так далее.
Единичный знакоряд предоставлял как бы расширенную машинку, которая давала возможность работы сразу с двумя азбуками, например, латинской и русской. Откуда и слегка странное название подотряда - расширенный. Точнее было бы сказать дополнительный, или допечатный. Но это историческое деление, основанное на соначальных программах и пишмашинках. Пусть так и остаётся.
Для показа или приёма знаков третьего языка, например, греческого, необходимо сменить основной знакоряд на знакоряд греческого языка.
Таким образом, получилось большое количество знакорядов для разных языков, всякой всячины и разных операционных систем.
Во времена системы Доса, в консольные времена, были востребованы знаки рисования таблицы - так называемая псевдографика. Во времена виндус, когда появились графические программы с произвольными линиями, таблицы перестали рисовать знаками, и единичный знакоряд дополнили разные типографские знаки. Правда, идущие в запутанном порядке. И здесь мы возвращаемся к американскому так называемому стандарту.
Давайте бросим последний взгляд на знакоряд здорового человека. Все знаки имеют разумные числа, ноль - это 0, один - это 1, Прописная А - это 10, F - это 15, как и принято в шестнадцатиричной системе исчисления, знаки действия и препинания идут по порядку, управляющие знаки тоже. Красота - это порядок.
6. ВИСКИ в цвете
Теперь вернём на экран американский стандарт виски.
Для понимания его запутанности выделим цветом однородные знаки.
Так смотреть стало ещё больнее. Буквально, "правда глаза колет".
Виски не рассчитан на выделение родов знаков, он переключает внимание на стройный ряд кодов, которые здесь записаны перед знаками.
Для математиков абстрактные числа - всё, любые настоящие предметы, в том числе знаки - ничто.
Также для математиков свойственно расстройство числовой навязчивости, известное как ОКР. В случае кодов оно выражено зависимостью от разных степеней числа 2: 16, 32, 64.
Это сектантская навязчивость, идущая ещё от Пифагора, который запрещал своим ученикам наступать на стыки плит, приказывал считать некоторые числа хорошими, а некоторые плохими, и запрещал собираться больше, чем одно число, которое мы нарочно не вспоминаем, как заразное суеверие.
У ВИСКИ заметно деление знакоряда по 16 - русские буквы записаны кусками по 16 в ДОС, и кусками по 32 в Виндус, с выносом вовне 33-ей буквы 'ё'.
Но самое печальное, что знаки русских букв в двух знакорядах имеют совершенно разные места и числа, что приводит к путанице в работе с ними. И если обычный стандарт уже достаточно запутан, компания Микрософт дополнительно переставила русские буквы местами - это её фирменный почерк: переворачивать привычный порядок, не меняя предмет по сути.
Это путаница имеет практическое последствие. Для передачи русских сообщений, а не кракозябр, надо дополнительно указывать знакоряд Виндус - 1251.
Завершаем описание знаков показом системного знакоряда со стандартными числами виски.
7. Знакоряд с числами «ВИСКИ»
Современные программы обрабатывают знаки со стандартными числами, и от этого никуда не уйти. Но никто не мешает программистам смотреть на знакоряд в упорядоченном виде, в первую очередь на знаки, а уже потом на их беспорядочные числа.
Числа знаков напрямую использовать приходится не часто, так что путаницу в них можно и потерпеть.
И верить, что в будущем "пьяный" американский стандарт кодов будет заменен на трезвый русский знакоряд.
Как когда-то микенское письмо сменило минойское, а греческое - минойское, латинское - греческое. История продолжается.
Порядок в знаках мы установили. Можно опустить скамейку, присесть и отдохнуть.
Комментарии
ну ты, блин, даешь ))
а в каком смысле-то? ))
с утра в субботу читать такое )
сложное? глупое? с картинками?
многозначительное
и с букой ё не все понятно. но это как всегда )
мы с буквой ё ведём старые танцы, но иностранцам её в обиду не дадим.
американский нифига не заходит - самогон-самогоном. Канадский рекомендую..
Не най. я последние года 3 стал фанатом спирта, точнее настоек :-) Хорошая очистка, вне зависимости от количества с утра как стеклышко. Вариантов настаивания миллион.
спирт - это хорошо очищенный самогон!
Чрезмерно очищенный! ))
Открою страшную тайну: байт - это не количество бит. Байт - это размер машинного слова. В телетайпе он например всего пятибитный. А таблица ASCII создавалась на тот момент, когда длина байта считалась в 7(!!!) бит.
В общем не надо придумывать сущности сверх необходимого. Достаточно всего лишь почитать старые книжки (80-х годов). Там рассказано много нового и интересного. Для кто решает задачи с помощью гигагерц и гигабайт.
Эмммм.... Предложенный порядок - абстракция так сказать высокого уровня, и даже если её зачем-то принять (из текста не очень понятно - зачем), то реализовать эту абстракцию всё равно придётся на нижнем уровне. На машинном. Там, где все эти буковки - числа. Программистам, конечно, никто не мешает упорядочивать знакоряд как угодно, но "в руках", на ощупь, букву держит не программист, а программа А для программы это - число, точнее код, и программе как-то глубоко фиолетово, как этот код выглядит в глазах пользователя. Радикально вопрос можно решить перезаписью знакогенератора в DOS или шрифтами в Windows, но опять непонятно, зачем. И вообще все эти кодировки - глубоко прошлый век Нынче Unicode рулит. Стандарты могут быть хорошими, а могут быть плохими, но важно не это, а то, сколько народу оными стандартами пользуется.
И-23 дотянулся таки и покусал...
Бессмысленно раскрашивать ASCII в разные цвета и пытаться найти там логику на основании этого, если не знать истории вопроса от телетайпа и до наших дней. Порядок знаков, говорите, запутанный? А каким, к примеру, является "естественный" порядок у знаков препинания или математических операций? Точка или запятая должна идти раньше? А цифры почему перед буквами, может быть буквам обидно такое, тем более что без цифр вообще можно обойтись?
Короче, не надо людям забивать голову подобными вещами. Людей надо нещадно бить по рукам за попытки найти в имеющемся порядке логику, здравый смысл и тайный умысел, вместо того чтобы пользоваться локалями и использующими их функциями сортировки и сравнения. Попытка "переосмысления" в данном случае по полезности примерно равна критике красоты машинного кода - и то и другое давно не предназначено для человеческих глаз и скрыто под целыми пластами абстракций.
Не ... Это технарь Владислав покусал гуманитария !
Я не знаю, что может быть страшнее...
а вообще тема не раскрыта.
Очень прикольная история, как стандартной стала "альтернативная" раскладка русских букв, а "стандартная" почти ушла в вечность - но задержалась
Очень любопытно, что в винде активно используются обе раскладки. "Стандартная" - по немом 866 codepage в консоли, а "альтернативная" во всех графических приложениях
И сегодня шрифт "terminal" имеет 866 раскладку, что весьма удивительно (для тех, кто в курсе, конечно)
Про букву ё мало сказано
не раскрыта тема, короче
Ну так я и упомянул что тут не след смотреть на раскраску, тут надо техническую историю изучать. Но это такой, абстрактный интерес из которого ничего не следует, кроме выводов "что выросло - то выросло". Ну еще и то, что составители тех стандартов были максимально далеки от народа. Американские составители, естественно, в рамках своих американских контор, рисующие таблицу на "отцепись", лишь бы продать решение. А народ - он тут весь. Советские составители таблиц были, в целом, не лучше американских. Руководствовались чем угодно, кроме видимо здравого смысла.
Народ безмолвствовал
Именно здравый смысл и привёл к двум конкурирующим кодировкам
На ввезённой технике и софте отсутствовали русские буквы (в знакогенераторах), что приводило к смешным решениям
Я, к примеру, застал терминалы VT52, у которых сбоку Кулибины видели переключатель, для изменения кодовой страницы. В одном положении на экране был английский текст, в другом - буквы менялись на русские
Несколько ранее, на ЕС1052 решили сделать заглавные русские буквы вместо мелких английских. Смешно выглядели задачи на расчёт, в которых параметры указывались такой транслитерацией
Очень интересная вся эта история
И совсем не причём Микрософт, к слову. Они просто взяли существующие кодировки и назначили им номера кодовых страниц
Два здравых смысла? Ну... чего только не случается
Не, VT52 я застал только краем, а ЕС практически никак. Хотя не обошлось без того чтобы написал конвертер для файлов - обмен между МС-0511 и PC на флопиках уже случался эпизодически и был похож на свежий геморрой.
Да там все мало-мало отличились... У Sun было своё видение, у IBM своё, MS и Apple тоже... не преминули... Короче, прошло наконец достаточно много лет, чтобы всё это вспоминалось не более чем недоразумение. Юникод тоже не идеален - то ошибки какие вылезут, то некая кривизна дизайна в некоторых местах, но слушать о том что его создание - это Заговор Рептилоидов Против Великой России - тоже перебор, если честно. Обычная живая система, на 99% покрывающая все нужды каждого. Даже на 99.99 наверное...
Однажды мой одногруппник, а ныне преподающий доцент и КТН жаловался, мол молодёжь бестолковая пошла, не знает таблицу ASCII. За это он был морально выпорот, т.к. в реальной жизни давно используется Unicode, да и нах не нужно загружать мозг инфой, которая достаётся за секунду поиска в интернете.
Аски является началом юникода. Никакого противоречия.
А на уроках русского тоже надо давать церковнославянский?
На уроках русского надо учить азбуку и первые 15 букв. Примерно так соотносится аски и юникод.
Не совсем. Аски, это алфавит времён князя Владимира. Юникод - современный. Собственно, мой вопрос про изучение церковнославянского актуальности не потерял. Более того, изучение Аски отнимает время от более современных дисциплин. Потому, например, в Израиле на третьем курсе в качестве курсовой пишут операционную систему, а у нас такого на дипломах не делают.
Собственно аски - это уродец, которого никогда не поздно утопить.
Единичный знакоряд - это азбука языка, мама мыла раму. Я не понимаю, как получасовое изучение этого вопроса помешает израильским студентам. Кстати, писать систему без управляющих знаков не получится.
Аски это инструмент для определённой техносреды. Сейчас она изменилась: другие процессоры, объемы памяти и т.п.
Операционную систему не получится написать, не зная системы команд центрального процессора. Аски не относится к системе команд, это способ кодирования данных для передачи текста. Не путайте эти понятия.
Ну зачем такую чушь писать. \b \a и остальные упр знаки - не про передачу текста, и вообще не про текст.
Коллега, вы сморозили конкретную херню. Похоже с матчастью у вас не пробел, а пропасть и мне жалко ваших студентов. Почитайте хоть в Википедии: для чего делался стандарт ASCII, а потом просветите меня и аудиторию: какое отношение он имеет к написанию операционных систем
отличный ответ: сам дурак. Корнет, вы женщина чтоли?
А по теме будет ответ? Я задал конкретный вопрос. Вы, если собираетесь нести свет несчастной молодёжи, вполне можете дать вразумительный ответ. Хотелось бы в это верить. Этот ваш
высеркоммент - просто попытка слиться. Слив защщитан?вы очаровательны.
отвечу коту: для написания ос нужен однобайтовый алфавит. юникод-8 избыточен и неразумен. вы удовлетворены?
Вах, спасибо, конечно, но я женат.
Если вы любитель извращений, то да, достаточно нулей и единиц.
Хмм, утверждение мягко говоря странное. Я бы всё-таки рекомендовал вам почитать первоисточники: что и для чего предназначено. А уже после этого махать шашкой.
Кроме первого сообщения, вы говорите только туманные и требовательные вещи. Я поражён вашему пренебрежению к собеседнику. Ладно, адью.
Собственно, слив защщитан. Учите матчасть.
Автор, похоже, не знает о шестнадцатеричной системе, иначе не писал бы такую херню.