Программные интерфейсы (= протоколы, форматы, языки, API...) подвержены естественному (ненамеренному) изменению со временем, «дрейфу». Я давно хочу провести параллели между диахронией интерфейсов и диахронией естественных языков (далее NL). Как минимум это занятно. Как максимум — а вдруг удастся, отталкиваясь от методов и результатов лингвистики, намутить что-то предсказательное для интерфейсов?
Сваливаю некоторые мысли сюда, вдруг кто-то захочет развить. Это моя первая попытка выделить в языке HTML уровни, соответствующие уровням NL, и на каждом привести примеры диахронии. Чистая спекуляция и handwaving.
Почему именно HTML. Навскидку, из знакомых мне интерфейсов, HTML быстрее всех «дрейфует». Я вижу тому несколько причин, но о них потом.
«Фонетика» и «фонология». «Звуковой» уровень HTML — это его синтаксис. Пусть вас не смущает, что у NL тоже есть синтаксис, это ложный друг. То что происходит на уровне лексера (поток токенов) — это «фонетика», а на уровне парсера — «фонология». Автор HTML-кода видит токены-«фонемы» /</, /div/, />/, но его не волнуют символы, из которых состоит токен /div/. Опечатки можно не рассматривать, поскольку, в отличие от других ошибок, юзер-агенты ничего с ними сделать не могут.
Пример «звукового закона» HTML (в левой части пробелы лишние, ну вы поняли):
/& amp;/ > /&/
/& quot;/ > /"/
/& lt;/ > /</
/& gt;/ > />/
Иными словами, есть тенденция не экранировать амперсанд и т. д. в виде character references, как положено, а оставлять в тексте как есть. Вы скажете: где же тут диахрония, так было испокон веку. И вы вероятно правы. Но, если раньше это было однозначно ошибочно, то сейчас в HTML5 даются чёткие правила, как это распарсить (http://www.w3.org/TR/html5/tokenization.html#character-reference-in-data-state), то есть это вроде как уже норма.
Ещё один «звуковой закон»:
/"/ > ∅ вокруг некоторых значений атрибутов (грубо говоря — достаточно простых, например целых чисел)
То есть, вместо border="0" пишут border=0. Опять же, так делали всегда, и в HTML4 это валидно. Но в середине-конце 00-х оборачивать всё в кавычки было best practice, в XHTML это обязательно, а сейчас, как мне кажется, в HTML5 стало модно кавычки убирать. (Жаль, нет данных. Надо идти в поле ;D)
Тенденция опускать закрывающие теги, даже там, где по норме этого делать нельзя (например в XHTML), — это, типа, упрощение геминации получается. Опять же, в HTML5 этого уже не стесняются.
«Грамматика». Пока точно не знаю, что является «грамматикой» («морфологией» и «синтаксисом») HTML. Наверное нелокальные структурные связи внутри документа и между документами. Например, если в одном месте есть <a href="#foo">, а в другом месте <div id="foo">, то это что-то типа согласования.
Тут можно рассмотреть «утрату продуктивности» HTML как приложения SGML. Версии HTML со второй по четвёртую определялись через SGML DTD. Но юзер-агентов, которые бы парсили HTML по этому DTD, были единицы, все остальные работали с HTML как с вещью в себе. В результате в HTML5 (в его не-XML варианте) от ссылок на SGML отказались, весь парсинг описан прямо в спеке (http://www.w3.org/TR/html5/parsing.html#parsing). Остались угловые скобки, слэши, да жупел <!DOCTYPE html> — fossilized конструкция, не несущая функциональной нагрузки.
Мне это больше всего напоминает ИЕ аблаут. Он был ключевой морфонологической чертой ПИЕ, потом он умер, но в языках-потомках осталось множество следов, которые сегодня осмысливаются как просто нерегулярности.
«Лексика» и «семантика». «Лексика» HTML — это его элементы и атрибуты. У них есть «семантика» — то, чего хотят добиться авторы HTML-кода с помощью данных элементов/атрибутов. Не нужно путать эту «семантику» с той, что прописана в спеке, которую имеют в виду, когда говорят «semantic HTML (http://en.wikipedia.org/wiki/Semantic_HTML)». Эта нормативная семантика — частный случай нашей «семантики».
«Семантические» сдвиги в «лексике» HTML в основном по оси «смысл—представление» (ср. др.-греч.
καλός 'красивый' > новогреч.
καλός 'хороший'). Пример — элемент BLOCKQUOTE, исходное значение которого — «блоковая цитата», но в народном HTML (vulgar HTML) он приобрёл значение «блок текста с отступом по левому краю». Натуральная метонимия. С элементами B и I произошло обратное: начинались как чисто презенатционные, но в HTML5 из них выжали какое-то (хоть и расплывчатое) логическое значение (http://www.w3.org/TR/html5/text-level-semantics.html#the-i-element).
Отдельная эпопея — элемент TABLE. Сперва это таблица, потом им пользуются для вёрстки всего подряд, потом в 00-х возникает чуть не целое движение против презентационных таблиц (табу?).
Словообразование в HTML бедное: только априорным придумыванием. Заимствований из других языков сходу не назову, хотя в принципе они возможны (случаи встраивания в HTML других пространств имён, вроде SVG или MathML, разумеется, за заимствования не считаем, — это code-switching).
Рождение микроформатов (http://en.wikipedia.org/wiki/Microformat) — возникновение идиоматики + некого жаргона.
«Письменность» HTML — это DOM (http://en.wikipedia.org/wiki/Document_Object_Model). Код HTML-документа — линейный поток токенов — это «устное высказывание»: вылетит — не поймаешь. DOM же поддерживает random access, как и NL-письменность (особенно если это письменность на компьютере). DOM аккуратненько обрубает нам как раз «звуковой» уровень, оставляя всё остальное.
Про диахронию тут сказать пока нечего, кроме того, что «письменность» возникла (не сразу — как и у NL) и прошла через несколько стадий: DOM1→DOM3 (клинопись→алфавит?).
«Социолингвистика». Это очень благодатная тема. Тут есть и литературный язык, и безграмотная речь низших сословий, и граммар-наци, и проекты реформ... Надо изучать.
TODO. Рассматривать не только HTML, но и другие компоненты открытой веб-платформы — CSS, JavaScript, HTTP. Исследовать историю этих интерфейсов, составить базу фактов.
О да, когда я составил сайт в точности по методу, которому нам учили в 2000 году, W3C в 2010 году нашёл в нём с десяток ошибок. Исправил.
Цитата: vfaronov от Отдельная эпопея — элемент TABLE. Сперва это таблица, потом им пользуются для вёрстки всего подряд, потом в 00-х возникает чуть не целое движение против презентационных таблиц (табу?).
Даже не только презентационных, иные выступают за отмену тэгов
table tr td и подобных вообще.
Вот, например: «Таблицы CSS лучше таблиц HTML? (http://ruseller.com/lessons.php?rub=2&id=1291)».
Это можно уже назвать «проникновением конкурирующего диалекта/арго», если за «диалектный континуум» принять связку HTML+CSS+JavaScript.
Цитата: vfaronov от Словообразование в HTML бедное: только априорным придумыванием.
Не всё так печально.
В HTML5 можно объявлять пользовательские атрибуты (specs (http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data)), что, собственно, является запоздалым влиянием предка — XML, в котором объявляется всё что угодно. Впрочем, через DOM можно создать тэг с произвольным именем и работать с ним как с обычными (по крайней мере в Опере). Оно, канешна, уже не столь валидно, но может быть
полезно.
А о юзер-атрибутах здесь:
- http://designformasters.info/posts/custom-data-attributes/
- http://xandeadx.ru/blog/javascript/224