Содержание статьи
У меня есть хобби: я очень люблю собирать старое барахло с помоек винтажные компьютеры, среди которых имеется древний, как хвост мамонта, iBook G3 под управлением классической Mac OS 9. Выискивая по пыльным закоулкам интернета полезный софт для этой системы, однажды я совершенно случайно обнаружил программу под названием HyperCard. Эта удивительная находка оказалась не чем иным, как прародителем всего, что сейчас гордо зовется no-code, — только вот без этого душного смузи‑пафоса и подписок за двадцать баксов в месяц.
Впечатление, будто я наткнулся на настоящее сокровище, подтвердилось, когда я торжественно водрузил HyperCard на свой iBook. Приложение оказалось магическим конструктором, который позволял юзеру‑чайнику склепать себе интерактивное приложение без единой строчки хардкорного кода, хотя и располагал собственным объектно ориентированным языком программирования. Хочешь клик‑квест? Пожалуйста. Учебник по квантовой механике с кнопочками? Легко. Глядя на эту программу, невозможно отделаться от ощущения, будто Notion и PowerPoint еще в середине восьмидесятых заглянули в гости к Apple и забыли вернуться домой.

HyperCard позволял скрипт‑кидди почувствовать себя настоящим гуру UI — ты просто «накидываешь» мышкой поля, кнопки, ссылки и говоришь программе, как она должна реагировать на действия пользователя. Заметь, все это — задолго до того радостного момента, когда из недр Borland выполз монстр под названием Delphi, не говоря уж про всякие там «вижуалбейсики» и прочие, извиняюсь за выражение, WYSIWYG. А началась эта история в далеком 1985 году…
Все началось с картона. Или с марки…
HyperCard придумал парень по имени Билл Аткинсон, трудившийся в Apple c 1978 по 1990 год. Если ты слышишь это имя впервые — не паникуй, ты не одинок: Apple прославилась культом старины Стива, а такие гении, как Билл, часто оставались в тени. Аткинсон — тот самый чувак, который создал MacPaint, первый реально удобный графический редактор для обычных смертных, считающих себя дизайнерами. А еще он спроектировал QuickDraw — графический движок, рисовавший все эти красивые кнопочки и менюшки в пользовательском интерфейсе Mac OS. Сам создатель HyperCard позже вспоминал, что идея проекта пришла в его светлую голову после приема психоделиков в процессе увлекательного трипа. Так ли это, или Аткинсон попросту прикалывался над журналистами, доподлинно неизвестно, но программа и впрямь получилась необычной.

В основу концепции HyperCard лег принцип ролодекса — довольно популярного в Америке восьмидесятых настольного девайса, представляющего собой набор вращающихся картонных карточек с индексом. Ролодекс использовался для записи контактов полезных людей, телефонов и адресов фирм, поставщиков, клиентов — в общем, всей той важной фигни информации, которая не помещалась на наклеенных поверх монитора желтых листочках. Одно время в Штатах даже существовала мода на визитки в форме карточек ролодекса.

Именно Биллу Аткинсону, создателю графического интерфейса для «маков», впервые пришла в голову светлая мысль: а что, если юзер сам сможет собирать интерфейсы, как кубики, не парясь о коде? Так в 1987 году и появился на свет первый говнокод-ноукод‑конструктор для тех, кто еще не знал слова «ноукод».
Ткни и радуйся: как работает HyperCard
В системе HyperCard все крутится вокруг «стопки» — но не той, что стоит у тебя на столе в пятницу вечером. Речь идет о стопке «карточек», каждая из которых представляет собой аналог одной картонной карточки ролодекс. На такую карточку, или виртуальный экран, можно добавить различные компоненты интерфейса высокотехнологичным методом перетаскивания мышью: текстовые поля, чекбоксы, кнопки, менюхи, картинки — и разложить их, как душе угодно. Еще в комплекте программы имеются так называемые карточки‑прототипы, представляющие собой шаблоны, которые можно использовать в качестве заготовок. Например, если такой шаблон содержит фоновый рисунок, он автоматически будет виден на всех карточках проекта, ссылающихся на этот шаблон. Хочешь, чтобы в твоем приложении была одинаковая шапка и боковое меню с кнопочками, — создаешь подходящий шаблон и радуешься.

Карточки можно связывать навигацией — либо с помощью элементов интерфейса, таких как кнопки и гиперссылки (в роли которых может выступать и картинка), либо с использованием сценария на специальном языке программирования HyperTalk, о котором мы поговорим чуть позже. Скрипты позволяют переходить от одной карточки к другой при соблюдении заданных разработчиком условий. Еще в стопке можно использовать встроенную систему интерактивного поиска, а готовый проект сохранить в виде приложения Mac OS — саму программу HyperCard для просмотра контента и запуска приложения на другой машине устанавливать не нужно.
Примечательно, что HyperCard не использует какой‑либо отдельной базы данных: состояние всех карточек и стопки в целом считается активным, доступным для изменений и сохраняется в режиме реального времени непосредственно в файле проекта. Скажем, если пользователь ввел что‑то в текстовое поле или перетащил мышью картинку на экране, эти действия просто изменяют состояние целевого объекта в стопке. Такие изменения записываются сразу в физический файл стопки и не требуют нажатия кнопки Save или другого подобного действия. Это характерно для многих систем, ориентированных на базы данных, и непривычно для приложений, работающих с документами и презентациями. Для «маков» образца 1987 года подобное и вовсе было в новинку.

Аналогичным образом это выглядело и с точки зрения разработчика: ты можешь колдовать со своим проектом буквально на лету. Никакого «сохрани — скомпилируй — собери билд — перезапусти — наслаждайся багами». Добавил кнопку — она уже живая. Переписал скрипт — новый мир готов. Короче, HyperCard — это как Borland Delphi, Visual Basic и другие динозавры, только без долгих компиляций и прочего скучного программистского занудства.
HyperTalk: язык, на котором мог программировать даже твой кот
Ну что ж, мы понемногу доползли до самой сочной фишки HyperCard — языка HyperTalk. Это скриптовый объектно ориентированный язык с упрощенным синтаксисом. На HyperTalk можно было описывать логику приложения HyperCard. Этот язык слабо типизирован, многословен, а его структура стремилась максимально соответствовать структуре живого английского языка, однако при этом он поддерживал все типичные конструкции языков программирования высокого уровня, вроде if — then, goto и repeat.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее