Анатомия и физиология HyperCard
Не уверен, что кого-то интересует, как был устроен HyperCard. Но не написать об этом не могу. Что-то из серии "Вы хотите поговорить об этом?".
Продолжение, предыдущая часть здесь, начало тут.
Концептуальная основа HyperCard - стопка карточек, с графикой и текстом, с элементами управления и... связь между мирами, разделенными сотнями световых лет.
На самом деле HyperCard намного интереснее, чем звезды и межзвездные пространства. О чем Сириусу говорить с Бетельгейзе?
Элементы "машинки" HyperCard
В чем все-таки секрет притягательной силы HyperCard, ведь им "заболело" множество людей. Что-то в нем было такое, психоделическое и трансцендентное?
Попробуем разобраться. Поверим алгеброй гармонию, так сказать.
HyperCard - это "конструктор для создания приложений". Такое виртуальное лего. Состоит он из очень небольшого набора тиражируемых пользователем элементов (это стэки, фоны, карточки, поля и кнопки) и небольшого же набора инструментов (несколько специальных стэков, экран Recent и Message Box).
Тиражируемые элементы
У каждого тиражируемого элемента - немаленький набор свойств, настраивая которые его можно было превратить если и не во что угодно, то близко к этому. Каждый тип базовых элементов играл свою, строго определенную для него роль - но в рамках его роли с ним можно было творить все, что душе угодно.
Стэк (stack) - это одновременно единица файловой системы, документ HyperCard, файл с типом ‘STAK’ и кодом создателя ‘WILD’, и область обитания всех остальных тиражируемых элементов. Вне стэка они не существовали. У HyperCard тип был, естественно, ‘APPL’, а код создателя, которым он и был - такой же, как у повелеваемых им документов, ‘WILD’.
Возникает вопрос: а почему не ‘HYPE’? Что за дикость ("wild" по английски "дикий")? Ответ на этот вопрос - в конце статьи.
Стэки бывали очень разными по размеру и полезности. Все приложения, создаваемые в HyperCard (стэквер), были именно стэками. В их числе - такие как Myst компании Broderb?nd, Focal Point и Business Class Дэнни Гудмана, прообраз wiki от Говарда Каннингема - к 2004 году существовали сотни тысяч более чем приличных программ, которые были всего лишь стэками.
В HyperCard 2.2 появилась возможность превращения стэка в автономное приложение, что еще больше приблизило разработку стэков к промышленному программированию, правда, лишив всех остальных возможности разобрать чужую программу и посмотреть, в деталях, как она устроена. Чем-то всегда приходится жертвовать.
Фон (background) - это объединение нескольких карточек (любого их числа) и, кроме того, комбинация графики, полей и кнопок, повторяющихся на всех карточках входящих в этот фон. Для редактирования фона в HyperCard был предусмотрен специальный режим, а для ясности он еще и выделялся прерывистой рамкой вокруг планки меню, похожей на кант погон вольноопределяющихся в российской императорской армии.
В стэке обязательно был определен хотя бы один фон, он мог быть пустым (без графики и без принадлежащих ему кнопок и полей). Фонов могло быть сколько угодно.
Карточка (card) - последний из тиражируемых элементов, состоящий из других элементов. Что-то похожее по смыслу на экраны в мобильных операционных системах. В карточке объединялись элементы фона, к которому она принадлежит, и ее собственные. И, кроме того, то, что видел на экране своего компьютера пользователь HyperCard, за очень редким исключением (экран Recent, например), было одной из карточек.
Другие элементы в карточке - это поля и кнопки.
Поле (field) - единственный способ существования редактируемого текста в HyperCard. Все остальные тексты (графика) в лучшем случае могли редактироваться только в процессе их создания. Поля состояли из теоретически неограниченного числа строк. На практике в классической системе Mac’ов стандартная (и очень качественная) структура для хранения и обработки текста ограничивала его размер 32-мя килобайтами.
В программах, которые должны были иметь дело с б? льшими текстами, это было одной из существенных проблем, которая успешно решалась (но способы ее решения держались в секрете). В HyperCard до преодоления 32-килобайтного барьера дело не дошло. Не было необходимости.
Если поле принадлежало фону, введенный в него текст хранился в памяти карточки.
Кнопка (button) - интерфейсный элемент запуска какого-то действия. В первоначальном замысле предполагалось, что их единственной функцией будет навигация, переход с одной карточки на другую, из стэка в стэк - но очень быстро выяснилось, что гораздо интереснее сделать их универсальными. Кнопки, так же как и поля, могли принадлежать как фону, так и непосредственно карточке.
Инструменты
К инструментам можно было бы отнести все команды, предлагаемые в меню приложения HyperCard, вплоть до Copy/Paste и создания/удаления/копирования карточек, но не будем впадать в крайности. Хотя, если бы я писал книгу, про некоторые из них я бы обязательно написал.
Одним из самых важных принципов чудо-приложения, вдохновленного трансцендентным духом вселенского разума, была навигация между карточками. Те самые связи между тем, что на первый взгляд может казаться никак не связанным одно с другим. Вот не смог я удержаться без намеков на звездную ночь в Лос Гатосе, в паре кварталов от того самого гаража родителей Стива Джобса...
Экран Recent показывал уменьшенные изображения 42 карточек, на которых пользователь побывал последними. Если какая-то карточка посещалась более чем один раз, Recent ее показывал только один раз. Это был модальный экран - выйти из него можно было только выбрав какую-нибудь из карточек. По-моему, это не изменилось и в HyperCard 3.0, навечно оставшемся публичной альфа-версией.
На самом деле, никакой эзотерики в этом навигационном инструменте не было. Это одна из любимых идей Джефа Раскина, а Билл Аткинсон, будучи еще студентом, прослушал курс графического пользовательского интерфейса у профессора Раскина.
К специальным стэкам классическое HyperCard’оведение (все издания гудмановского "Полного руководства HyperCard", рассыпанные в бессмысленные биты многочисленные гайды Apple Computer и мои собственные труды из начала 90-х последнего века прошлого тысячелетия), относит Home и почему-то Help.
Последний был замечательным, я его даже переводил на русский, и больше всего сегодня я рад тому, что он, по-видимому, не сохранился. Если у кого-то есть русский перевод Help, по-тихому пришлите его мне... И тс-с-с! Вдруг это мой!!!
А вот Home действительно играл почти мистическую роль в HyperCard. Настолько важную, что мое первое впечатление от www было омрачено отсутствием в Паутине самой главной страницы. Home был первой карточкой, открываемой HyperCard. В ней были собраны все (по мнению коммерсантов Apple) важные "линки" к самым важным стэкам. К счастью, эту карточку можно было редактировать, в ее фон можно было добавлять любое количество дополнительных страниц, прогибая изменчивый мир под себя.
Это был центр навигации, и это было здорово.
Message Box - это однострочный windoid (окно, которое не окно, в Mac’овской системе до сих пор есть их аналог, "плавающие окна", парящие над пользовательским интерфейсом и всеми другими окнами... По правилам Human Interface Guide, такие окна не должны быть большими и закрывать слишком большое пространство под собой. Узнаю, кто придумал в таких вот плавающих окнах выводить Mac’овский Help, размером в 3/4 экрана..., в который можно было вводить команды на языке HyperScript.
И не только. Это был еще и калькулятор. Калькулятор с доступам к тригонометрическим и логарифмическим функциям. Использовался он и для борьбы с блокировкой ресурсов... И много для чего еще.
HyperScript, чуть не ставший WildScript, я опишу в отдельной статье.
Объектно-ориентированное пространство
HyperCard была объектно-ориентированной, без возможности создания новых классов.
Классов официально было пять:
- стэк;
- фон;
- карточка;
- поле;
- кнопка.
Объекты этих классов обменивались сообщениями, между собой и с "системой", в ее роли выступал объект скрытого, приватного класса - само приложение HyperCard.
У каждого из объектов этих классов был набор свойств, и (за исключением кнопки) еще и контент, содержимое. В стэке - один или несколько фонов, в фоне - карточки, кнопки и поля, в карточках - поля и кнопки, в полях их текст. У кнопок были только свойства, среди них стиль, определяющий, как она должна выглядеть и вести себя.
Расширения
В Mac’е процедуры отрисовки и управления многими элементами интерфейса системы были... заменяемы и переопределяемы. Код стандартных окон, контролов, меню и даже планок меню располагался в кодовых ресурсах, типов WDEF, CDEF, MDEF и им подобных.
Я не уверен, что это началось именно с HyperCard, просто более ранних примеров я не помню - по тому же пути пошел и HyperCard. Для расширения стандартных возможностей приложения в конкретных стэках, в их "ответвление ресурсов" можно было добавить свой (или свои) ресурсы типа XCMD и XFCN.
Правда, сначала их надо было или найти где-нибудь, или написать. В конце 80-х этот код должен был умещаться в 32 K, но для машинного кода это довольно много.
Разница между XCMD и XFCN только в том, что последний - функция, возвращающая значение. Назывались подобные ресурсы "кодовыми". Теоретически такой ресурс можно было набрать в ResEdit, но... о сверхспособностях поговорим на другом ресурсе.
В начале 90-х многие приложения обзавелись кодовыми ресурсами, это стало модно, а на рынке и в бесплатных коллекциях появились наборы таких ресурсов на все случаи жизни, кроме только тех, которые случались в реальности конкретной вашей жизни.
WildCard vs Apple HyperCard
Все просто: Билл Аткинсон назвал придуманное им приложение WildCard, поскольку идея пришла к нему сама и неожиданно, как приходят дикие звери - но когда дело уже шло к релизу и за легализацию нового продукта взялись профессионалы, выяснилось, что эта торговая марка уже занята.
Казалось бы, какие пустяки - сама Apple использует чужую торговую марку (Apple Corps, звукозаписывающей компании Beatles, фактически собственности Пола Маккартни), а в наши дни в мире существуют две трехбуквенные системы, которые называются iOS и IOS.
Объяснять, что такое iOS, на AppleInsider’е вроде бы неуместно. IOS (все буквы заглавные) - это "межсетевая операционная система" компании Cisco, для маршрутизаторов и сетевых коммутаторов этой компании. Для признания юристами достаточно и куда более дальних совпадений.
Но, как говорится, quod licet iovi... Apple и iOS были нужны Стиву Джобсу, а с ним мало кто решался спорить, даже в конце 70-х. Поэтому конфликты торговых знаков уладили в суде, за приличные суммы денег и на каких-то условиях. Причем дело Apple vs Apple несколько раз возвращалось в суд - Apple, которая раньше была Apple Computer, просто рецидивист какой-то. Именно она раз за разом нарушала достигнутые ранее договоренности с Apple Corps, которая немедленно и с огромным удовольствием обращалась с жалобами в суд.
Но, как говорится, что дозволено Юпитеру... Судиться с владельцами торговой марки WildCard из-за незаконнорожденной (пусть и обласканной главой компании) программы и программиста, пусть очень ценного для компании, никто не собирался. Совет директоров этого бы не понял.